aboutsummaryrefslogtreecommitdiff
path: root/ambi_reduced_decode_fft2-help.pd
blob: fe3fb2676b5be1b15cc8652c475be29ea29712d0 (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
266
267
268
269
270
271
272
273
274
275
#N canvas 87 6 761 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 345 335 pp element;
#X obj 56 299 mergefilename /;
#X text 344 373 multiplexer control indices;
#X text 340 384 for spec2_matrix_bundle_stat~;
#X text 367 133 1.arg: <float> unique-number used as table-name-prefix
;
#X obj 29 323 pack f s s;
#X text 367 183 6.arg: <float> ambisonic order;
#X text 367 193 7.arg: <float> ambisonic dimension;
#X text 367 203 8.arg: <float> number of real loudspeakers;
#X text 367 213 9.arg: <float> number of phantom loudspeakers;
#X text 361 223 10.arg: <float> FFT-size = 2 x effective HRIR-length
;
#X obj 38 165 bin_ambi_reduced_decode_fft2 \$0 HRIR HRTF_re HRTF_im
fadeout 1 2 4 0 256;
#X obj 30 509 table \$0_fadeout 256;
#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 345 356 print;
#X obj 29 423 table \$0_1_HRIR 256;
#X obj 265 418 table \$0_1_HRTF_re 256;
#X obj 405 418 table \$0_1_HRTF_im 256;
#X obj 29 483 table \$0_4_HRIR 256;
#X obj 29 463 table \$0_3_HRIR 256;
#X obj 29 443 table \$0_2_HRIR 256;
#X obj 265 438 table \$0_2_HRTF_re 256;
#X obj 265 458 table \$0_3_HRTF_re 256;
#X obj 405 458 table \$0_3_HRTF_im 256;
#X obj 405 438 table \$0_2_HRTF_im 256;
#X text 21 12 ambi_reduced_decode_fft2;
#X text 367 143 2.arg: <symbol> last part of left HRIR table name;
#X text 367 173 5.arg: <symbol> last part of HRIR fadeout window table
name;
#N canvas 0 0 465 384 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 367 153 3.arg: <symbol> last part of real reduced HRTF table
name;
#X text 367 163 4.arg: <symbol> last part of imag reduced HRTF table
name;
#X text 220 14 AMBISONIC BINAURAL DECODING;
#X text 446 33 of HRTF-spectra;
#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 1012 718 input_messages 0;
#X obj 147 645 outlet;
#X msg 80 324 calc_pinv;
#X msg 14 621 calc_sym;
#X obj 93 277 pp pht_ls;
#X obj 107 222 pp real_ls;
#X obj 120 178 pp load_HRIR;
#X msg 120 158 1 L0e045a.wav \, 2 L0e135a.wav \, 3 L0e225a.wav \, 4
L0e315a.wav;
#X obj 67 396 pp ipht_ireal_muladd;
#X obj 133 130 pp ambi_weight;
#X obj 147 86 pp sing_range;
#X msg 93 257 1 -90 0;
#X msg 147 66 1e-010;
#X msg 67 375 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 202 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 317 of all (real + phantom) loudspeaker positions \,;
#X text 274 341 and calculates the pseudo inverse.;
#X text 277 329 multiplicates the ambi order weight;
#X text 536 366 mirror_weight;
#X text 275 392 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 298 201 input: <real_ls> re_ls_index + phi .. 2-dimensional
;
#X text 298 212 input: <real_ls> re_ls_index + theta + phi .. 3-dimensional
;
#X text 230 247 input: <pht_ls> vi_ls_index + phi .. 2-dimensional
;
#X text 230 258 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 340 223 encodes the re_ls_index row of a matrix;
#X text 273 270 encodes the (re_ls_index + vi_ls_index) row of a matrix
;
#X text 274 281 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 586 pp calc_reduced;
#X msg 27 564 1 \, 2 \, 3;
#X obj 40 532 pp check_HRTF_arrays;
#X msg 40 511 1 \, 2 \, 3;
#X msg 53 437 1 \, 2 \, 3 \, 4;
#X obj 53 458 pp check_HRIR_arrays;
#X text 491 157 input: <load_HRIR> : re_ls_index + left_ear_HRIR_wav_file
;
#X text 230 306 input: <calc_pinv> starts the encoding;
#X text 230 366 input: <ipht_ireal_muladd> vi_ls_index re_ls_index
;
#X text 276 379 multiplies the column "vi_ls_index + re_ls_index" of
;
#X text 274 405 this column to the column "re_ls_index" of real speaker
;
#X text 227 435 input: <check_HRIR_arrays> re_ls_index;
#X text 271 448 checks the existence of the table with the "re_ls_index"-th
;
#X text 271 511 checks the existence of the reduced decoder table;
#X text 227 498 input: <check_HRTF_arrays> ambi_ch_index;
#X text 272 524 with the "ambi_ch_index"-th index.;
#X text 270 536 [1 .. (2*n_ao+1)] 2d;
#X text 418 536 [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 273 587 column of the decoder matrix and does a real FFT;
#X text 26 663 to bin_ambi_reduced_decode_fft2;
#X text 534 169 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 280 227 ____________________________________________________________
;
#X text 252 285 ____________________________________________________________
;
#X text 253 409 ____________________________________________________________
;
#X text 253 345 ____________________________________________________________
;
#X text 250 480 ____________________________________________________________
;
#X text 250 541 ____________________________________________________________
;
#X text 253 592 ____________________________________________________________
;
#X text 253 662 ____________________________________________________________
;
#X text 255 95 ____________________________________________________________
;
#X text 506 178 ____________________________________________________________
;
#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 text 250 133 ____________________________________________________________
;
#X text 276 178 ____________________________________________________________
;
#X text 272 461 index of the HRIR from loudspeaker to the left ear
;
#X text 271 473 and multiplies this HRIR with the fadeout table;
#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 49 0;
#X connect 45 3 50 0;
#X connect 45 5 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 0 0;
#X connect 49 0 48 0;
#X connect 50 0 51 0;
#X connect 51 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 connect 1 0 17 0;
#X connect 1 1 8 2;
#X connect 2 0 0 0;
#X connect 3 0 21 0;
#X connect 4 0 8 1;
#X connect 8 0 2 0;
#X connect 14 0 1 0;
#X connect 14 1 3 0;
#X connect 16 0 18 0;
#X connect 17 0 19 0;
#X connect 17 1 16 0;
#X connect 17 2 18 1;
#X connect 18 0 4 0;
#X connect 19 0 8 0;
#X connect 20 0 50 0;
#X connect 50 0 14 0;