【问题标题】:Naudio ImaAdpcmWaveFormat, BufferedWaveprovider not happyNaudio ImaAdpcmWaveFormat、BufferedWaveprovider 不满意
【发布时间】:2019-03-21 10:55:16
【问题描述】:

我正在开发一个应用程序,在该应用程序中,我使用 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 用于“位”时,我遇到了类似的问题,但是 4 位/样本应该是 IMA ADPCM 可接受的速率?无论如何,8 或 16 位/样本的相同例外......

异常数据:

System.DivideByZeroException H结果=0x80020012 消息=尝试除以 zer0。 来源=NAudio 堆栈跟踪:
在 NAudio.Wave.WaveFormat.ConvertLatencyToByteSize(Int32 毫秒)
在 NAudio.Wave.WaveOut.Init(IWaveProvider waveProvider)
在 C:\Users\c\Source\Repos\USRModemTest\USRModemTest\Form1.cs: 56 行中的 USRModemTest.Form1..ctor()
在 C:\Users\c\Source\Repos\USRModemTest\USRModemTest\Program.cs:line 19 中的 USRModemTest.Program.Main() 处

来自构造函数:

请注意,如果我将 imaadpcm_waveformat 替换为 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);

【问题讨论】:

    标签: c# audio naudio


    【解决方案1】:

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

    【讨论】:

    • 感谢您的回答,我会这样做的:)。
    猜你喜欢
    • 2021-05-12
    • 1970-01-01
    • 1970-01-01
    • 2022-07-30
    • 1970-01-01
    • 2011-07-22
    • 1970-01-01
    • 2018-10-17
    • 1970-01-01
    相关资源
    最近更新 更多