Interactive Swarm Space | |||||||||||
|
Interactive Swarm Space | |||||||||||
|
Basics | ISO Flock | ISO Synth | Networking | API | Publications |
|
||||||||||||||||||||||||
Spatialization Techniques Table of Contents Multichannel Output See Multichannel IntroductionAmbisonics is a surround-system for encoding and rendering a 3D sound field. While Ambisonic installations traditionally work with a Ambisonic encoder and a separate decoder, ISO's AEPUnit (Ambisonic Equivalent Panning Unit), combines these two into one single unit, that features a great advantage over traditional setups: The order of the ambisonic computation can be arbitrary, the performance is unaffected!! This has been discovered by none other then our project leader Martin Neukom and has been presented at AES 121st Convention, San Francisco. Kudos to you, Martin! How to setup an ambisonic speaker arrayAEPUnit in actionAn AEPUnit represents a single-channel sound entity in space. Its 3D position can be controlled by a 3-channel ControlPort (x,y,z) and the aforementioned order is represented by a SwitchPort ("order"). When initializing an AEPUnit (i.e. calling an AEPUnit constructor), you need to specify the speaker positions of all your speakers, the more speakers you have, the better the spatial resolution. These measurements have to be precise, offsets of some centimeters can affect high frequencies which are very important for spatial hearing. As an example here's how we setup the AEPUnit for our dodecahedron "ISOkaeder" QVector< math::Vector3 20-sided ISOkaeder at the ICST Now that we have setup the speakerposition vector and supplied it to our AEPUnit, all we need to do is to feed it realtime audio data (source signal) and control its position inside the ambisonic space (flight path). Both can be done in realtime! Simply feed a single-channel audio source to the AudioInputPort ( mySource->connect(myAEPUnit); ) and fiddle with the "position" ControlPort. You can either just set it: myAEPUnit->set("position", Frame(3, 0.0, 0.0, 0.0)); ... or send an event to it (see Events section) Synth::get().eventManager().createEvent(2000.0, myAEPUnit->controlPort("position"), Frame(3, 0.0, 0.0, 0.0), 20.0); ... or connect it with a 3-channeled control data generator like this one: WaveTableOscil* pos_control = new WaveTableOscil(3, "sinewave"); pos_control->connect(myAEPUnit, "position"); Or, and this is what Interactive Swarm Orchestra is all about, control it by ISOFlock: //todo ... and these are only a few of the options you have when controlling your Ambisonic panning. |
Last updated: May 15, 2024 |