C# Naudio ImaAdpcmWaveFormat,BufferedWaveprovider不满意

C# Naudio ImaAdpcmWaveFormat,BufferedWaveprovider不满意,c#,audio,naudio,C#,Audio,Naudio,我正在开发一个应用程序,在这个应用程序中,我使用Naudio来播放从调制解调器传入/传出的声音(在这个特定的调制解调器上没有tapi,所以AT命令) 当我使用线性波格式(waveformat waveformat=new waveformat(8000,16,1);)时,这可以接受,但现在我想尝试使用全双工,这意味着使用稍微高效的声音格式可能是个好主意 看到Naudio有一个ImaAdpcmWaveFormat,所以尝试用该对象替换WaveFormat对象(ImaAdpcmWaveFormat

我正在开发一个应用程序,在这个应用程序中,我使用Naudio来播放从调制解调器传入/传出的声音(在这个特定的调制解调器上没有tapi,所以AT命令)

当我使用线性波格式(waveformat waveformat=new waveformat(8000,16,1);)时,这可以接受,但现在我想尝试使用全双工,这意味着使用稍微高效的声音格式可能是个好主意

看到Naudio有一个ImaAdpcmWaveFormat,所以尝试用该对象替换WaveFormat对象(ImaAdpcmWaveFormat imaadpcm_WaveFormat=new ImaAdpcmWaveFormat(8000,1,4);)

但是,现在waveout.init抛出System.DivideByZeroException:(

我有一个类似的问题,当我设法误读了波形格式的规范,将2而不是16作为“位”,但4位/样本应该是IMA ADPCM的可接受速率?无论如何,8位或16位/样本的相同例外

异常数据:

System.DivideByZeroException HResult=0x80020012 Message=试图除以zer0。 来源=NAudio StackTrace:
在NAudio.Wave.WaveFormat.ConvertLatencyToByteSize(Int32毫秒)时
在NAudio.Wave.WaveOut.Init(IWaveProvider-waveProvider)
在C:\Users\C\Source\Repos\USRModemTest\USRModemTest\Form1.cs中的USRModemTest.Form1..ctor()处:第56行
在C:\Users\C\Source\Repos\USRModemTest\USRModemTest\Program.cs中的USRModemTest.Program.Main()处:第19行

从构造器:

请注意,如果我用waveformat替换imaadpcm_waveformat,那么这可以很好地工作

//waveFormat = new WaveFormat(8000, 16, 1);
imaadpcm_waveformat = new ImaAdpcmWaveFormat(8000, 1, 4);

//bwp_ModemToSpeakers = new BufferedWaveProvider(waveFormat);
bwp_ModemToSpeakers = new BufferedWaveProvider(imaadpcm_waveformat);
bwp_ModemToSpeakers.DiscardOnBufferOverflow = true;
//bwp_ModemToSpeakers.BufferDuration = System.TimeSpan.FromMilliseconds(200);
bwp_ModemToSpeakers.ReadFully = true;
bwp_ModemToSpeakers.BufferLength = 1000 ; // as small as possible it seems

waveout = new WaveOut();
waveout.DeviceNumber = -1; // default communications device
waveout.DesiredLatency = 200;
waveout.Init(bwp_ModemToSpeakers);

您不能直接播放使用IMA ADPCM编码的音频。我建议您先将音频解码到PCM中,然后再将其放入
BufferedWaveProvider
。NAudio演示项目中可以找到这方面的示例,您可以使用
AcmStream
类进行转换。

谢谢您的回答,我会这样做:)。