使用 NAudio 将 g722 音频转换为 WAV

Posted

技术标签:

【中文标题】使用 NAudio 将 g722 音频转换为 WAV【英文标题】:Convert g722 audio to WAV using NAudio 【发布时间】: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 看看效果如何。我会让你知道情况如何。感谢您的帮助 【参考方案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;
    

【讨论】:

以上是关于使用 NAudio 将 g722 音频转换为 WAV的主要内容,如果未能解决你的问题,请参考以下文章

即时将原始音频字节从 NAudio 转换为 wav 字节

如何使用 NAudio 将音频文件转换为 320kbps 的 .M4A?

使用 C# 中的 NAudio 将 M4A 音频文件转换为 MP3 的问题/错误

如何使用内存流、NAudio 和 LameMP3 将音频 aiff 转换为 MP3

来自流的NAudio?播放音频

使用 NAudio 将 PCM S16 LE (s16l) 转换为 GSM610