在NAudio中解码GSM 6.10部件

时间:2014-03-16 10:37:06

标签: c# audio gsm naudio decoding

如何在NAudio中动态解码GSM 6.10(全速率)编解码器音频字节数组?消息来源说波解码是一次处理的,我无法处理几个字节的波(如果我错了就修好我)。

我的情况是我从服务器收到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();

1 个答案:

答案 0 :(得分:1)

您可以使用AcmStream类执行此操作,传递Gsm610WaveFormat作为源格式,输入8kHz 16 bit mono作为输出格式。 NAudio源代码中的网络聊天演示显示了这一功能,可以即时解码。