[SC-list] Ambisonics info

View: New views
4 Messages — Rating Filter:   Alert me  

[SC-list] Ambisonics info

by Marinos Koutsomichalis :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Hi all,

I'd some help as I have absolutely no experience with ambisonics, and I am also unable to check the outcome on my system...
I need to make an 8 channel alternative of  a piece. What I basically want to do is create a space where I have 3 sources, each routed to a random position (or maybe to a random position that makes some kind of rotation before it starts again to randomly change positions) in space and then decode all the information for reproduction from a 8 speakers system..

I've added this at the end of my synthdefs:

#w,x,y=PanB.ar(signal,azm,ele);
#ch1,ch2,ch3,ch4,ch5,ch6,ch7,ch8=DecodeB2.ar(8,w,x,y);
Out.ar(2,[ch1,ch2,ch3,ch4,ch5,ch6,ch7,ch8]);

or

#w,x,y=PanB.ar(signal,Rand(-pi,pi),Rand((-pi*0.5),(pi*0.5))
#ch1,ch2,ch3,ch4,ch5,ch6,ch7,ch8=DecodeB2.ar(8,w,x,y);
Out.ar(2,[ch1,ch2,ch3,ch4,ch5,ch6,ch7,ch8]);


Or maybe this :

#w,x,y=PanB2.ar(signal,1.0.rand2);
#ch1,ch2,ch3,ch4,ch5,ch6,ch7,ch8=DecodeB2.ar(8,w,x,y); Out.ar(2,[ch1,ch2,ch3,ch4,ch5,ch6,ch7,ch8]);

Should both work
??

And what exactly is the difference between PanB and PanB2 the second is supposed to be 2D, the first?
I also downloaded AMBIEM Quark, I haven't read the help files yet though, maybe I should use this one??

I am reading various technical stuff at the moment, but I'd like the opinion of someone that has already done those things..
Thx in advance

_______________________________________________
sc-users mailing list
sc-users@...
http://lists.create.ucsb.edu/mailman/listinfo/sc-users

Re: [SC-list] Ambisonics info

by Josh Parmenter :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Hi Marinos,

First, what I would suggest doing (to possibly make things easier for yourself) is to make an Ambisonic (non-decoded) version of your piece. One you have this, you can easily decode JUST that file when playing in different circumstances.

PanB outputs 4 channels, PanB2 only 3. PanB supports the z (or height) channel. If you won't be using height at all, there is no reason to not use only PanB2. SuperCollider doesn't have a built-in 3-d decoder (just DecodeB2), so if you ARE using height, you need to use either AMBiem or you can use the Ambisonic UGens in my library - JoshUGens - available in the realizedsound download of SC3 here:


The above download also has a snapshot of Quarks, so AMBiem is in there as well.

Now - to you synthdefs. You can't use .rand2. This will only evaluate at compile time, so you will only get one random value. You need to use Rand.new or pass these values in as arguments.

If you pass them in as arguments AND wrap them in lags, you can smooth out transition (this sounds like something you want to do). Something like (adapted from the PanB2 helpfile - note the az arg and the Lag2):

SynthDef(\test, {arg az;
var w, x, y, p, a, b, c, d;
p = PinkNoise.ar; // source
// B-format encode
#w, x, y = PanB2.ar(p, Lag2.kr(az, 2), 0.1); 
// B-format decode to quad
#a, b, c, d = DecodeB2.ar(4, w, x, y);
Out.ar(0, [a, b, d, c]) // reorder to my speaker arrangement: Lf Rf Lr Rr
}).load(s)


a = Synth.new(\test);

a.set([\az, -0.5pi]);

a.set([\az, -0.25pi]);

a.set([\az, 0.25pi]);

a.free;

Hope that helps.

Josh

On May 8, 2008, at 5:34 AM, Marinos Koutsomichalis wrote:

Hi all,

