我正在使用NAudio在运行时生成和播放声波。
我已经成功地使用本教程生成了一个正弦波:http://mark-dot-net.blogspot.com/2009/10/playback-of-sine-wave-in-naudio.html
然而,我真正需要的是能够在运行时将许多单独的wave添加到WaveMixerStream中。
我知道要做到这一点,我需要单独的WaveStreams,但我不知道如何将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.我如何获取/设置位置?
提前谢谢。
发布于 2012-03-05 19:14:54
IWaveProvider
和WaveStream
的不同之处在于,WaveStream
支持上报长度和位置以及设置位置。但是,由于传入的是IWaveProvider
,因此不知道长度,也不能设置位置。只需在Position
设置方法中什么也不做,对于Position
获取方法,返回到目前为止从Read
方法返回的字节总数(只需使用一个类型为long的私有变量来存储它)。
另一种方法是简单地将代码从WaveMixerStream
复制到IWaveProvider
中,而不是WaveStream
中。这实际上会大大简化它,当你重新定位时,WaveMixerStream
的很多复杂性就是重新定位所有的混音器输入。
(顺便说一句,将来我会鼓励人们使用ISampleProvider
接口,现在已经有MixingSampleProvider
可以做你想要的了。我还没有抽出时间来编写关于这方面的教程,但它们都在那里。)
https://stackoverflow.com/questions/9570256
复制相似问题