使用Naudio实现输出音频平移

时间:2014-06-11 07:26:56

标签: .net naudio

我有一个应用程序,我从网络接收RAW波阵列并播放它。 基本代码就是这样的

...
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();
...

我需要实现平移功能,根据用户控制仅从左或右扬声器播放: 我应该使用哪个NAudio组件来实现此功能?

(有一些例子,但他们使用的WaveChannel32我不能与我的例子集成) 任何帮助或提示将不胜感激。提前谢谢。

1 个答案:

答案 0 :(得分:1)

最简单的方法是尽快转换为ISampleProviderToSampleProvider扩展方法会为您执行此操作。然后你可以将它传递给PanningSampleProvider。您也可以将VolumeSampleProvider放入信号链中。您可以直接播放样本提供者,或使用SampleToWaveProvider16

转换回16位

所以代码就是这样:

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();