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

How can I play byte array of audio raw data using NAudio?

byte[] bytes = new byte[1024];

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

如何使用 WaveOut 对象播放这个字节数组?

_waveOut.Init(bytes); // <- Error: cannot resolve method.
_waveOut.Play();

我明白了,这是解决方案:

byte[] bytes = new byte[1024];

IWaveProvider provider = new RawSourceWaveStream(
                         new MemoryStream(bytes), new WaveFormat());

_waveOut.Init(provider);
_waveOut.Play();

接受的答案假设字节流是 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 文件,您已经在 header 中进行了编码,可以使用此方法

byte[] bytes = new byte[1024];

WaveFileReader reader = new WaveFileReader(new MemoryStream(bytes));

_waveOut.Init(reader);
_waveOut.Play();