aboutsummaryrefslogtreecommitdiff
path: root/help/ambi_reduced_decode_fir2-help.pd
blob: e9ad7fa024b09ed218533f335d1a749da1fab693 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
#N canvas 87 6 818 654 10;
#X obj 29 365 soundfiler;
#X obj 38 203 unpack s s;
#X msg 29 344 read -skip \$1 \$2 \$3;
#X obj 387 335 pp element;
#X obj 56 299 mergefilename /;
#X text 386 373 multiplexer control indices;
#X text 382 384 for spec2_matrix_bundle_stat~;
#X text 407 133 1.arg: <float> unique-number used as table-name-prefix
;
#X obj 29 323 pack f s s;
#X obj 56 251 symbol .;
#X obj 38 226 t b b s;
#X obj 56 273 pack s s;
#X obj 29 260 f 0;
#X obj 38 60 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X obj 387 356 print;
#X text 407 143 2.arg: <symbol> last part of left HRIR table name;
#N canvas 0 0 469 388 init_fadeout 0;
#X obj 124 23 loadbang;
#X obj 124 45 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X obj 124 73 for++ 0 127;
#X obj 124 144 t b;
#X msg 124 164 1;
#X obj 124 123 moses 95;
#X obj 167 144 - 95;
#X obj 167 166 / 32;
#X obj 167 220 * 3.14159;
#X obj 167 264 t f f;
#X obj 172 286 *;
#X obj 172 317 tabwrite \$0_fadeout;
#X obj 270 162 + 128;
#X msg 270 185 0 \$1;
#X obj 153 97 t f f f;
#X obj 167 241 cos;
#X obj 167 199 / 2;
#X connect 0 0 1 0;
#X connect 1 0 2 0;
#X connect 2 0 14 0;
#X connect 3 0 4 0;
#X connect 4 0 11 0;
#X connect 5 0 3 0;
#X connect 5 1 6 0;
#X connect 6 0 7 0;
#X connect 7 0 16 0;
#X connect 8 0 15 0;
#X connect 9 0 10 0;
#X connect 9 1 10 1;
#X connect 10 0 11 0;
#X connect 12 0 13 0;
#X connect 13 0 11 0;
#X connect 14 0 5 0;
#X connect 14 1 11 1;
#X connect 14 2 12 0;
#X connect 15 0 9 0;
#X connect 16 0 8 0;
#X restore 157 510 pd init_fadeout;
#X text 87 585 IEM KUG;
#X text 71 573 musil;
#X text 101 573 @;
#X text 107 573 iem.at;
#X text 70 595 Graz \, Austria;
#X text 22 562 (c) Thomas Musil 2000 - 2006;
#X text 211 40 up to 12.Order 2-dimensional;
#X text 208 28 up to 5.Order 3-dimensional or;
#X text 220 14 AMBISONIC BINAURAL DECODING;
#X text 429 20 calculates a reduced set;
#X obj 39 112 cnv 15 102 15 empty empty empty 20 12 0 14 -260818 -66577
0;
#N canvas 0 5 1006 718 input_messages 0;
#X obj 197 645 outlet;
#X msg 67 383 calc_pinv;
#X msg 14 615 calc_sym;
#X obj 93 273 pp pht_ls;
#X obj 107 218 pp real_ls;
#X obj 120 174 pp load_HRIR;
#X msg 120 154 1 L0e045a.wav \, 2 L0e135a.wav \, 3 L0e225a.wav \, 4
L0e315a.wav;
#X obj 80 329 pp ipht_ireal_muladd;
#X obj 133 130 pp ambi_weight;
#X obj 147 86 pp sing_range;
#X msg 93 253 1 -90 0;
#X msg 147 66 1e-010;
#X msg 80 308 1 4 0.707;
#X obj 14 26 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X msg 133 110 1 1;
#X obj 14 5 inlet;
#X msg 107 198 1 45 \, 2 135 \, 3 225 \, 4 315;
#X text 670 112 -180 <= phi <= +180;
#X text 231 115 input: <ambi_weight> one mul-factor for each;
#X text 655 12 n_ao = ambisonic-order;
#X text 667 49 all angles in degree;
#X text 276 126 ambisonic order group to suppress the side-lobe-phenomena
;
#X text 273 370 of all (real + phantom) loudspeaker positions \,;
#X text 274 394 and calculates the pseudo inverse.;
#X text 277 382 multiplicates the ambi order weight;
#X text 536 297 mirror_weight;
#X text 275 323 phantom speaker with the factor "mirror_weight" and
adds;
#X text 231 38 input: <sing_range> singularity range;
#X text 274 49 when calculating the inverse of the matrix by gauss
;
#X text 274 59 algorithm \, you have to divide a row by a certain number
\,;
#X text 274 79 outside of this range (> sing_range \, or < -sing_range).
;
#X text 274 91 Otherwise we say \, this matrix is singular.;
#X text 274 69 to achieve the identity matrix. This number has to be
;
#X text 640 23 n_re_ls = number of real loudspeakers;
#X text 640 35 n_vi_ls = number of virtual phantom loudspeakers;
#X text 271 197 input: <real_ls> re_ls_index + phi .. 2-dimensional
;
#X text 271 208 input: <real_ls> re_ls_index + theta + phi .. 3-dimensional
;
#X text 231 241 input: <pht_ls> vi_ls_index + phi .. 2-dimensional
;
#X text 231 252 input: <pht_ls> vi_ls_index + theta + phi .. 3-dimensional
;
#X text 670 100 -90 <= theta <= +90;
#X text 662 76 1 <= re_ls_index <= n_re_ls;
#X text 662 87 1 <= vi_ls_index <= n_vi_ls;
#X text 313 219 encodes the re_ls_index row of a matrix;
#X text 274 264 encodes the (re_ls_index + vi_ls_index) row of a matrix
;
#X text 275 275 we need them to achieve a nonsingular matrix;
#X obj 14 45 t b b b b b b b b b b b;
#X obj 27 584 pp calc_reduced;
#X msg 27 562 1 \, 2 \, 3;
#X msg 40 506 1 \, 2 \, 3;
#X msg 53 439 1 \, 2 \, 3 \, 4;
#X obj 53 460 pp check_HRIR_arrays;
#X text 481 150 input: <load_HRIR> : re_ls_index + left_ear_HRIR_wav_file
;
#X text 230 359 input: <calc_pinv> starts the encoding;
#X text 230 297 input: <ipht_ireal_muladd> vi_ls_index re_ls_index
;
#X text 276 310 multiplies the column "vi_ls_index + re_ls_index" of
;
#X text 274 336 this column to the column "re_ls_index" of real speaker
;
#X text 230 424 input: <check_HRIR_arrays> re_ls_index;
#X text 274 437 checks the existence of the table with the "re_ls_index"-th
;
#X text 274 509 checks the existence of the reduced decoder table;
#X text 275 522 with the "ambi_ch_index"-th index.;
#X text 273 534 [1 .. (2*n_ao+1)] 2d;
#X text 421 534 [1 .. (n_ao+1)*(n_ao+1)] 3d;
#X text 230 561 input: <calc_reduced> ambi_ch_index;
#X text 275 574 multiplies the matrix of HRIR with the "ambi_ch_index"-th
;
#X text 26 663 to bin_ambi_reduced_decode_fft2;
#X text 524 162 and outputs on the left 2 symbols (table + wav);
#X text 230 611 input: <calc_sym> outputs a list of 2 floats;
#X text 273 633 one means symmetric \, two means asymmetric column
of;
#X text 273 644 reduced decoder matrix. (message is especially for
;
#X text 253 223 ____________________________________________________________
;
#X text 253 279 ____________________________________________________________
;
#X text 253 340 ____________________________________________________________
;
#X text 253 398 ____________________________________________________________
;
#X text 253 476 ____________________________________________________________
;
#X text 253 539 ____________________________________________________________
;
#X text 253 592 ____________________________________________________________
;
#X text 253 662 ____________________________________________________________
;
#X text 255 95 ____________________________________________________________
;
#X text 496 168 ____________________________________________________________
;
#X text 636 58 _________________________________________________;
#X text 636 121 _________________________________________________;
#X text 66 24 in this order;
#X text 275 655 matrix object "spec2_matrix_bundle_stat~";
#X obj 40 527 pp check_HRIR_RED_arrays;
#X text 230 496 input: <check_HRIR_RED_arrays> ambi_ch_index;
#X text 273 587 column of the decoder matrix;
#X text 274 462 and multiplies this HRIR with the fadeout table;
#X text 275 450 index of the HRIR from loudspeaker to the left ear
;
#X text 273 622 second float is the index \, first float is one or
two \,;
#X connect 1 0 0 0;
#X connect 2 0 0 0;
#X connect 3 0 0 0;
#X connect 4 0 0 0;
#X connect 5 0 0 0;
#X connect 6 0 5 0;
#X connect 7 0 0 0;
#X connect 8 0 0 0;
#X connect 9 0 0 0;
#X connect 10 0 3 0;
#X connect 11 0 9 0;
#X connect 12 0 7 0;
#X connect 13 0 45 0;
#X connect 14 0 8 0;
#X connect 15 0 13 0;
#X connect 16 0 4 0;
#X connect 45 0 2 0;
#X connect 45 1 47 0;
#X connect 45 2 48 0;
#X connect 45 3 49 0;
#X connect 45 4 1 0;
#X connect 45 7 16 0;
#X connect 45 8 6 0;
#X connect 45 9 14 0;
#X connect 45 10 11 0;
#X connect 46 0 0 0;
#X connect 47 0 46 0;
#X connect 48 0 83 0;
#X connect 49 0 50 0;
#X connect 50 0 0 0;
#X connect 83 0 0 0;
#X restore 38 111 pd input_messages;
#X text 108 203 load control of Head Related;
#X text 108 215 Impulse Responses;
#X text 21 12 ambi_reduced_decode_fir2;
#X text 446 33 of HRIRs;
#X obj 29 423 table \$0_1_HRIR 128;
#X obj 29 443 table \$0_2_HRIR 128;
#X obj 29 463 table \$0_3_HRIR 128;
#X obj 29 483 table \$0_4_HRIR 128;
#X obj 30 509 table \$0_fadeout 128;
#X obj 265 418 table \$0_1_HRIR_RED 128;
#X obj 265 438 table \$0_2_HRIR_RED 128;
#X obj 265 458 table \$0_3_HRIR_RED 128;
#X text 407 203 8.arg: <float> number of phantom loudspeakers;
#X text 407 193 7.arg: <float> number of real loudspeakers;
#X text 407 183 6.arg: <float> ambisonic dimension;
#X text 407 173 5.arg: <float> ambisonic order;
#X text 407 163 4.arg: <symbol> last part of HRIR fadeout window table
name;
#X text 407 153 3.arg: <symbol> last part of reduced HRIR table name
;
#X text 407 213 9.arg: <float> FIR-size = effective HRIR-length;
#X obj 38 165 bin_ambi_reduced_decode_fir2 \$0 HRIR HRIR_RED fadeout
1 2 4 0 128;
#X connect 1 0 10 0;
#X connect 1 1 8 2;
#X connect 2 0 0 0;
#X connect 3 0 14 0;
#X connect 4 0 8 1;
#X connect 8 0 2 0;
#X connect 9 0 11 0;
#X connect 10 0 12 0;
#X connect 10 1 9 0;
#X connect 10 2 11 1;
#X connect 11 0 4 0;
#X connect 12 0 8 0;
#X connect 13 0 28 0;
#X connect 28 0 48 0;
#X connect 48 0 1 0;
#X connect 48 1 3 0;