代码之家  ›  专栏  ›  技术社区  ›  Eido95

如何使用NAudio播放音频原始数据的字节数组?

  •  9
  • Eido95  · 技术社区  · 11 年前
    byte[] bytes = new byte[1024];
    

    假定 bytes 是一个充满音频原始数据的数组。

    如何使用 WaveOut 对象

    _waveOut.Init(bytes); // <- Error: cannot resolve method.
    _waveOut.Play();
    
    2 回复  |  直到 10 年前
        1
  •  16
  •   Eido95    11 年前

    我想通了,下面是解决方案:

    byte[] bytes = new byte[1024];
    
    IWaveProvider provider = new RawSourceWaveStream(
                             new MemoryStream(bytes), new WaveFormat());
    
    _waveOut.Init(provider);
    _waveOut.Play();
    
        2
  •  11
  •   jensnielsen    9 年前

    接受的答案假设字节流为44,1kHz,16位,立体声。如果您有其他内容,则必须以WaveFormat格式提供编码

    byte[] bytes = new byte[1024];
    
    IWaveProvider provider = new RawSourceWaveStream(
                             new MemoryStream(bytes), new WaveFormat(48000, 16, 1));
    
    _waveOut.Init(provider);
    _waveOut.Play();
    

    如果你的原始数据实际上是一个wav文件,那么你已经在头中有了编码,可以使用这个方法

    byte[] bytes = new byte[1024];
    
    WaveFileReader reader = new WaveFileReader(new MemoryStream(bytes));
    
    _waveOut.Init(reader);
    _waveOut.Play();
    
    推荐文章