I'd some help as I have absolutely no experience with ambisonics, and I am also unable to check the outcome on my system...
I need to make an 8 channel alternative of  a piece. What I basically want to do is create a space where I have 3 sources, each routed to a random position (or maybe to a random position that makes some kind of rotation before it starts again to randomly change positions) in space and then decode all the information for reproduction from a 8 speakers system..

I've added this at the end of my synthdefs:

#w,x,y=PanB.ar(signal,azm,ele);
#ch1,ch2,ch3,ch4,ch5,ch6,ch7,ch8=DecodeB2.ar(8,w,x,y);
Out.ar(2,[ch1,ch2,ch3,ch4,ch5,ch6,ch7,ch8]);

or

#w,x,y=PanB.ar(signal,Rand(-pi,pi),Rand((-pi*0.5),(pi*0.5))
#ch1,ch2,ch3,ch4,ch5,ch6,ch7,ch8=DecodeB2.ar(8,w,x,y);
Out.ar(2,[ch1,ch2,ch3,ch4,ch5,ch6,ch7,ch8]);


Or maybe this :

#w,x,y=PanB2.ar(signal,1.0.rand2);
#ch1,ch2,ch3,ch4,ch5,ch6,ch7,ch8=DecodeB2.ar(8,w,x,y); Out.ar(2,[ch1,ch2,ch3,ch4,ch5,ch6,ch7,ch8]);

Should both work
??

And what exactly is the difference between PanB and PanB2 the second is supposed to be 2D, the first?
I also downloaded AMBIEM Quark, I haven't read the help files yet though, maybe I should use this one??

I am reading various technical stuff at the moment, but I'd like the opinion of someone that has already done those things..
Thx in advance
_______________________________________________
sc-users mailing list
sc-users@...
http://lists.create.ucsb.edu/mailman/listinfo/sc-users

******************************************

/* Joshua D. Parmenter

http://www.realizedsound.net/josh/


“Every composer – at all times and in all cases – gives his own interpretation of how modern society is structured: whether actively or passively, consciously or unconsciously, he makes choices in this regard. He may be conservative or he may subject himself to continual renewal; or he may strive for a revolutionary, historical or social palingenesis." - Luigi Nono

*/


_______________________________________________
sc-users mailing list
sc-users@...
http://lists.create.ucsb.edu/mailman/listinfo/sc-users

Parent Message unknown Re: [SC-list] Ambisonics info

by Marinos Koutsomichalis :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Thx Josh, 
but what if I want to route audio to 8 channels? When I decode the output from PanB (4 channels you said) to 8 channels what exactly happens, I just get every channel splitted at 2 so I get a total of 8 channels? If so, I guess that's not what I want, I want to have some complexity in my space, I want aggressive things... So I am thinking the possibility of routing everything manually with random or cosine generators and , or sth else..
As a quick thought sth like :
...
Out.ar(2,[signal*amp1,signal*amp2,.....])
and a Task sending random values at amp1,....

or maybe a more sophisticated diffusion system where I will send a random position as argument.

What you say?
Is it better that way or I should better stick with the ambisonics?
I guess ambisonics would have a more "psycoacoustical" correct approach, but the manually way may be better for what I have in mind, so please share your thoughts with me, what would you personally do?


On 08 Μαϊ 2008, at 7:25 ΜΜ, sc-users-request@... wrote:

Message: 2

Date: Thu, 8 May 2008 09:25:15 -0700

From: Josh Parmenter <josh@...>

Subject: Re: [sc-users] [SC-list] Ambisonics info

To: SuperCollider users mailing list <sc-users@...>

Message-ID: <9832B778-7E9C-4B0B-AC2E-E7A9429C64BE@...>

Content-Type: text/plain; charset="windows-1252"


Hi Marinos,


First, what I would suggest doing (to possibly make things easier for  

yourself) is to make an Ambisonic (non-decoded) version of your piece.  

One you have this, you can easily decode JUST that file when playing  

in different circumstances.


