Tag: winmm

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);

在Win 7上更改程序的音量

我想更改程序的音量(而不是主音量)。 我现在有以下代码: DllImport(“winmm.dll”)] public static extern int waveOutGetVolume(IntPtr hwo, out uint dwVolume); [DllImport(“winmm.dll”)] public static extern int waveOutSetVolume(IntPtr hwo, uint dwVolume); private void volumeBar_Scroll(object sender, EventArgs e) { // Calculate the volume that’s being set int NewVolume = ((ushort.MaxValue / 10) * volumeBar.Value); // Set the same volume for both the left and the right […]

是否可以在不同的API中关联相同的音频设备?

我正在使用winmm api来处理音频。 我正在使用waveInGetDeviceCaps和waveInMessage来唯一地标识“音频线”。 一切正常,但在Vista中,设备的名称由WaveInCaps结构WaveInCaps在32个字符中。 为了解决这个问题,我想要在操作系统版本> = Vista时使用核心API。 我正在使用IMMDeviceEnumerator.GetDevice和IMMDeviceEnumerator.EnumAudioEndpoints来收集音频线路信息,但我不知道如何判断核心api下的一个设备与waveXx api下的一个条目有关。 我想我可以比较两者的设备路径,但这将违背MS建议将设备路径字符串视为“不透明”。 你打算说什么?

NullReferenceException,没有堆栈跟踪……从哪里开始?

我有一个WPF音频应用程序。 偶尔(甚至在调试器中)我看到一个NullReferenceException ,它不携带堆栈跟踪信息。 如何开始调试这样的问题? 一些背景: 我在WinMM.dll中调用/调用函数,这涉及在调用waveOutOpen时注册回调 [DllImport(“winmm.dll”)] public static extern MmResult waveOutOpen(out IntPtr phwo, IntPtr uDeviceID, WaveFmt pwfx, WaveCallbk dwCallback, IntPtr dwInstance, int fdwOpen); 事实certificate这很难稳定,特别是在我调用waveOutClose ,并立即再次调用waveOutOpen (通常是为了改变输出格式)。 我怀疑这个问题可能与我上面描述的调用有关(尽管知识很少,我可能完全偏离目标)。 现在certificate重现问题是难以捉摸的,尽管我可以为一直看到这个问题的用户提供构建。 我可能会尝试加快导致问题的操作,以便在调试器中重现问题更加确定。 关于调试器,我没有修改任何设置(包括Enable unmanaged code debugging )或任何Debug -> Exceptions…设置。 说实话,我对这里提供的内容毫无头绪,所以任何提示都是受欢迎的。 exception怎么可能没有堆栈跟踪? 你以前见过这个吗? 救命!