Кнопка отключения микрофона на гарнитуре USB не синхронизируется с системным устройством Флажок отключения микрофона в обоих направлениях с использованием VB. net и NAudio - PullRequest
0 голосов
/ 05 марта 2020

У меня настольный компьютер Dell Inspiron 3650 под управлением Microsoft Windows 10 Pro Версия 10.0.18363 Build 18363.

Я использую NAudio для программного отключения звука и включения микрофона гарнитуры USB с помощью:

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

Во-первых, мне нужно показать несколько снимков экрана, которые помогут понять проблему, и в самом конце этого поста я буду задавать вопросы, поэтому, пожалуйста, потерпите меня.

В моем системном трее у меня есть значок динамика «Dell Audio», позволяющий получить доступ к настройкам USB-гарнитуры с микрофоном.

System Tray Dell Audio Speaker Icon

Появится диалоговое окно с «Без звука». Флажок ”.

Dell Audio Dialog Box

NAudio без проблем установит или снимет флажок выше, используя следующий код:

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

Так пока все хорошо, поэтому давайте теперь посмотрим на кнопку отключения звука гарнитуры:

Headset Mute Button

Поведение

Когда NAudio отключает микрофон, флажок установлен Использование кнопки отключения микрофона на гарнитуре совершенно бесполезно, пока NAudio не скажет включить звук, что снимает флажок и возвращает управление кнопке отключения звука на гарнитуре. Я ожидаю, что это поведение.

Проблема в том, что когда я выключаю звук или включаю звук с помощью кнопки отключения звука гарнитуры, он не включает и не выключает этот флажок. Это то, что я бы назвал однонаправленным контролем приглушения звука. Мне нужно двунаправленное отключение звука.

Вы можете спросить: зачем мне двунаправленное отключение звука?

Я работаю над голосовой программой для слепых и могу Я не ожидаю, что они смогут отключить флажок в настройках не более, чем у меня может быть визуальная очередь, показывающая их, если микрофон включен или выключен. Единственный отзыв, который я могу дать - это звуковые эффекты и компьютер, разговаривающий с ними.

Сценарий использования

  1. Флажок отключения звука не установлен, кнопка отключения звука гарнитуры muted.
  2. Пользователь в настоящее время диктует документ.
  3. Пользователь включает микрофон и говорит «Hello World» на секунду.
  4. Пользователь говорит: « Остановить диктовку ».
  5. Пользователь отключает микрофон с помощью кнопки гарнитуры (это последнее действие, которое пользователь выполняет, потому что он / она закончил говорить).
  6. Код хочет отключить микрофон на случай, если пользователь забыл отключить звук во время разговора, чтобы сообщить пользователю, что он фактически прекратил диктовку. Компьютер говорит «Диктовка была остановлена» (мы не хотим, чтобы микрофон улавливал голос компьютера в случае, если громкость динамика гарнитуры слишком высока, поэтому мы отключаем звук).
  7. Код хочет сохранить Микрофон отключен до тех пор, пока пользователь не отключит микрофон с помощью кнопки гарнитуры.
  8. Упс код не может его отключить, поскольку кнопка отключения звука гарнитуры останется бесполезной. Единственный выбор кода - включить микрофон.
  9. Это проблема, потому что последнее, что пользователь сделал или намеревался сделать, это отключить микрофон с помощью кнопки гарнитуры. Насколько пользователь знает, микрофон по-прежнему отключен. Фактически, микрофон улавливает все в комнате, потому что у кода не было выбора, кроме как включить микрофон, чтобы вернуть управление гарнитуре.

Я знаю, что это был полный рот, но тем не менее фактический случай, с которым я столкнулся.

Вот очень упрощенный код

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. Это ошибка в драйвере Dell?
  3. Это недостаток дизайна в спецификации Windows 10 драйвера для устройств USB?

У меня есть обходной путь с использованием громкости микрофона 0-31, где:

Muted = 0
Unmuted = My.Settings.LastVolumeLevel

Я хотел бы получить ваш совет или мнение, даже если результат «Невозможно с помощью кнопки отключения звука гарнитуры»

Спасибо всем заранее.

...