Reputation: 3315
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
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