我有一个应用程序,我从网络接收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我不能与我的例子集成) 任何帮助或提示将不胜感激。提前谢谢。
答案 0 :(得分:1)
最简单的方法是尽快转换为ISampleProvider
。 ToSampleProvider
扩展方法会为您执行此操作。然后你可以将它传递给PanningSampleProvider
。您也可以将VolumeSampleProvider
放入信号链中。您可以直接播放样本提供者,或使用SampleToWaveProvider16
所以代码就是这样:
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();