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使用的正确方法吗?

NAudio将ulaw解码为pcm

您必须在尝试播放WAV文件之前处置WaveFileWriter,因为WAV文件的开头有标头,只有在添加完所有数据后才能填充。