1/*
2    YC-20 keyboard mixer implementation in Faust
3    Copyright(C) 2010 Sampo Savolainen <v2@iki.fi>
4
5    This program is free software: you can redistribute it and/or modify
6    it under the terms of the GNU General Public License as published by
7    the Free Software Foundation, either version 3 of the License, or
8    (at your option) any later version.
9
10    This program is distributed in the hope that it will be useful,
11    but WITHOUT ANY WARRANTY; without even the implied warranty of
12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13    GNU General Public License for more details.
14
15    You should have received a copy of the GNU General Public License
16    along with this program.  If not, see <http://www.gnu.org/licenses/>.
17
18*/
19// 5 octaves + one C = 61 keys
20
21key_slowdown(x) = (x@3 + x@2 + x@1 + x)/4;
22
23// Bottom 17 keys is the switchable bass manual
24key_c0 = button("c0") : key_slowdown;
25key_C0 = button("C0") : key_slowdown;
26key_d0 = button("d0") : key_slowdown;
27key_D0 = button("D0") : key_slowdown;
28key_e0 = button("e0") : key_slowdown;
29key_f0 = button("f0") : key_slowdown;
30key_F0 = button("F0") : key_slowdown;
31key_g0 = button("g0") : key_slowdown;
32key_G0 = button("G0") : key_slowdown;
33key_a0 = button("a0") : key_slowdown;
34key_A0 = button("A0") : key_slowdown;
35key_b0 = button("b0") : key_slowdown;
36
37key_c1 = button("c1") : key_slowdown;
38key_C1 = button("C1") : key_slowdown;
39key_d1 = button("d1") : key_slowdown;
40key_D1 = button("D1") : key_slowdown;
41key_e1 = button("e1") : key_slowdown;
42
43// The rest is regular manual
44key_f1 = button("f1") : key_slowdown;
45key_F1 = button("F1") : key_slowdown;
46key_g1 = button("g1") : key_slowdown;
47key_G1 = button("G1") : key_slowdown;
48key_a1 = button("a1") : key_slowdown;
49key_A1 = button("A1") : key_slowdown;
50key_b1 = button("b1") : key_slowdown;
51
52key_c2 = button("c2") : key_slowdown;
53key_C2 = button("C2") : key_slowdown;
54key_d2 = button("d2") : key_slowdown;
55key_D2 = button("D2") : key_slowdown;
56key_e2 = button("e2") : key_slowdown;
57key_f2 = button("f2") : key_slowdown;
58key_F2 = button("F2") : key_slowdown;
59key_g2 = button("g2") : key_slowdown;
60key_G2 = button("G2") : key_slowdown;
61key_a2 = button("a2") : key_slowdown;
62key_A2 = button("A2") : key_slowdown;
63key_b2 = button("b2") : key_slowdown;
64
65key_c3 = button("c3") : key_slowdown;
66key_C3 = button("C3") : key_slowdown;
67key_d3 = button("d3") : key_slowdown;
68key_D3 = button("D3") : key_slowdown;
69key_e3 = button("e3") : key_slowdown;
70key_f3 = button("f3") : key_slowdown;
71key_F3 = button("F3") : key_slowdown;
72key_g3 = button("g3") : key_slowdown;
73key_G3 = button("G3") : key_slowdown;
74key_a3 = button("a3") : key_slowdown;
75key_A3 = button("A3") : key_slowdown;
76key_b3 = button("b3") : key_slowdown;
77
78key_c4 = button("c4") : key_slowdown;
79key_C4 = button("C4") : key_slowdown;
80key_d4 = button("d4") : key_slowdown;
81key_D4 = button("D4") : key_slowdown;
82key_e4 = button("e4") : key_slowdown;
83key_f4 = button("f4") : key_slowdown;
84key_F4 = button("F4") : key_slowdown;
85key_g4 = button("g4") : key_slowdown;
86key_G4 = button("G4") : key_slowdown;
87key_a4 = button("a4") : key_slowdown;
88key_A4 = button("A4") : key_slowdown;
89key_b4 = button("b4") : key_slowdown;
90
91key_c5 = button("c5") : key_slowdown;
92
93
94// This will be needed later on
95bass_engaged = hgroup("bass",hslider("[3]bass manual",0.0, 0.0, 1.0, 1.0));
96
97// This implementation uses every voice and has equal number of outputs
98// when compared to the "slow" (read "correct") version
99keyboard_fast(
100	 c8,c7,c6,c5,c4,c3,c2,c1,
101	 C8,C7,C6,C5,C4,C3,C2,C1,
102	 d8,d7,d6,d5,d4,d3,d2,d1,
103	 D8,D7,D6,D5,D4,D3,D2,D1,
104	 e8,e7,e6,e5,e4,e3,e2,e1,
105	 f8,f7,f6,f5,f4,f3,f2,f1,
106	 F8,F7,F6,F5,F4,F3,F2,F1,
107	 g8,g7,g6,g5,g4,g3,g2,g1,
108	 G8,G7,G6,G5,G4,G3,G2,G1,
109	 a8,a7,a6,a5,a4,a3,a2,a1,
110	 A8,A7,A6,A5,A4,A3,A2,A1,
111	 b8,b7,b6,b5,b4,b3,b2,b1
112) = bus_1,
113    bus_1_3p5,
114    bus_2,
115    bus_2_2p3,
116    bus_4,
117    bus_8,
118    bus_16,
119    bass_bus_4,
120    bass_bus_8,
121    bass_bus_16
122with
123{
124	bus_1		= c1+c2+c3+c4+c5+c6+c7+c8+c8*bass_engaged;
125	bus_1_3p5	= C1+C2+C3+C4+C5+C6+C7+C8+C8;
126	bus_2		= d1+d2+d3+d4+d5+d6+d7+d8+d8
127			+ A1+A2+A3+A4+A5+A6+A7+A8+A8;
128	bus_2_2p3	= D1+D2+D3+D4+D5+D6+D7+D8+D8;
129	bus_4 		= e1+e2+e3+e4+e5+e6+e7+e8+e8;
130	bus_8		= f1+f2+f3+f4+f5+f6+f7+f8+f8
131			+ b1+b2+b3+b4+b5+b6+b7+b8+b8;
132	bus_16		= F1+F2+F3+F4+F5+F6+F7+F8+F8;
133	bass_bus_4	= g1+g2+g3+g4+g5+g6+g7+g8+g8;
134	bass_bus_8	= G1+G2+G3+G4+G5+G6+G7+G8+G8;
135	bass_bus_16	= a1+a2+a3+a4+a5+a6+a7+a8+a8;
136};
137
138// This function sums the 96 signals together using the above
139// defined "buttons"
140keyboard(
141	 c8,c7,c6,c5,c4,c3,c2,c1,
142	 C8,C7,C6,C5,C4,C3,C2,C1,
143	 d8,d7,d6,d5,d4,d3,d2,d1,
144	 D8,D7,D6,D5,D4,D3,D2,D1,
145	 e8,e7,e6,e5,e4,e3,e2,e1,
146	 f8,f7,f6,f5,f4,f3,f2,f1,
147	 F8,F7,F6,F5,F4,F3,F2,F1,
148	 g8,g7,g6,g5,g4,g3,g2,g1,
149	 G8,G7,G6,G5,G4,G3,G2,G1,
150	 a8,a7,a6,a5,a4,a3,a2,a1,
151	 A8,A7,A6,A5,A4,A3,A2,A1,
152	 b8,b7,b6,b5,b4,b3,b2,b1
153) = bus_1     + bus_1_bleed,
154    bus_1_3p5 + bus_1_3p5_bleed,
155    bus_2     + bus_2_bleed,
156    bus_2_2p3 + bus_2_2p3_bleed,
157    bus_4     + bus_4_bleed,
158    bus_8     + bus_8_bleed,
159    bus_16    + bus_16_bleed,
160    bass_bus_4,
161    bass_bus_8,
162    bass_bus_16
163with
164{
165	// some measurements show -30..-40dB of overall level change, but it's way too loud,
166	// probably as to how the bleed compounds from multiple bus bars.
167	// this gain coefficient is selected as -54dB
168	bus_bleed_filter = passive_hp(100000.0, 0.001) : *(0.002);
169	apply_realism    = *( select2( realism_control >= (5.0/6.0), 0.0, 1.0) );
170
171	// ******** BUS 1
172
173	bus_1     =  (key_c0*c5 + key_C0*C5 + key_d0*d5 + key_D0*D5 + key_e0*e5 + key_f0*f5 + key_F0*F5 + key_g0*g5 + key_G0*G5 + key_a0*a5 + key_A0*A5 + key_b0*b5
174	            + key_c1*c6 + key_C1*C6 + key_d1*d6 + key_D1*D6 + key_e1*e6) * (1.0 - bass_engaged)
175		                                                                + key_f1*f6 + key_F1*F6 + key_g1*g6 + key_G1*G6 + key_a1*a6 + key_A1*A6 + key_b1*b6
176	            + key_c2*c7 + key_C2*C7 + key_d2*d7 + key_D2*D7 + key_e2*e7 + key_f2*f7 + key_F2*F7 + key_g2*g7 + key_G2*G7 + key_a2*a7 + key_A2*A7 + key_b2*b7
177	            + key_c3*c8 + key_C3*C8 + key_d3*d8 + key_D3*D8 + key_e3*e8 + key_f3*f8 + key_F3*F8 + key_g3*g8 + key_G3*G8 + key_a3*a8 + key_A3*A8 + key_b3*b8
178	            + key_c4*c8 + key_C4*C8 + key_d4*d8 + key_D4*D8 + key_e4*e8 + key_f4*f8 + key_F4*F8 + key_g4*g8 + key_G4*G8 + key_a4*a8 + key_A4*A8 + key_b4*b8
179		    + key_c5*c8;
180
181	bus_1_all =  (c5 + C5 + d5 + D5 + e5 + f5 + F5 + g5 + G5 + a5 + A5 + b5
182	            + c6 + C6 + d6 + D6 + e6) * (1.0 - bass_engaged)
183		                             + f6 + F6 + g6 + G6 + a6 + A6 + b6
184	            + c7 + C7 + d7 + D7 + e7 + f7 + F7 + g7 + G7 + a7 + A7 + b7
185	            + c8 + C8 + d8 + D8 + e8 + f8 + F8 + g8 + G8 + a8 + A8 + b8
186	            + c8 + C8 + d8 + D8 + e8 + f8 + F8 + g8 + G8 + a8 + A8 + b8
187		    + c8;
188
189	bus_1_bleed = bus_1_all - bus_1 : bus_bleed_filter : apply_realism;
190
191	// ******** BUS 1 3/5
192
193	bus_1_3p5 =  (key_c0*e4 + key_C0*f4 + key_d0*F4 + key_D0*g4 + key_e0*G4 + key_f0*a4 + key_F0*A4 + key_g0*b4 + key_G0*c5 + key_a0*C5 + key_A0*d5 + key_b0*D5
194	            + key_c1*e5 + key_C1*f5 + key_d1*F5 + key_D1*g5 + key_e1*G5) * (1.0 - bass_engaged)
195		                                                                + key_f1*a5 + key_F1*A5 + key_g1*b5 + key_G1*c6 + key_a1*C6 + key_A1*d6 + key_b1*D6
196	            + key_c2*e6 + key_C2*f6 + key_d2*F6 + key_D2*g6 + key_e2*G6 + key_f2*a6 + key_F2*A6 + key_g2*b6 + key_G2*c7 + key_a2*C7 + key_A2*d7 + key_b2*D7
197	            + key_c3*e7 + key_C3*f7 + key_d3*F7 + key_D3*g7 + key_e3*G7 + key_f3*a7 + key_F3*A7 + key_g3*b7 + key_G3*c8 + key_a3*C8 + key_A3*d8 + key_b3*D8
198	            + key_c4*e8 + key_C4*f8 + key_d4*F8 + key_D4*g8 + key_e4*G8 + key_f4*a8 + key_F4*A8 + key_g4*b8 + key_G4*c8 + key_a4*C8 + key_A4*d8 + key_b4*D8
199		    + key_c5*e8;
200
201	bus_1_3p5_all =(e4+f4 + F4 + g4 + G4 + a4 + A4 + b4 + c5 + C5 + d5 + D5
202	            + e5 + f5 + F5 + g5 + G5) * (1.0 - bass_engaged)
203		                             + a5 + A5 + b5 + c6 + C6 + d6 + D6
204	            + e6 + f6 + F6 + g6 + G6 + a6 + A6 + b6 + c7 + C7 + d7 + D7
205	            + e7 + f7 + F7 + g7 + G7 + a7 + A7 + b7 + c8 + C8 + d8 + D8
206	            + e8 + f8 + F8 + g8 + G8 + a8 + A8 + b8 + c8 + C8 + d8 + D8
207		    + e8;
208
209	bus_1_3p5_bleed = bus_1_3p5_all - bus_1_3p5 : bus_bleed_filter : apply_realism;
210
211	// ******** BUS 2
212
213	bus_2     =  (key_c0*c4 + key_C0*C4 + key_d0*d4 + key_D0*D4 + key_e0*e4 + key_f0*f4 + key_F0*F4 + key_g0*g4 + key_G0*G4 + key_a0*a4 + key_A0*A4 + key_b0*b4
214	            + key_c1*c5 + key_C1*C5 + key_d1*d5 + key_D1*D5 + key_e1*e5) * (1.0 - bass_engaged)
215		                                                                + key_f1*f5 + key_F1*F5 + key_g1*g5 + key_G1*G5 + key_a1*a5 + key_A1*A5 + key_b1*b5
216	            + key_c2*c6 + key_C2*C6 + key_d2*d6 + key_D2*D6 + key_e2*e6 + key_f2*f6 + key_F2*F6 + key_g2*g6 + key_G2*G6 + key_a2*a6 + key_A2*A6 + key_b2*b6
217	            + key_c3*c7 + key_C3*C7 + key_d3*d7 + key_D3*D7 + key_e3*e7 + key_f3*f7 + key_F3*F7 + key_g3*g7 + key_G3*G7 + key_a3*a7 + key_A3*A7 + key_b3*b7
218	            + key_c4*c8 + key_C4*C8 + key_d4*d8 + key_D4*D8 + key_e4*e8 + key_f4*f8 + key_F4*F8 + key_g4*g8 + key_G4*G8 + key_a4*a8 + key_A4*A8 + key_b4*b8
219		    + key_c5*c8;
220
221	bus_2_all =  (c4 + C4 + d4 + D4 + e4 + f4 + F4 + g4 + G4 + a4 + A4 + b4
222	            + c5 + C5 + d5 + D5 + e5) * (1.0 - bass_engaged)
223		                             + f5 + F5 + g5 + G5 + a5 + A5 + b5
224	            + c6 + C6 + d6 + D6 + e6 + f6 + F6 + g6 + G6 + a6 + A6 + b6
225	            + c7 + C7 + d7 + D7 + e7 + f7 + F7 + g7 + G7 + a7 + A7 + b7
226	            + c8 + C8 + d8 + D8 + e8 + f8 + F8 + g8 + G8 + a8 + A8 + b8
227		    + c8;
228
229	bus_2_bleed = bus_2_all - bus_2 : bus_bleed_filter : apply_realism;
230
231	// ******** BUS 2 2/3
232
233	bus_2_2p3 =  (key_c0*g3 + key_C0*G3 + key_d0*a3 + key_D0*A3 + key_e0*b3 + key_f0*c4 + key_F0*C4 + key_g0*d4 + key_G0*D4 + key_a0*e4 + key_A0*f4 + key_b0*F4
234	            + key_c1*g4 + key_C1*G4 + key_d1*a4 + key_D1*A4 + key_e1*b4) * (1.0 - bass_engaged)
235		                                                                + key_f1*c5 + key_F1*C5 + key_g1*d5 + key_G1*D5 + key_a1*e5 + key_A1*f5 + key_b1*F5
236	            + key_c2*g5 + key_C2*G5 + key_d2*a5 + key_D2*A5 + key_e2*b5 + key_f2*c6 + key_F2*C6 + key_g2*d6 + key_G2*D6 + key_a2*e6 + key_A2*f6 + key_b2*F6
237	            + key_c3*g6 + key_C3*G6 + key_d3*a6 + key_D3*A6 + key_e3*b6 + key_f3*c7 + key_F3*C7 + key_g3*d7 + key_G3*D7 + key_a3*e7 + key_A3*f7 + key_b3*F7
238	            + key_c4*g7 + key_C4*G7 + key_d4*a7 + key_D4*A7 + key_e4*b7 + key_f4*c8 + key_F4*C8 + key_g4*d8 + key_G4*D8 + key_a4*e8 + key_A4*f8 + key_b4*F8
239		    + key_c5*g8;
240
241	bus_2_2p3_all=(g3+ G3 + a3 + A3 + b3 + c4 + C4 + d4 + D4 + e4 + f4 + F4
242	            + g4 + G4 + a4 + A4 + b4) * (1.0 - bass_engaged)
243		                             + c5 + C5 + d5 + D5 + e5 + f5 + F5
244	            + g5 + G5 + a5 + A5 + b5 + c6 + C6 + d6 + D6 + e6 + f6 + F6
245	            + g6 + G6 + a6 + A6 + b6 + c7 + C7 + d7 + D7 + e7 + f7 + F7
246	            + g7 + G7 + a7 + A7 + b7 + c8 + C8 + d8 + D8 + e8 + f8 + F8
247		    + g8;
248
249	bus_2_2p3_bleed = bus_2_2p3_all - bus_2_2p3 : bus_bleed_filter : apply_realism;
250
251	// ******** BUS 4
252
253	bus_4     =  bass_keys_4 * (1.0 - bass_engaged)                         + key_f1*f4 + key_F1*F4 + key_g1*g4 + key_G1*G4 + key_a1*a4 + key_A1*A4 + key_b1*b4
254	            + key_c2*c5 + key_C2*C5 + key_d2*d5 + key_D2*D5 + key_e2*e5 + key_f2*f5 + key_F2*F5 + key_g2*g5 + key_G2*G5 + key_a2*a5 + key_A2*A5 + key_b2*b5
255	            + key_c3*c6 + key_C3*C6 + key_d3*d6 + key_D3*D6 + key_e3*e6 + key_f3*f6 + key_F3*F6 + key_g3*g6 + key_G3*G6 + key_a3*a6 + key_A3*A6 + key_b3*b6
256	            + key_c4*c7 + key_C4*C7 + key_d4*d7 + key_D4*D7 + key_e4*e7 + key_f4*f7 + key_F4*F7 + key_g4*g7 + key_G4*G7 + key_a4*a7 + key_A4*A7 + key_b4*b7
257		    + key_c5*c8;
258
259	bus_4_all =  bass_keys_4_all * (1.0 - bass_engaged)
260                                             + f4 + F4 + g4 + G4 + a4 + A4 + b4
261	            + c5 + C5 + d5 + D5 + e5 + f5 + F5 + g5 + G5 + a5 + A5 + b5
262	            + c6 + C6 + d6 + D6 + e6 + f6 + F6 + g6 + G6 + a6 + A6 + b6
263	            + c7 + C7 + d7 + D7 + e7 + f7 + F7 + g7 + G7 + a7 + A7 + b7
264		    + c8;
265
266	bus_4_bleed = bus_4_all - bus_4 : bus_bleed_filter : apply_realism;
267
268	// ******** BUS 8
269
270	bus_8     = bass_keys_8 * (1.0 - bass_engaged)                          + key_f1*f3 + key_F1*F3 + key_g1*g3 + key_G1*G3 + key_a1*a3 + key_A1*A3 + key_b1*b3
271	            + key_c2*c4 + key_C2*C4 + key_d2*d4 + key_D2*D4 + key_e2*e4 + key_f2*f4 + key_F2*F4 + key_g2*g4 + key_G2*G4 + key_a2*a4 + key_A2*A4 + key_b2*b4
272	            + key_c3*c5 + key_C3*C5 + key_d3*d5 + key_D3*D5 + key_e3*e5 + key_f3*f5 + key_F3*F5 + key_g3*g5 + key_G3*G5 + key_a3*a5 + key_A3*A5 + key_b3*b5
273	            + key_c4*c6 + key_C4*C6 + key_d4*d6 + key_D4*D6 + key_e4*e6 + key_f4*f6 + key_F4*F6 + key_g4*g6 + key_G4*G6 + key_a4*a6 + key_A4*A6 + key_b4*b6
274		    + key_c5*c7;
275
276	bus_8_all = bass_keys_8_all * (1.0 - bass_engaged)
277                                             + f3 + F3 + g3 + G3 + a3 + A3 + b3
278	            + c4 + C4 + d4 + D4 + e4 + f4 + F4 + g4 + G4 + a4 + A4 + b4
279	            + c5 + C5 + d5 + D5 + e5 + f5 + F5 + g5 + G5 + a5 + A5 + b5
280	            + c6 + C6 + d6 + D6 + e6 + f6 + F6 + g6 + G6 + a6 + A6 + b6
281		    + c7;
282
283	bus_8_bleed = bus_8_all - bus_8 : bus_bleed_filter : apply_realism;
284
285	// ******** BUS 16
286
287	// compensate for the different impedance on the 16' bus bar compared to other bus bars by adding 4.5dB of gain
288	bus_16    = bass_keys_16 * (1.0 - bass_engaged)                         + key_f1*f2 + key_F1*F2 + key_g1*g2 + key_G1*G2 + key_a1*a2 + key_A1*A2 + key_b1*b2
289	            + key_c2*c3 + key_C2*C3 + key_d2*d3 + key_D2*D3 + key_e2*e3 + key_f2*f3 + key_F2*F3 + key_g2*g3 + key_G2*G3 + key_a2*a3 + key_A2*A3 + key_b2*b3
290	            + key_c3*c4 + key_C3*C4 + key_d3*d4 + key_D3*D4 + key_e3*e4 + key_f3*f4 + key_F3*F4 + key_g3*g4 + key_G3*G4 + key_a3*a4 + key_A3*A4 + key_b3*b4
291	            + key_c4*c5 + key_C4*C5 + key_d4*d5 + key_D4*D5 + key_e4*e5 + key_f4*f5 + key_F4*F5 + key_g4*g5 + key_G4*G5 + key_a4*a5 + key_A4*A5 + key_b4*b5
292		    + key_c5*c6 : *(1.679);
293
294	bus_16_all= bass_keys_16_all * (1.0 - bass_engaged)
295                                             + f2 + F2 + g2 + G2 + a2 + A2 + b2
296	            + c3 + C3 + d3 + D3 + e3 + f3 + F3 + g3 + G3 + a3 + A3 + b3
297	            + c4 + C4 + d4 + D4 + e4 + f4 + F4 + g4 + G4 + a4 + A4 + b4
298	            + c5 + C5 + d5 + D5 + e5 + f5 + F5 + g5 + G5 + a5 + A5 + b5
299		    + c6 : *(1.679);
300
301	bus_16_bleed = bus_16_all - bus_16 : bus_bleed_filter : apply_realism;
302
303
304	// No bleed for bass buses, as there is a low pass filter which would clean up most of the bleed anyway
305
306	bass_bus_4  = bass_keys_4  * bass_engaged;
307	bass_bus_8  = bass_keys_8  * bass_engaged;
308	bass_bus_16 = bass_keys_16 * bass_engaged;
309
310	// ********* BASS BUS 4
311
312	bass_keys_4  = (key_c0*c3 + key_C0*C3 + key_d0*d3 + key_D0*D3 + key_e0*e3 + key_f0*f3 + key_F0*F3 + key_g0*g3 + key_G0*G3 + key_a0*a3 + key_A0*A3 + key_b0*b3
313	              + key_c1*c4 + key_C1*C4 + key_d1*d4 + key_D1*D4 + key_e1*e4);
314	bass_keys_4_all =(c3+C3 + d3 + D3 + e3 + f3 + F3 + g3 + G3 + a3 + A3 + b3
315	              + c4 + C4 + d4 + D4 + e4);
316
317	// ********* BASS BUS 8
318
319	bass_keys_8  = (key_c0*c2 + key_C0*C2 + key_d0*d2 + key_D0*D2 + key_e0*e2 + key_f0*f2 + key_F0*F2 + key_g0*g2 + key_G0*G2 + key_a0*a2 + key_A0*A2 + key_b0*b2
320	              + key_c1*c3 + key_C1*C3 + key_d1*d3 + key_D1*D3 + key_e1*e3);
321	bass_keys_8_all=(c2+ C2 + d2 + D2 + e2 + f2 + F2 + g2 + G2 + a2 + A2 + b2
322	              + c3 + C3 + d3 + D3 + e3);
323
324	// ********* BASS BUS 16
325
326	bass_keys_16 = (key_c0*c1 + key_C0*C1 + key_d0*d1 + key_D0*D1 + key_e0*e1 + key_f0*f1 + key_F0*F1 + key_g0*g1 + key_G0*G1 + key_a0*a1 + key_A0*A1 + key_b0*b1
327	              + key_c1*c2 + key_C1*C2 + key_d1*d2 + key_D1*D2 + key_e1*e2);
328	bass_keys_16_all=(c1+C1 + d1 + D1 + e1 + f1 + F1 + g1 + G1 + a1 + A1 + b1
329	              + c2 + C2 + d2 + D2 + e2);
330
331};
332
333