c# - 使用 NAudio 混合 WaveProviders

标签 c# wav naudio

我正在使用 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. 如何获取/设置位置?

提前致谢。

最佳答案

IWaveProviderWaveStream 的区别在于 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/

相关文章:

c# - 以编程方式创建/运行命令文件

c++ - 如何使用 C 或 C++ 将 .caf 文件转换为 .wav?

internet-explorer - 如何防止Internet Explorer播放WAV文件?

c# - 如何将 RIFF block 数据写入使用 NAudio 制作的 WAV 文件?

c# - 使用 NAudio 通过网络发送 .Wav 文件

c# - 每个频率的响度相等

c# - 是否可以使用 ExpandoObject 创建动态树结构?

c# - Asp.Net Core 通用存储库模式软删除

c# - 使用 Naudio 播放 Stream of Wave

c# - 如何处理 Windows Phone 8.1 中的水平滑动事件?