NAudio是否可以将WaveMixerStream32与WaveProviders而不是WaveStreams链接起来?我正在使用BufferedWaveProvider传输多个网络流。似乎没有简单的方法可以将其转换为WaveStream。

干杯!

路加

最佳答案

将IWaveProvider转换为WaveStream非常简单。 IWaveProvider只是简化的WaveStream,不支持重新定位,并且长度未知。您可以这样创建适配器:

public class WaveProviderToWaveStream : WaveStream
{
    private readonly IWaveProvider source;
    private long position;

    public WaveProviderToWaveStream(IWaveProvider source)
    {
        this.source = source;
    }

    public override WaveFormat WaveFormat
    {
        get { return source.WaveFormat;  }
    }

    /// <summary>
    /// Don't know the real length of the source, just return a big number
    /// </summary>
    public override long Length
    {
        get { return Int32.MaxValue; }
    }

    public override long Position
    {
        get
        {
            // we'll just return the number of bytes read so far
            return position;
        }
        set
        {
            // can't set position on the source
            // n.b. could alternatively ignore this
            throw new NotImplementedException();
        }
    }

    public override int Read(byte[] buffer, int offset, int count)
    {
        int read = source.Read(buffer, offset, count);
        position += read;
        return read;
    }
}


我在“长度”和“位置”属性中添加了一些注释。您需要对它们进行什么操作取决于您是否将此类传递给尝试使用这些属性的尝试。

同样,没有什么可以阻止您创建在IWaveProvider上运行的自己的WaveMixerStream32版本。您可以简化很多事情,因为您无需在混合器中实现任何重新定位逻辑,因为您无法重新定位任何输入。

关于c# - WaveMixerStream32和IWaveProvider,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6636142/

10-09 08:18