【发布时间】:2015-05-01 18:53:23
【问题描述】:
byte[] bytes = new byte[1024];
假设bytes 是一个填充了音频原始数据的数组。
如何使用WaveOut 对象播放这个字节数组?
_waveOut.Init(bytes); // <- Error: cannot resolve method.
_waveOut.Play();
【问题讨论】:
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 文件,则您已经在标头中有编码并且可以使用此方法
byte[] bytes = new byte[1024];
WaveFileReader reader = new WaveFileReader(new MemoryStream(bytes));
_waveOut.Init(reader);
_waveOut.Play();
【讨论】: