a modular threedimensional spatialization-engine that can easily be extended with roomsimulation-algorithms

ambisonic being a spatialization method based on intensity-panning seems to be extremely fine for spatial-sound-installations with >1 listeners. moreover, the specifique structure of ambisonic-signals makes possible a good and easy-to-do roomsimulation (reverberation)

ambisonic being a spatialization method based on intensity-panning seems to be extremely fine for spatial-sound-installations with >1 listeners. moreover, the specifique structure of ambisonic-signals makes possible a good and easy-to-do roomsimulation (reverberation)

sources were coded with 3rd degree ambisonic (1+6 channels:

the mono-signal (inlet1) is weighted with respect to the virtual position of the soundsource (inlet2) and a fadeaway-coefficient-triple (inlet3) to get the ambisonic signals

the weights for each channel are calculated in object

W_factor |
0.707 |

X_factor |
(r0/r)^k1 * cos (phi) * sin (theta) |

Y_factor |
(r0/r)^k1 * sin (phi) * sin (theta) |

Z_factor |
(r0/r)^k1 * cos (theta) |

U_factor |
(r0/r)^k2 * cos (2*phi) * sin (theta) |

V_factor |
(r0/r)^k2 * sin (2*phi) * sin (theta) |

S_factor |
(r0/r)^k3 * cos (3*phi) * sin (theta) |

T_factor |
(r0/r)^k3 * sin (3*phi) * sin (theta) |

the fadeaway-coefficients

the refernce-distance

following is a description of a three step reverberation-algorithm fro generation of 3d-reverberation

since an exact localization of virtual (due to the sound-reflection on surfaces) sources is useless (because of our normal hearing habit) and impossible by now (because of the summation of all sources) we will aply the 3d reverberation only to 1st degree ambisonic

some roomspecifique coefficients can be set (inlet2) :

dBgain_refl |
gain of the first reflections in dB |

dBgain_diff |
gain of the diffuse reflections in dB |

roomX |
length of the simulated room |

roomY |
width of the simulated room |

roomZ |
height of the simulated room |

alpha_refl |
lowpass-attenuation for first reflections [0..100] |

feedback |
feedback gain for the diffuse soundfield in dB |

alpha_diff |
lowpass-attenuation for diffuse reflections [0..100] |

the earposition

because the positions of the seperate soundsources is not known (any longer) and because only the sum of all signals is available by now, the position of the source of the sum is set to the listener's position. by doing so a good reception of the room-size can be achieved at minimal computation cost

the delay of the first reflection of a specifique boundary surface is therefore set to the time the sound needs from the ear-position to the said wall and back again

g(wall_i) |
(distance to wall_i)/(sum of all distances) |

to realize a virtual turning of the head by

1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |

0 | cos (1*psi) | sin (1*psi) | 0 | 0 | 0 | 0 | 0 |

0 | -sin (1*psi) | cos(1*psi) | 0 | 0 | 0 | 0 | 0 |

0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 |

0 | 0 | 0 | 0 | cos (2*psi) | sin (2*psi) | 0 | 0 |

0 | 0 | 0 | 0 | -sin (2*psi) | cos(2*psi) | 0 | 0 |

0 | 0 | 0 | 0 | 0 | 0 | cos (3*psi) | sin (3*psi) |

0 | 0 | 0 | 0 | 0 | 0 | -sin (3*psi) | cos(3*psi) |

of course, the speakers have to calibrated to make differences in level and delay naught; it is desirable to do a spectral calibration too (by choosing appropriate speakers, equalizing)

generally spoken, the speaker signal LS for one speaker (azimuth

LS |
G1*W*p1 + G2*[X*p2*cos(alpha)*cos(beta) + Y*p3*sin(alpha)*cos(beta) + Z*p4*sin(beta) + U*p5*cos(2*alpha)*cos(beta) + V*p6*cos(2*alpha)*cos(beta) + S*p7*cos(3*alpha)*cos(beta) + T*p8*sin(3*alpha)*cos(beta)] |

the weights `G1` are `G2` are depending on the number of speakers `N` and according to GERZON:

G1 = G2 = sqrt (8/3N) |

thus resulting in a realroomspecifique decoder-matrix (eg: object

a mastergain is applied here too

- the patch needs 16 outputs, so you'll need a
**rme9652 hammerfall**soundcard - this documentation is available also in
**german**:: local or net
- the complete demo-patch is downloadable at ftp://iem.kug.ac.at/pd/Patches/ambisonic

forum für umläute Last modified: Thu Jul 27 14:45:27 CEST 2000