gpt4 book ai didi

c# - Naudio ImaAdpcmWaveFormat,BufferedWaveprovider不满意

转载 作者:行者123 更新时间:2023-12-02 23:03:11 26 4
gpt4 key购买 nike

我正在使用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)...

异常数据:

System.DivideByZeroException HResult=0x80020012 Message=Attempted to divide by zer0. Source=NAudio StackTrace:
at NAudio.Wave.WaveFormat.ConvertLatencyToByteSize(Int32 milliseconds)
at NAudio.Wave.WaveOut.Init(IWaveProvider waveProvider)
at USRModemTest.Form1..ctor() in C:\Users\c\Source\Repos\USRModemTest\USRModemTest\Form1.cs:line 56
at USRModemTest.Program.Main() in C:\Users\c\Source\Repos\USRModemTest\USRModemTest\Program.cs:line 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类进行转换。

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com