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

10
byte[] bytes = new byte[1024];

假设bytes是一个填充有音频原始数据的数组。
我该如何使用WaveOut对象播放这个字节数组呢?
_waveOut.Init(bytes); // <- Error: cannot resolve method.
_waveOut.Play();
2个回答

16

我已经想出来了,这里是解决方案:

byte[] bytes = new byte[1024];

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

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

当我播放音频时,音调比正常高。 - bh_earth0

12

被采纳的答案假定字节流是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();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接