summaryrefslogtreecommitdiff
path: root/tutorials/sndkit/sblive/equalizer.mac
diff options
context:
space:
mode:
Diffstat (limited to 'tutorials/sndkit/sblive/equalizer.mac')
-rw-r--r--tutorials/sndkit/sblive/equalizer.mac117
1 files changed, 117 insertions, 0 deletions
diff --git a/tutorials/sndkit/sblive/equalizer.mac b/tutorials/sndkit/sblive/equalizer.mac
new file mode 100644
index 0000000..f9498ac
--- /dev/null
+++ b/tutorials/sndkit/sblive/equalizer.mac
@@ -0,0 +1,117 @@
+//
+// Equalizer macros.
+//
+/*
+ *
+ * This file is part of Open Sound System.
+ *
+ * Copyright (C) 4Front Technologies 1996-2008.
+ *
+ * This this source file is released under GPL v2 license (no other versions).
+ * See the COPYING file included in the main directory of this source
+ * distribution for the license terms and conditions.
+ *
+ */
+
+#if 0
+// Constant 50% (128) gain tables
+#define INCLUDE_EQPARMS \
+.const EQb1_CST_0 0x10000000;\
+.const EQb1_CST_1 0xE042DE20;\
+.const EQb1_CST_2 0x1FBD21E0;\
+.const EQb1_CST_3 0x0FBD8640;\
+.const EQb1_CST_4 0xF04279C0;\
+.const EQb2_CST_0 0x10000000;\
+.const EQb2_CST_1 0xE2E5DDC0;\
+.const EQb2_CST_2 0x1D1A2240;\
+.const EQb2_CST_3 0x0D48B550;\
+.const EQb2_CST_4 0xF2B74AB0;\
+.const EQb3_CST_0 0x10000000;\
+.const EQb3_CST_1 0xEC7021C0;\
+.const EQb3_CST_2 0x138FDE40;\
+.const EQb3_CST_3 0x069696A0;\
+.const EQb3_CST_4 0xF9696960;\
+.const EQb4_CST_0 0x10000000;\
+.const EQb4_CST_1 0x094B0F90;\
+.const EQb4_CST_2 0xF6B4F070;\
+.const EQb4_CST_3 0x02961F24;\
+.const EQb4_CST_4 0xFD69E0DC;\
+.parm BYPASS 0 onoff ;
+#else
+#define INCLUDE_EQPARMS \
+.parm EQ_GAIN 100 mono PRESCALE;\
+.parm EQb1 128 eq1 LO;\
+.parm EQb2 128 eq2 MID;\
+.parm EQb3 128 eq3 HI;\
+.parm EQb4 128 eq4 XHI;\
+.parm BYPASS 0 onoff ;
+#endif
+
+#define INCLUDE_EQVARS \
+.gpr eq_save;\
+.gpr eq_value;\
+.const 0x1000 0x1000;\
+.const 44 I44;\
+.const EQ_ADJUST I8;\
+.const EQ_AFTERSCALE I32;\
+.const EQ_PRESCALE 0.03125 /* 1/32 */
+
+#define INCLUDE_DELAYS(PREFIX) \
+.gpr PREFIX##b1_x0;\
+.gpr PREFIX##b1_x1;\
+.gpr PREFIX##b1_x2;\
+.gpr PREFIX##b1_y0;\
+.gpr PREFIX##b1_y1;\
+.gpr PREFIX##b1_y2;\
+.gpr PREFIX##b2_x0;\
+.gpr PREFIX##b2_x1;\
+.gpr PREFIX##b2_x2;\
+.gpr PREFIX##b2_y0;\
+.gpr PREFIX##b2_y1;\
+.gpr PREFIX##b2_y2;\
+.gpr PREFIX##b3_x0;\
+.gpr PREFIX##b3_x1;\
+.gpr PREFIX##b3_x2;\
+.gpr PREFIX##b3_y0;\
+.gpr PREFIX##b3_y1;\
+.gpr PREFIX##b3_y2;\
+.gpr PREFIX##b4_x0;\
+.gpr PREFIX##b4_x1;\
+.gpr PREFIX##b4_x2;\
+.gpr PREFIX##b4_y0;\
+.gpr PREFIX##b4_y1;\
+.gpr PREFIX##b4_y2
+
+#define MOVE(a,b) ACC3(b, a, 0, 0)
+
+#define PASS_BAND(N, BAND)\
+\
+ MOVE(N##_x1,N##_x2);\
+ MOVE(N##_x0,N##_x1);\
+ MOVE(eq_value, N##_x0);\
+\
+ MOVE(N##_y1,N##_y2);\
+ MOVE(N##_y0,N##_y1);\
+ MOVE(0,N##_y0);\
+\
+ MACS(N##_y0, 0, N##_x0,EQ##BAND##_CST_0);\
+ MACS(N##_y0, N##_y0, N##_x1,EQ##BAND##_CST_1);\
+ MACS(N##_y0, N##_y0, N##_y1,EQ##BAND##_CST_2);\
+ MACS(N##_y0, N##_y0, N##_x2,EQ##BAND##_CST_3);\
+ MACS(N##_y0, N##_y0, N##_y2,EQ##BAND##_CST_4);\
+\
+ MACINTS(N##_y0, 0, N##_y0, EQ_ADJUST);\
+ ACC3(eq_value, N##_y0, 0, 0)
+
+#define EQUALIZER(SUFFIX, PREFIX, INOUT) \
+ ACC3(eq_value, INOUT, 0, 0); \
+ ACC3(eq_save, INOUT, 0, 0); \
+ MACS(eq_value, 0, eq_value, EQ_GAIN);\
+ MACS(eq_value, 0, eq_value, EQ_PRESCALE);\
+ PASS_BAND(PREFIX##b4, b4); \
+ PASS_BAND(PREFIX##b3, b3); \
+ PASS_BAND(PREFIX##b2, b2); \
+ PASS_BAND(PREFIX##b1, b1); \
+ MACINTS(eq_value, 44, eq_value, EQ_AFTERSCALE);\
+ MACINTS(INOUT, 0, eq_value, BYPASS_OFF);\
+ MACINTS(INOUT, INOUT, eq_save, BYPASS_ON)