使用 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 将音频文件转换为 320kbps 的 .M4A?
使用 C# 中的 NAudio 将 M4A 音频文件转换为 MP3 的问题/错误