【问题标题】:NAudio decoding ulaw to pcmNAudio 将 ulaw 解码为 pcm
【发布时间】:2012-03-04 00:02:32
【问题描述】:

我正在尝试解码接收到的 RTP 流并使用 NAudio 将其保存到 .wav 文件中,类似于 How to decode RTP packets and save it has .wav file

我尝试了几种不同的方法,但没有一种方法可以生成被 Windows Media Player 识别的 .wav 文件。

以下是我定义波形文件编写器的方式。

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 支持/教程网站 - opensebj.blogspot.com/2009/04/…
  • 直到现在我才看到它。我看了看,但我的问题没有解决方案。

标签: c# rtp naudio


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-18
    • 1970-01-01
    • 1970-01-01
    • 2013-06-06
    相关资源
    最近更新 更多