View Single Post
Old 08-15-2017, 04:21 PM   #6
plush2
Human being with feelings
 
Join Date: May 2006
Location: Saskatoon, Canada
Posts: 2,110
Default

Quote:
Originally Posted by vincentoliver View Post
EDIT: actually, may I ask… where are 3D music mixes used? Is there a market for them right now?
Well YouTube and Facebook now provide two market/distribution options. There's no sales of mixes per se yet but I imagine it's good marketing if it grabs attention.

Your problem highlights one of the difficulties with Ambisonics since it is generally scene based with a static listener. I'm going to post some JS plugin code here and I'm not entirely sure where it comes from. It might be mine or someone else's who is much smarter (more likely). I just can't remember. At any rate, it attempts to convert from the Reasurround Octophonic Box speaker layout to 2nd order FUMA Ambisonics. Perhaps if you play around with this you can achieve a suitable mix of Vector based object panning around the listener. Set up your sound objects as inputs in Reasurround, select them all, automate motion and rotation around the listener and then use the JS plugin to convert to 2o ambsionics and then to whichever delivery method you require.

Quote:
desc:Reasurround to Ambisonic
// uses cartesian values to convert the VBAP position
// from Reasurround to 1st or 2nd order Ambisonic

slider1:1<0,0,0{Spherical Harmonics,Controlled Opposites}>Formula
//slider2:0<0,3,0{Stereo,5.1 ITUr,Octophonic Box}>Reasurround configuration

in_pin:FLD
in_pin:FRD
in_pin:BLD
in_pin:BRD
in_pin:FLU
in_pin:FRU
in_pin:BLU
in_pin:BRU
out_pin:W
out_pin:X
out_pin:Y
out_pin:Z
out_pin:R
out_pin:S
out_pin:T
out_pin:U
out_pin:V

@init
bpos=0;

@slider
something=slider1*srate;

@block
blah+=samplesblock;

@sample
FLD = spl0;
FRD = spl1;
BLD = spl2;
BRD = spl3;
FLU = spl4;
FRU = spl5;
BLU = spl6;
BRU = spl7;

Wcrt = 0.1768;
FstOrdcrt = (slider1 == 0 ? 0.2165 : (slider1 == 1 ? 0.1140));
ScdOrdcrt = (slider1 == 0 ? 0.1875 : (slider1 == 1 ? 0.0369));
null = 0;

W = (
(FLD*Wcrt) +
(FRD*Wcrt) +
(BLD*Wcrt) +
(BRD*Wcrt) +
(FLU*Wcrt) +
(FRU*Wcrt) +
(BLU*Wcrt) +
(BRU*Wcrt));

X = (
(FLD*FstOrdcrt) +
(FRD*FstOrdcrt) +
(BLD*-FstOrdcrt) +
(BRD*-FstOrdcrt) +
(FLU*FstOrdcrt) +
(FRU*FstOrdcrt) +
(BLU*-FstOrdcrt) +
(BRU*-FstOrdcrt));

Y = (
(FLD*FstOrdcrt) +
(FRD*-FstOrdcrt) +
(BLD*FstOrdcrt) +
(BRD*-FstOrdcrt) +
(FLU*FstOrdcrt) +
(FRU*-FstOrdcrt) +
(BLU*FstOrdcrt) +
(BRU*-FstOrdcrt));

Z = (
(FLD*-FstOrdcrt) +
(FRD*-FstOrdcrt) +
(BLD*-FstOrdcrt) +
(BRD*-FstOrdcrt) +
(FLU*FstOrdcrt) +
(FRU*FstOrdcrt) +
(BLU*FstOrdcrt) +
(BRU*FstOrdcrt));

R = ( //does not pass any audio in a cube
(FLD*null) +
(FRD*null) +
(BLD*null) +
(BRD*null) +
(FLU*null) +
(FRU*null) +
(BLU*null) +
(BRU*null));

S = (
(FLD*-ScdOrdcrt) +
(FRD*-ScdOrdcrt) +
(BLD*ScdOrdcrt) +
(BRD*ScdOrdcrt) +
(FLU*ScdOrdcrt) +
(FRU*ScdOrdcrt) +
(BLU*-ScdOrdcrt) +
(BRU*-ScdOrdcrt));

T = (
(FLD*-ScdOrdcrt) +
(FRD*ScdOrdcrt) +
(BLD*-ScdOrdcrt) +
(BRD*ScdOrdcrt) +
(FLU*ScdOrdcrt) +
(FRU*-ScdOrdcrt) +
(BLU*ScdOrdcrt) +
(BRU*-ScdOrdcrt));

U = ( //does not pass any audio in a cube
(FLD*null) +
(FRD*null) +
(BLD*null) +
(BRD*null) +
(FLU*null) +
(FRU*null) +
(BLU*null) +
(BRU*null));

V = (
(FLD*ScdOrdcrt) +
(FRD*-ScdOrdcrt) +
(BLD*-ScdOrdcrt) +
(BRD*ScdOrdcrt) +
(FLU*ScdOrdcrt) +
(FRU*-ScdOrdcrt) +
(BLU*-ScdOrdcrt) +
(BRU*ScdOrdcrt));

spl0 = W;
spl1 = X;
spl2 = Y;
spl3 = Z;
spl4 = R;
spl5 = S;
spl6 = T;
spl7 = U;
spl8 = V;
plush2 is offline   Reply With Quote