#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: unique-number used as table-name-prefix ; #X obj 29 323 pack f s s; #X text 367 183 6.arg: ambisonic order; #X text 367 193 7.arg: ambisonic dimension; #X text 367 203 8.arg: number of real loudspeakers; #X text 367 213 9.arg: number of phantom loudspeakers; #X text 361 223 10.arg: 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: last part of left HRIR table name; #X text 367 173 5.arg: 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: last part of real reduced HRTF table name; #X text 367 163 4.arg: 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: 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: 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: re_ls_index + phi .. 2-dimensional ; #X text 298 212 input: re_ls_index + theta + phi .. 3-dimensional ; #X text 230 247 input: vi_ls_index + phi .. 2-dimensional ; #X text 230 258 input: 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: : re_ls_index + left_ear_HRIR_wav_file ; #X text 230 306 input: starts the encoding; #X text 230 366 input: 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: 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: 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: 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: 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;