USB 耳机麦克风静音按钮未与使用 VB.net 和 NAudio 的双向系统设备麦克风静音复选框同步

USB Headset Microphone Mute Button is not Synchronized with System Device Microphone Mute Checkbox in Both Directions Using VB.net and NAudio

我有一台 Dell Inspiron 3650 台式机 运行ning Microsoft Windows 10 Pro Version 10.0.18363 Build 18363。

我正在使用 NAudio 以编程方式使我的 USB 耳机麦克风静音和取消静音:

MicrophoneDevice.AudioEndpointVolume.Mute = True
MicrophoneDevice.AudioEndpointVolume.Mute = False

首先,我需要展示一些有助于理解问题的屏幕截图,在最底部post我会提出问题,请耐心等待。

在我的系统托盘中,我有一个“Dell Audio”的扬声器图标,它允许访问带麦克风的 USB 耳机的调整。

这将显示带有“静音复选框”的对话框。

NAudio 将使用以下代码毫无问题地选中或取消选中上面的复选框:

MicrophoneDevice.AudioEndpointVolume.Mute = True
MicrophoneDevice.AudioEndpointVolume.Mute = False

到目前为止一切顺利,现在让我们看看耳机的静音按钮:

行为

当 NAudio 使麦克风静音时,复选框被选中,使耳机的麦克风静音按钮完全无用,直到 NAudio 被告知取消静音,这取消了复选框和 return 对耳机静音按钮的控制。这是我期望的行为。

问题是,当我使用耳机的静音按钮静音或取消静音时,它不会打开和关闭复选框。这就是我所说的单向静音控制。我需要的是双向静音

您可能会问:为什么需要双向屏蔽?

我正在为盲人开发一个语音驱动程序,我不能指望他们能够关闭设置中的复选框,就像如果麦克风打开或离开。我能给出的唯一反馈是音效和计算机与他们对话。

用例场景

  1. 静音复选框未选中,耳机静音按钮已静音。
  2. 用户当前正在口述文档。
  3. 用户 un-mutes 麦克风说“Hello World”停顿了一秒钟。
  4. 用户说,“停止听写”。
  5. 用户使用耳机按钮将麦克风静音(这是用户执行的最后一个操作,因为 he/she 已经说完)。
  6. 该代码想要将麦克风静音,以防万一用户在计算机说话时忘记将其静音,以通知用户它实际上已停止听写。电脑说“Dictation was Stopped”(我们不希望麦克风在耳机扬声器音量过高的情况下拾取电脑的声音,所以我们静音)。
  7. 该代码想让麦克风保持静音,直到用户 un-mutes 使用耳机按钮打开麦克风。
  8. 糟糕 代码无法将其静音,因为耳机的静音按钮将保持无用。代码唯一的选择是取消麦克风静音。
  9. 这是一个问题,因为用户所做或打算做的最后一件事是使用耳机按钮将麦克风静音。据用户所知,麦克风仍处于静音状态。事实上,麦克风正在接收房间里的所有东西,因为代码别无选择,只能取消麦克风静音以 return 控制耳机。

我知道那是满嘴的,但仍然是我 运行 的真实案例。

这是一些非常简化的代码

Private Sub SpeechRecognition_SpeechRecognized(sender As Object, e As SpeechRecognizedEventArgs) Handles SpeechRecognition.SpeechRecognized

    MicrophoneDevice.AudioEndpointVolume.Mute = True

    My.Computer.Audio.Play(SoundsPath & "speaking.wav", AudioPlayMode.Background)

    ModuleSystemVoice.Speak("Dictation has been stopped", 3)

    ''''''' If you uncomment the line below the microphone is unconditionally un-muted until
    ''''''' the user mutes it with the headset's mute button but in the mean time background 
    '''''''noise in the room could falsely trigger another SpeechRecognition_SpeechRecognized
    '''''''event.

    '''''''MicrophoneDevice.AudioEndpointVolume.Mute = False



End Sub

我的问题

  1. 是否有一些 Win32 代码 API 或任何可以拦截耳机静音按钮的代码?
  2. 这是戴尔驱动程序的故障吗?
  3. 这是 Windows 10 USB 设备驱动程序规范中的设计缺陷吗?

我有一个使用麦克风音量 0-31 的解决方法,其中:

Muted = 0
Unmuted = My.Settings.LastVolumeLevel

即使结果是“无法使用耳机静音按钮”,我也希望得到您的建议或意见

提前谢谢大家。

发现这个试图解决类似的问题。 我怀疑你的耳机和我的一样,有一个内联静音按钮(图像被工作电脑屏蔽)。该按钮使耳机控制器上的麦克风静音,而不是通过 Windows 控件。这使得耳机即插即用 OS,而不需要驱动程序。

我正在尝试通过创建另一个硬件静音按钮来切换 Windows 麦克风静音(简单)和一个显示 Windows 麦克风静音状态的静音灯(几乎不可能)来解决这个问题。