我正在使用 NAudio 在运行时生成和播放声波。
我已经成功使用本教程生成了一个正弦波: http://mark-dot-net.blogspot.com/2009/10/playback-of-sine-wave-in-naudio.html
但是 - 我真正需要的是能够在运行时将许多单独的波形添加到 WaveMixerStream。
我知道要做到这一点,我需要单独的 WaveStream,但我不知道如何将 WaveProvider 的输出转换为 WaveStream 以添加到 WaveMixerStream。
我认为这是不可能的,因此更改了代码以提供派生的 WaveStream 类。
我添加了:
public override long Length
{
get { return long.MaxValue; }
}
但我不知道如何获得这个职位:
public override long Position
{
get
{
return //What here?
}
set
{
// What here? = value;
}
}
所以问题是:1.这行得通吗? 2. 如何获取/设置位置?
提前致谢。
最佳答案
IWaveProvider
和 WaveStream
的区别在于 WaveStream
支持报告长度和位置以及设置位置。但是,由于您传入的是 IWaveProvider
,因此您不知道长度,也无法设置位置。只需在 Position
setter 中不执行任何操作,对于 Position
getter,返回从 Read
方法返回的字节总数,以便far(只需使用一个 long 类型的私有(private)变量来存储它)。
另一种方法是简单地从 WaveMixerStream
复制代码并将其放入 IWaveProvider
而不是 WaveStream
中。这实际上会大大简化它,WaveMixerStream
的很多复杂性在于在重新定位时正确地重新定位所有混音器输入。
(顺便说一句,将来我将鼓励人们使用 ISampleProvider
接口(interface),并且已经有 MixinSampleProvider
可以完全满足您的要求。我已经还没有时间写这方面的教程,但一切都在那里)
关于c# - 使用 NAudio 混合 WaveProviders,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9570256/