PanB outputs 4 channels, PanB2 only 3. PanB supports the z (or height)  

channel. If you won't be using height at all, there is no reason to  

not use only PanB2. SuperCollider doesn't have a built-in 3-d decoder  

(just DecodeB2), so if you ARE using height, you need to use either  

AMBiem or you can use the Ambisonic UGens in my library - JoshUGens -  

available in the realizedsound download of SC3 here:


http://sourceforge.net/projects/blackrain-sc3/


The above download also has a snapshot of Quarks, so AMBiem is in  

there as well.


Now - to you synthdefs. You can't use .rand2. This will only evaluate  

at compile time, so you will only get one random value. You need to  

use Rand.new or pass these values in as arguments.


If you pass them in as arguments AND wrap them in lags, you can smooth  

out transition (this sounds like something you want to do). Something  

like (adapted from the PanB2 helpfile - note the az arg and the Lag2):


SynthDef(\test, {arg az;

var w, x, y, p, a, b, c, d;

p = PinkNoise.ar; // source

// B-format encode

#w, x, y = PanB2.ar(p, Lag2.kr(az, 2), 0.1);

// B-format decode to quad

#a, b, c, d = DecodeB2.ar(4, w, x, y);

Out.ar(0, [a, b, d, c]) // reorder to my speaker arrangement: Lf Rf  

Lr Rr

}).load(s)



a = Synth.new(\test);


a.set([\az, -0.5pi]);


a.set([\az, -0.25pi]);


a.set([\az, 0.25pi]);


a.free;


Hope that helps.


Josh


On May 8, 2008, at 5:34 AM, Marinos Koutsomichalis wrote:


Hi all,


I'd some help as I have absolutely no experience with ambisonics,  

and I am also unable to check the outcome on my system...

I need to make an 8 channel alternative of  a piece. What I  

basically want to do is create a space where I have 3 sources, each  

routed to a random position (or maybe to a random position that  

makes some kind of rotation before it starts again to randomly  

change positions) in space and then decode all the information for  

reproduction from a 8 speakers system..


I've added this at the end of my synthdefs:


#w,x,y=PanB.ar(signal,azm,ele);

#ch1,ch2,ch3,ch4,ch5,ch6,ch7,ch8=DecodeB2.ar(8,w,x,y);

Out.ar(2,[ch1,ch2,ch3,ch4,ch5,ch6,ch7,ch8]);


or


#w,x,y=PanB.ar(signal,Rand(-pi,pi),Rand((-pi*0.5),(pi*0.5))

#ch1,ch2,ch3,ch4,ch5,ch6,ch7,ch8=DecodeB2.ar(8,w,x,y);

Out.ar(2,[ch1,ch2,ch3,ch4,ch5,ch6,ch7,ch8]);



Or maybe this :


#w,x,y=PanB2.ar(signal,1.0.rand2);

#ch1,ch2,ch3,ch4,ch5,ch6,ch7,ch8=DecodeB2.ar(8,w,x,y); Out.ar(2, 

[ch1,ch2,ch3,ch4,ch5,ch6,ch7,ch8]);


Should both work

??


And what exactly is the difference between PanB and PanB2 the second  

is supposed to be 2D, the first?

I also downloaded AMBIEM Quark, I haven't read the help files yet  

though, maybe I should use this one??


I am reading various technical stuff at the moment, but I'd like the  

opinion of someone that has already done those things..

Thx in advance

_______________________________________________

sc-users mailing list

sc-users@...

http://lists.create.ucsb.edu/mailman/listinfo/sc-users


******************************************

/* Joshua D. Parmenter

http://www.realizedsound.net/josh/


?Every composer ? at all times and in all cases ? gives his own  

interpretation of how modern society is structured: whether actively  

or passively, consciously or unconsciously, he makes choices in this  

regard. He may be conservative or he may subject himself to continual  

renewal; or he may strive for a revolutionary, historical or social  

palingenesis." - Luigi Nono

*/



