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

Eid*_*o95 7 .net c# audio naudio

byte[] bytes = new byte[1024];
Run Code Online (Sandbox Code Playgroud)

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

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

_waveOut.Init(bytes); // <- Error: cannot resolve method.
_waveOut.Play();
Run Code Online (Sandbox Code Playgroud)

Eid*_*o95 13

我想通了,这是解决方案:

byte[] bytes = new byte[1024];

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

_waveOut.Init(provider);
_waveOut.Play();
Run Code Online (Sandbox Code Playgroud)


小智 5

接受的答案假定字节流为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();
Run Code Online (Sandbox Code Playgroud)

如果您的原始数据实际上是一个wav文件,则您已经在标头中包含了编码,可以使用此方法

byte[] bytes = new byte[1024];

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

_waveOut.Init(reader);
_waveOut.Play();
Run Code Online (Sandbox Code Playgroud)