【问题标题】:Convert g722 audio to WAV using NAudio使用 NAudio 将 g722 音频转换为 WAV
【发布时间】:2015-01-30 01:25:30
【问题描述】:

我开始编写将 G.722 音频文件转换为 WAV 文件的 Windows 服务,并且我计划使用 NAudio 库。

查看 NAudio 演示后,我发现我需要使用 G722Codec 来解码文件中的音频数据,但我无法弄清楚如何读取 G722 文件。我应该使用哪个阅读器?\

G722 文件为 7 kHz。

我正在学习 NAudio 的 Pluralsight 课程,但如果能获得一个小代码示例,那就太好了。

【问题讨论】:

  • G.722 文件是否已经在 WAV 容器中?
  • 我尝试了 WaveFileReader 类,但出现错误。几天后我将无法获得确切的错误消息,因为我家里没有示例文件来测试。
  • 可能只是原始 G.722 吗?如果是这样,RawSourceStream 就可以解决问题
  • 它是由 Commend ComREC 创建的。我会在星期一试试 RawSourceStream 看看效果如何。我会让你知道情况如何。感谢您的帮助

标签: naudio


【解决方案1】:

我使用RawSourceWaveStream 让它工作,但随后尝试简单地读取文件的字节,使用 G722 编解码器解码并将字节写入波形文件。有效。

    private readonly G722CodecState _state = new G722CodecState(64000, G722Flags.SampleRate8000);
    private readonly G722Codec _codec = new G722Codec();
    private readonly WaveFormat _waveFormat = new WaveFormat(8000, 1);

    public MainWindow()
    {
        InitializeComponent();

        var data = File.ReadAllBytes(@"C:\Recordings\000-06Z_chunk00000.g722");
        var output = Decode(data, 0, data.Length);

        using (WaveFileWriter waveFileWriter = new WaveFileWriter(@"C:\Recordings\000-06Z_chunk00000.wav", _waveFormat))
        {
            waveFileWriter.Write(output, 0, output.Length);
        }
    }

    private byte[] Decode(byte[] data, int offset, int length)
    {
        if (offset != 0)
        {
            throw new ArgumentException("G722 does not yet support non-zero offsets");
        }
        int decodedLength = length * 4;
        var outputBuffer = new byte[decodedLength];
        var wb = new WaveBuffer(outputBuffer);
        int decoded = _codec.Decode(_state, wb.ShortBuffer, data, length);
        return outputBuffer;
    }

【讨论】:

    猜你喜欢
    • 2021-08-15
    • 2017-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多