WaveBadFormat 调用 .Init() 非默认音频设备 Naudio 时
Posted
技术标签:
【中文标题】WaveBadFormat 调用 .Init() 非默认音频设备 Naudio 时【英文标题】:WaveBadFormat when calling .Init() non-default audio device 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 设备选项有任何想法,我将非常感激!
【问题讨论】:
【参考方案1】:是的,有时WaveOut
设备驱动程序只接受某些格式。 NAudio 确实包含像 WaveFloatTo16Provider
这样的辅助类,您可以在您的情况下使用它来包装 MixingWaveProvider32
,然后再将其传递给 WaveOut.Init
方法
【讨论】:
以上是关于WaveBadFormat 调用 .Init() 非默认音频设备 Naudio 时的主要内容,如果未能解决你的问题,请参考以下文章
为啥 Python 在创建实例时不调用实例方法 __init__() 而是调用类提供的 __init__() ?
iOS:UIView子类init会调用[super init]然后调用超类中的方法,为啥会调用[subclass initWithFrame:xx]?
__init__() 应该调用父类的 __init__() 吗?
iOS既没有调用init也没有调用initWithCoder [关闭]