我正在使用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 :(。

当我设法误读了WaveFormat的规范并将2代替16表示“位”时,我遇到了类似的问题,但是IMA ADPCM可接受的速率是4位/样本吗?无论如何,8或16位/样本的相同异常(exception)...

异常数据:



来自构造函数:

请注意,如果我用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类进行转换。

关于c# - Naudio ImaAdpcmWaveFormat,BufferedWaveprovider不满意,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55278833/

10-11 04:39