T M
T M

Reputation: 3315

Implementing Output audio panning with Naudio

I have an application where I am receiving RAW wave array from network and playing out it. Basic code is something like this

...
private WaveOut waveOut;
private BufferedWaveProvider waveProvider;
private WaveFormat waveformat = new WaveFormat(44100, 16, 2);
private VolumeWaveProvider16 volumeProvider;
....
....
waveOut = new WaveOut();
waveProvider = new BufferedWaveProvider(waveformat);
volumeProvider = new VolumeWaveProvider16(waveProvider);
volumeProvider.Volume = volumeSlider.Volume;
waveProvider.BufferDuration = TimeSpan.FromSeconds(200);
...
...
byte[] byteBuffer = udpListener.Receive(ref endPoint);
waveProvider.AddSamples(byteBuffer, 0, byteBuffer.Length);
...
...
waveOut.Play();
...

I need to implement panning functionality, play only from left or right speaker according to user control: Which NAudio component should I use to achieve this functionality?

(Have foud some examples but they use WaveChannel32 which I cant integrate with my example) Any help or hint would be appreciated. Thanks in advance.

Upvotes: 1

Views: 2548

Answers (1)

Mark Heath
Mark Heath

Reputation: 49482

Simplest approach is for you to convert to an ISampleProvider as soon as possible. The ToSampleProvider extension method does this for you. Then you can pass it into PanningSampleProvider. You could also put VolumeSampleProvider into your signal chain. You can play sample providers directly, or convert back to 16 bit with a SampleToWaveProvider16

So the code would be something like this:

var waveProvider = new BufferedWaveProvider(waveformat);
var volumeProvider = new VolumeSampleProvider(waveProvider.ToSampleProvider());
var panProvider = new PanningSampleProvider(volumeProvider);
panProvider.Pan = 1.0f; // pan 100% right

waveOut.Init(panProvider);
waveOut.Play();

Upvotes: 2

Related Questions