解码GSM 6.10部分在NAudio
本文关键字:NAudio 10部 GSM 解码 | 更新日期: 2023-09-27 17:50:24
如何在NAudio中解码GSM 6.10 (Full-Rate)编解码器音频字节数组?消息来源说波解码是一次处理的,我不能处理几个字节的波(如果我错了,请纠正我)。
我的情况是,我从服务器接收GSM 6.10音频的字节数组,数组大小可以指定,但我如何解码它并写入设备?
编辑:我做错了什么?根据马克的解决方案,这应该可以工作,但我听到的都是失真的声音:
WaveOut waveO = new WaveOut();
BufferedWaveProvider waveP = new BufferedWaveProvider(new WaveFormat(8000, 16, 1));
waveO.Init(waveP);
waveO.Play();
INetworkChatCodec cod = new Gsm610ChatCodec();
new Thread(delegate()
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://www.nch.com.au/acm/8kgsm.wav");
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
using (Stream resStream = response.GetResponseStream())
{
if (resStream.CanRead)
{
byte[] buf = new byte[65];
int count = 0;
do
{
count = resStream.Read(buf, 0, buf.Length);
if (count != 0)
{
byte[] decoded = cod.Decode(buf, 0, count);
waveP.AddSamples(decoded, 0, decoded.Length);
Thread.Sleep(50);
}
}
while (count > 0);
}
}
}).Start();
您可以使用AcmStream
类执行此操作,传入Gsm610WaveFormat
作为源格式和8kHz 16位单声道作为输出格式。NAudio源代码中的网络聊天演示演示了这个动态解码。