NAudio将ulaw解码为pcm
本文关键字:pcm 解码 ulaw NAudio | 更新日期: 2023-09-27 18:26:39
我正在尝试解码接收到的RTP流,并使用NAudio将其保存到.wav文件,类似于如何解码RTP数据包并保存.wav文件。
我尝试了几种不同的方法,但都没有得到一个能被Windows Media Player识别的.wav文件。
以下是我如何定义我的wave文件编写器。
var waveFileWriter = new WaveFileWriter("out.wav", new WaveFormat(8000, 16, 1));
然后,对于我收到的每个RTP数据包,我使用:
private void SampleReceived(byte[] sample)
{
if (sample != null)
{
for (int index = 0; index < sample.Length; index++)
{
short pcm = MuLawDecoder.MuLawToLinearSample(sample[index]);
waveFileWriter.WriteByte((byte)(pcm & 0xFF));
waveFileWriter.WriteByte((byte)(pcm >> 8));
}
}
}
代码运行时没有错误,但当我试图在Windows Media Player中打开.wav文件时,我遇到了一个错误。我已经使用WireShark来确认RTP流是ulaw。这是NAudio使用的正确方法吗?
您必须在尝试播放WAV文件之前处置WaveFileWriter,因为WAV文件的开头有标头,只有在添加完所有数据后才能填充。