_______________________________________________
sc-users mailing list
sc-users@...
http://lists.create.ucsb.edu/mailman/listinfo/sc-users

Re: [SC-list] Ambisonics info

by Josh Parmenter :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

The four channels of output in PanB encode a pressure signal (w) front  
to back (x) left to right (y) and up and down (z). The decoder then  
uses all four of these channels to recreate the signal for a given  
speaker.

I recommend you look at the basic Ambisonic Technology heading here:

http://www.york.ac.uk/inst/mustech/3d_audio/ambis2.htm

The four channels are not panned channels in themselves, they are  
encoded velocity data. Trust me, you can get some pretty aggressive  
panning with Ambisonics.

Josh

On May 8, 2008, at 12:38 PM, Marinos Koutsomichalis wrote:

> Thx Josh,
> but what if I want to route audio to 8 channels? When I decode the  
> output from PanB (4 channels you said) to 8 channels what exactly  
> happens, I just get every channel splitted at 2 so I get a total of  
> 8 channels? If so, I guess that's not what I want, I want to have  
> some complexity in my space, I want aggressive things... So I am  
> thinking the possibility of routing everything manually with random  
> or cosine generators and , or sth else..
> As a quick thought sth like :
> ...
> Out.ar(2,[signal*amp1,signal*amp2,.....])
> and a Task sending random values at amp1,....
>
> or maybe a more sophisticated diffusion system where I will send a  
> random position as argument.
>
> What you say?
> Is it better that way or I should better stick with the ambisonics?
> I guess ambisonics would have a more "psycoacoustical" correct  
> approach, but the manually way may be better for what I have in  
> mind, so please share your thoughts with me, what would you  
> personally do?
>
>
> On 08 Μαϊ 2008, at 7:25 ΜΜ, sc-users-request@...  
> wrote:
>
>> Message: 2
>> Date: Thu, 8 May 2008 09:25:15 -0700
>> From: Josh Parmenter <josh@...>
>> Subject: Re: [sc-users] [SC-list] Ambisonics info
>> To: SuperCollider users mailing list <sc-users@...>
>> Message-ID: <9832B778-7E9C-4B0B-AC2E-E7A9429C64BE@...>
>> Content-Type: text/plain; charset="windows-1252"
>>
>> Hi Marinos,
>>
>> First, what I would suggest doing (to possibly make things easier for
>> yourself) is to make an Ambisonic (non-decoded) version of your  
>> piece.
>> One you have this, you can easily decode JUST that file when playing
>> in different circumstances.
>>
>> PanB outputs 4 channels, PanB2 only 3. PanB supports the z (or  
>> height)
>> channel. If you won't be using height at all, there is no reason to
>> not use only PanB2. SuperCollider doesn't have a built-in 3-d decoder
>> (just DecodeB2), so if you ARE using height, you need to use either
>> AMBiem or you can use the Ambisonic UGens in my library - JoshUGens -
>> available in the realizedsound download of SC3 here:
>>
>> http://sourceforge.net/projects/blackrain-sc3/
>>
>> The above download also has a snapshot of Quarks, so AMBiem is in
>> there as well.
>>
>> Now - to you synthdefs. You can't use .rand2. This will only evaluate
>> at compile time, so you will only get one random value. You need to
>> use Rand.new or pass these values in as arguments.
>>
>> If you pass them in as arguments AND wrap them in lags, you can  
>> smooth
>> out transition (this sounds like something you want to do). Something
>> like (adapted from the PanB2 helpfile - note the az arg and the  
>> Lag2):
>>
>> SynthDef(\test, {arg az;
>> var w, x, y, p, a, b, c, d;
>> p = PinkNoise.ar; // source
>> // B-format encode
>> #w, x, y = PanB2.ar(p, Lag2.kr(az, 2), 0.1);
>> // B-format decode to quad
>> #a, b, c, d = DecodeB2.ar(4, w, x, y);
>> Out.ar(0, [a, b, d, c]) // reorder to my speaker arrangement: Lf Rf
>> Lr Rr
>> }).load(s)
>>
>>
>> a = Synth.new(\test);
>>
>> a.set([\az, -0.5pi]);
>>
>> a.set([\az, -0.25pi]);
>>
>> a.set([\az, 0.25pi]);
>>
>> a.free;
>>
>> Hope that helps.
>>
>> Josh
>>
>> On May 8, 2008, at 5:34 AM, Marinos Koutsomichalis wrote:
>>
>>> Hi all,
>>>
>>> I'd some help as I have absolutely no experience with ambisonics,
>>> and I am also unable to check the outcome on my system...
>>> I need to make an 8 channel alternative of  a piece. What I
>>> basically want to do is create a space where I have 3 sources, each
>>> routed to a random position (or maybe to a random position that
>>> makes some kind of rotation before it starts again to randomly
>>> change positions) in space and then decode all the information for
>>> reproduction from a 8 speakers system..
>>>
>>> I've added this at the end of my synthdefs:
>>>
>>> #w,x,y=PanB.ar(signal,azm,ele);
>>> #ch1,ch2,ch3,ch4,ch5,ch6,ch7,ch8=DecodeB2.ar(8,w,x,y);
>>> Out.ar(2,[ch1,ch2,ch3,ch4,ch5,ch6,ch7,ch8]);
>>>
>>> or
>>>
>>> #w,x,y=PanB.ar(signal,Rand(-pi,pi),Rand((-pi*0.5),(pi*0.5))
>>> #ch1,ch2,ch3,ch4,ch5,ch6,ch7,ch8=DecodeB2.ar(8,w,x,y);
>>> Out.ar(2,[ch1,ch2,ch3,ch4,ch5,ch6,ch7,ch8]);
>>>
>>>
>>> Or maybe this :
>>>
>>> #w,x,y=PanB2.ar(signal,1.0.rand2);
>>> #ch1,ch2,ch3,ch4,ch5,ch6,ch7,ch8=DecodeB2.ar(8,w,x,y); Out.ar(2,
>>> [ch1,ch2,ch3,ch4,ch5,ch6,ch7,ch8]);
>>>
>>> Should both work
>>> ??
>>>
>>> And what exactly is the difference between PanB and PanB2 the second
>>> is supposed to be 2D, the first?
>>> I also downloaded AMBIEM Quark, I haven't read the help files yet
>>> though, maybe I should use this one??
>>>
>>> I am reading various technical stuff at the moment, but I'd like the
>>> opinion of someone that has already done those things..
>>> Thx in advance
>>> _______________________________________________
>>> sc-users mailing list
>>> sc-users@...
>>> http://lists.create.ucsb.edu/mailman/listinfo/sc-users
>>
>> ******************************************
>> /* Joshua D. Parmenter
>> http://www.realizedsound.net/josh/
>>
>> ?Every composer ? at all times and in all cases ? gives his own
>> interpretation of how modern society is structured: whether actively
>> or passively, consciously or unconsciously, he makes choices in this
>> regard. He may be conservative or he may subject himself to continual
>> renewal; or he may strive for a revolutionary, historical or social
>> palingenesis." - Luigi Nono
>> */
>
> _______________________________________________
> sc-users mailing list
> sc-users@...
> http://lists.create.ucsb.edu/mailman/listinfo/sc-users

******************************************
/* Joshua D. Parmenter
http://www.realizedsound.net/josh/

“Every composer – at all times and in all cases – gives his own  
interpretation of how modern society is structured: whether actively  
or passively, consciously or unconsciously, he makes choices in this  
regard. He may be conservative or he may subject himself to continual  
renewal; or he may strive for a revolutionary, historical or social  
palingenesis." - Luigi Nono
*/

_______________________________________________
sc-users mailing list
sc-users@...
http://lists.create.ucsb.edu/mailman/listinfo/sc-users