HI Rob, to get Unity's native spatialization to work on a Faust plugin in 
Unity, the following may help:


  *   IN UNITY: On the AudioSource place a .wav file to play on a loop, on 
load. This wav file should have all sample values set to 1. Try this one: 
https://www.dropbox.com/s/dpc4mda051qmiyo/all1.wav?dl=0 Add your FaustPlugin to 
the game object with the audiosource on it and Unity's spatialisation 
parameters will be multiplied by the .wav file and fed into your Faust Plugin.

  *   The Faust code needs something like the following at the process stage. 
In the IDE it will be silent, but in Unity, it will be multiplied by the house 
spatialisation.

import("stdfaust.lib");

vol = hslider("volume [unit:dB]", -24, -96, 0, 0.1) : ba.db2linear : si.smoo ;
freq = hslider("freq [unit:Hz]", 1000, 20, 24000, 1) : si.smoo ;

process(in1,in2,in3,in4,in5,in6) = vgroup("Oscillator", os.osci(freq) * vol) <: 
(_*in1,_*in2,_*in3,_*in4,_*in5,_*in6);

This will make your plugin surround panning ready in the Unity environment but 
if you're not going six channels, you can just process inputs 1 and 2.

Good luck
Best
Martin~

________________________________
From: Alberto Boem <boem.albe...@gmail.com>
Sent: 01 November 2021 07:18
To: Rob Hamilton <robert.k.hamil...@gmail.com>
Cc: faudiostream-users@lists.sourceforge.net 
<faudiostream-users@lists.sourceforge.net>
Subject: Re: [Faudiostream-users] Unity mono vs. stereo with pm instruments

This email was sent to you by someone outside the University.
You should only click on links or attachments if you are certain that the email 
is genuine and the content is safe.
Hi Rob, sorry I might have misunderstood your question.
But somehow the problem you encountered seems unavoidable.

I never actually encountered it before, because I never used panning in Unity. 
with Faust plugins...I always did in the way I suggested you :)

Mostly -I think- comes down to how audio is generated and managed in Unity.
Basically, the Faust plugin will fill an OnAudioFilterRead() which is the way 
you usually go for implementing custom DSP in Unity (aka filters/effects).

Somehow (but I am far from an expert) when you create an OnAudioFilterRead() 
this will basically take over the functionalities of the Audio Source.
Even if Pitch and Volume can be applied to the generated sound, this seems not 
to be the case for stereo panning.
That's why, usually, you will need to make the panning yourself inside the 
OnAudioFilterRead().

I used Faust in projects for Oculus Quest, Hololens and nReal. If you use some 
sound spatializer plugins (such as the one from Oculus or the one from 
Microsoft or Steam Audio), usually they somehow fix the problem (sometimes you 
need to add a dummy audio file in the AudioClip of the Audio Source)

I think who developed this 
https://github.com/LibPdIntegration/LibPdIntegration/wiki/spatialisation found 
an interesting way to deal with such a problem.
Maybe it can be adapted in a similar way in Faust.


Il giorno lun 1 nov 2021 alle ore 01:18 Rob Hamilton 
<robert.k.hamil...@gmail.com<mailto:robert.k.hamil...@gmail.com>> ha scritto:
Thanks for the speedy and helpful reply Alberto.

I tested this example splitting the signal in two (which still resulted in 
audio in both channels regardless of Unity panners), but adding the left/right 
parameterization on those outputs allows me to separately adjust channel levels 
in Unity.

As for replacing sliders with just numerical inputs, I built the example pasted 
below, but Unity throws an error within the associated FaustUtilities_ script, 
seemingly looking for UI elements:

   if (!FaustUI.fJSONParser(ref fJSON, out fUI)) { // Parses the JSON file
      UnityEngine.Debug.LogError("Error JSON Parser");
}

Does violinModel by default require UI elements, even if sliders and the like 
aren't specified in the FAUST declaration? Or is the manner I declared it below 
confusing things...

Again, any suggestions or guidances are extremely helpful.

-------------

TEST SCRIPT (ATTEMPTING TO REMOVE UI ELEMENTS):

import("stdfaust.lib");

