C# 在NAudio中解码GSM 6.10部件

C# 在NAudio中解码GSM 6.10部件,c#,audio,gsm,naudio,decoding,C#,Audio,Gsm,Naudio,Decoding,如何在NAudio中实时解码GSM 6.10(全速率)编解码器音频字节阵列?有消息称,波形解码是一次性处理的,我无法处理几个字节的波形(如果我错了,请修复我) 我的情况是,我从服务器接收GSM 6.10音频的字节数组,可以指定数组大小,但如何解码并写入设备 编辑: 我做错了什么? 根据Mark的解决方案,这应该是可行的,但我听到的只是扭曲的声音: WaveOut waveO = new WaveOut(); BufferedWaveProvider waveP =

如何在NAudio中实时解码GSM 6.10(全速率)编解码器音频字节阵列?有消息称,波形解码是一次性处理的,我无法处理几个字节的波形(如果我错了,请修复我)

我的情况是,我从服务器接收GSM 6.10音频的字节数组,可以指定数组大小,但如何解码并写入设备

编辑:

我做错了什么? 根据Mark的解决方案,这应该是可行的,但我听到的只是扭曲的声音:

        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位mono作为输出格式。NAudio源代码中的网络聊天演示程序显示了这一点,以便动态解码。

网络聊天演示程序中的解码器与wave play示例中的解码器是否存在某种差异?在播放示例中,声音是正确的,但当解码字节数组时,我听到的是混乱。例如,这个文件:nch.com.au/acm/8kgsm.wav我做错了什么?你必须让波形完全正确。检查WAV文件WaveFormat结构中实际包含的内容WaveFormat似乎完全相同。您能在空闲时间提供一个播放(从磁盘)从字节数组解码的GSM 6.10波形文件()的工作示例吗?我想我错过了一些东西,这样的帮助将非常感谢。谢谢。请检查我问题编辑部分的错误。谢谢。您收到的是WAV文件,而不仅仅是原始GSM6.10。不应将整个WAV文件提供给编解码器,而应仅提供文件的数据部分