C# 使用NAudio混合WaveProviders

C# 使用NAudio混合WaveProviders,c#,wav,naudio,C#,Wav,Naudio,我使用NAudio在运行时生成并播放声波 我已经通过本教程获得了一个正弦波: 然而,我真正需要的是能够在运行时向WaveMixerStream添加许多单独的Wave 我知道要做到这一点,我需要单独的WaveStreams,但我不知道如何将WaveProvider的输出转换为WaveStream,以添加到WaveMixerStream 我假设这是不可能的,所以修改了代码,给出了一个派生的WaveStream类 我补充说: public override long Length {

我使用NAudio在运行时生成并播放声波

我已经通过本教程获得了一个正弦波:

然而,我真正需要的是能够在运行时向WaveMixerStream添加许多单独的Wave

我知道要做到这一点,我需要单独的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.如何获取/设置位置


提前感谢。

IWaveProvider和
WaveStream
之间的区别在于
WaveStream
支持报告长度和位置以及设置位置。但是,由于您要传入
IWaveProvider
,因此您不知道长度,也无法设置位置。只需在
Position
setter中不执行任何操作,对于
Position
getter,返回迄今为止从
Read
方法返回的字节总数(只需使用long类型的私有变量来存储)

另一种方法是简单地从
WaveMixerStream
复制代码,并使其成为
IWaveProvider
,而不是
WaveStream
。这实际上将简化它相当多,WaveMixerStream的许多复杂性是在重新定位时正确地重新定位所有混频器输入


(顺便说一句,将来我会鼓励人们使用
ISampleProvider
界面,而且已经有了
MixingSampleProvider
,它正是您想要的。我还没有时间写这方面的教程,但都在里面)

感谢您快速而有用的帮助。我想我已经知道了,但如果它变得难看的话,我很可能会回到这个问题上来!再次感谢。事实上,我昨晚签入了一个(完全未经测试的)MixingWaveProvider32,因此如果您想使用IWaveProvider,可以查看它。@MarkHeath:您有关于使用ISampleProvider和MixingSampleProvider的教程吗?