my_violin= pm.violinModel(stringLength,bowPress,bowVel,bowPos)*outGain
with{
      stringLength = 0;
      bowVel = 0;
      bowPress = 0;
      bowPos = 0;
      outGain = 0;
};

left = 0;
right = 0;

process =  my_violin  <: _ * left ,_ * right;



On Sun, Oct 31, 2021 at 2:25 AM Alberto Boem 
<boem.albe...@gmail.com<mailto:boem.albe...@gmail.com>> wrote:
Hi Rob,

I think you need to specify this in your Faust code.

Have you considered doing this for splitting the signal in two?

process = my_violin_ui <: _,_;

https://faustdoc.grame.fr/manual/syntax/#split-composition

and maybe:

left = hslider("[0]left",0,0,1,0.1);
right = hslider("[0] right",0,0,1,0.1);

process = my_violin_ui <: _ * left ,_ * right;

in this way, you should gain control of the two channels separately.

Or maybe, try to look at the example spat/panpot.dsp in the "Examples" of the 
Faust IDE.


As a small suggestion.
Sometimes I found that if you need to export a .dsp file as a unity plugin it 
is better to get rid of the UI elements of Faust. Replacing sliders with just 
numerical inputs seems to make everything more smooth and easier to process for 
Unity.

Il giorno dom 31 ott 2021 alle ore 11:19 Rob Hamilton 
<robert.k.hamil...@gmail.com<mailto:robert.k.hamil...@gmail.com>> ha scritto:
Hi all,

Long time fan, first time caller.

I'm playing with some Faust violins in a Unity project and am unsure as to what 
I should expect to hear in terms of spatialization for the output I'm getting. 
With a simple violinModel ui example such as listed below (thanks 250A) loaded 
into a 2-dimensional unity scene, I seem to get two channels of audio, which 
show no consideration of the Unity AudioSource "Stereo Pan" parameter, either 
adjusted manually in the IDE or in code. For a standard mono wav asset, this 
would pan the single channel left to right (-1 to 1), and for a standard stereo 
wav asset this would increase/decrease the volume of channels 0 or 1 
respectively.

In the online Faust ide for this example, I can see that two channels are 
generated, so I assume stereo output. But the plugin output doesn't act as a 
stereo asset would. Or am I missing something (I assume the latter).

I've tested routing these through Unity Mixer groups and can see audio level 
data in both channels too, so I'm sure it's not my home audio rig. And this is 
for a simple 2D project, no 3D spatialization, so I have Unity's "Spatial 
Blend" Audio Source parameter set to 2D (which then ignores the roll-off 
settings).

Any suggestions would be great.

thanks!

Rob

***** CODE EXAMPLE *****


import("stdfaust.lib");


my_violin_ui = pm.violinModel(stringLength,bowPress,bowVel,bowPos)*outGain

with{

stringLength = hslider("v:violin/v:[0]string/[0]length[midi: ctrl 
72]",0.75,0,2,0.01) : si.smoo;

bowVel = hslider("v:violin/v:[1]bow/[0]velocity[midi: ctrl 71]",0,0,1,0.01) : 
si.smoo;

bowPress = hslider("v:violin/v:[1]bow/[1]pressure[midi: ctrl 74]",0.5,0,1,0.01) 
: si.smoo;

bowPos = hslider("v:violin/v:[1]bow/[2]position[midi: ctrl 73]",0.7,0,1,0.01) : 
si.smoo;

outGain = hslider("v:violin/outGain",0.5,0,1,0.01);

};


process = my_violin_ui;

_______________________________________________
Faudiostream-users mailing list
Faudiostream-users@lists.sourceforge.net<mailto:Faudiostream-users@lists.sourceforge.net>
https://lists.sourceforge.net/lists/listinfo/faudiostream-users


--
Robert Hamilton
Center for Computer Research in Music and Acoustics (CCRMA)
Stanford University
http://ccrma.stanford.edu/~rob
The University of Edinburgh is a charitable body, registered in Scotland, with 
registration number SC005336. Is e buidheann carthannais a th' ann an Oilthigh 
Dhùn Èideann, clàraichte an Alba, àireamh clàraidh SC005336.
_______________________________________________
Faudiostream-users mailing list
Faudiostream-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/faudiostream-users

Reply via email to