使用 Naudio 实现输出音频平移 [英] Implementing Output audio panning with Naudio
问题描述
我有一个应用程序,我从网络接收 RAW 波形阵列并播放它.基本代码是这样的
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();
...
我需要实现平移功能,根据用户控制仅从左扬声器或右扬声器播放:我应该使用哪个 NAudio 组件来实现此功能?
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?
(有一些例子,但他们使用 WaveChannel32,我无法与我的例子集成)任何帮助或提示将不胜感激.提前致谢.
(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.
推荐答案
最简单的方法是尽快转换为 ISampleProvider
.ToSampleProvider
扩展方法为您完成此操作.然后你可以将它传递给 PanningSampleProvider
.您还可以将 VolumeSampleProvider
放入您的信号链中.您可以直接播放示例提供程序,或使用 SampleToWaveProvider16
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();
这篇关于使用 Naudio 实现输出音频平移的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!