【问题标题】:WaveBadFormat when calling .Init() non-default audio device NaudioWaveBadFormat 调用 .Init() 非默认音频设备 Naudio 时
【发布时间】:2017-03-14 23:57:52
【问题描述】:

每当我尝试在未使用默认音频设备的 waveOut 上调用 .init() 时,我都会收到 WaveBadFormat 异常。如果我更改默认设备,我可以在没有戏剧的情况下打开 waveout。每种情况下的波形提供者都是使用 ieee 44.1k 2 通道波形格式的同一个混音器。

以下代码在应用程序启动时被调用。

MixingWaveProvider32 mixer = new MixingWaveProvider32();
WaveOut wavOut = new WaveOut();
wavOut.DesiredLatency=100;
wavOut.Init(mixer);

但如果用户选择不同的播放设备,则调用以下代码

wavOut.Stop();
wavOut.Dispose();
wavOut = new WaveOut();
wavOut.DeviceNumber = ((WaveCapabilities)comboBox2.SelectedItem).Index;
wavOut.Init(mixer);

并且 wavOut.Init(mixer) 会抛出错误的格式异常。

检查设备的非公开成员,他们的supportedWaveFormats 似乎没有任何区别,但我也不相信任何SupportedWaveFormat 可枚举选项与MixingWaveProvider32 使用的32 位ieee 波形格式匹配。

如果有人对为什么这对于默认设备(无论它可能是什么)不是问题但对于其他 waveOut 设备选项有任何想法,我将非常感激!

【问题讨论】:

    标签: c# .net naudio


    【解决方案1】:

    是的,有时WaveOut 设备驱动程序只接受某些格式。 NAudio 确实包含像 WaveFloatTo16Provider 这样的辅助类,您可以在您的情况下使用它来包装 MixingWaveProvider32,然后再将其传递给 WaveOut.Init 方法

    【讨论】:

      猜你喜欢
      • 2021-07-27
      • 2014-11-22
      • 2019-12-29
      • 2019-09-26
      • 2014-08-05
      • 1970-01-01
      • 1970-01-01
      • 2014-05-06
      • 1970-01-01
      相关资源
      最近更新 更多