使用 Naudio 实现输出音频平移 [英] Implementing Output audio panning with Naudio

查看:68
本文介绍了使用 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