Windows 8.1 WPF应用程序mixerSetControlDetails返回MMSYSERR_ERROR

编辑

修改了NAudio源代码并稍加调试后,我发现在设置Value属性时调用的mixerSetControlDetails函数返回MMSYSERR_ERROR

有没有办法获得有关为什么mixerSetControlDetails失败的进一步信息?

我也愿意采用其他方式在C#上完成同样的事情。

原版的

我有一些代码可以计算语音能量,并使用NAudio根据此计算值设置麦克风增强级别。 我在读取音频样本时没有问题但是当我尝试设置麦克风增强时,程序会卡住。

我已在Windows 7,8和8.1上检查过该问题。 该问题仅在Windows 8.1上发生。 有趣的是,当我在Windows 8.1的虚拟机上运行该程序时,它按预期工作。 这可能是一个许可问题吗?

以下是设置增强值的代码

 foreach (MixerControl mixerControl in MixerLine.Controls) { if (mixerControl.ControlType == MixerControlType.Volume) { UnsignedMixerControl volumeControl = (UnsignedMixerControl)mixerControl; volumeControl.Value = (uint) value; } } 

使用此代码预先创建MixerLine的位置。

 MixerLine = new MixerLine((IntPtr) deviceID, 0, MixerFlags.WaveIn); 

似乎mixerSetControlDetails函数随机返回MMSYSERR_ERROR (至少我找不到模式)。 实际上它确实设置了新值,只是忽略exception,或者如果没有设置尝试再次设置值。 卡住的行为与我的程序有关,与此错误无关。