macOS companion app
Голосовая активация (macOS)
Голосовая активация и передача по нажатию
Требования
Для голосовой активации и передачи по нажатию требуется macOS 26 или новее. В более ранних версиях macOS элементы управления скрыты на странице настроек голоса, а вместо них отображается требование macOS 26.
Режимы
- Режим ключевого слова (по умолчанию): постоянно активный распознаватель речи ожидает слова активации (
swabbleTriggerWords). При совпадении он начинает запись, отображает наложение с частично распознанным текстом и автоматически отправляет его после паузы. - Передача по нажатию (удерживайте Right Option): удерживайте правую клавишу Option, чтобы сразу начать запись без ключевого слова. Наложение отображается, пока клавиша удерживается; после отпускания запись завершается и передаётся с небольшой задержкой, чтобы вы могли отредактировать текст.
Поведение во время выполнения (ключевое слово)
- Распознаватель находится в
VoiceWakeRuntime. - Активация происходит только при наличии заметной паузы между ключевым словом и следующим словом (
triggerPauseWindow= 0.55s). Наложение и звуковой сигнал могут появиться во время паузы, ещё до начала команды. - Интервалы тишины: 2.0s (
silenceWindow), когда речь продолжается, и 5.0s (triggerOnlySilenceWindow), если было распознано только ключевое слово. - Принудительная остановка: 120s (
captureHardStop), чтобы предотвратить бесконечные сеансы. - Задержка между сеансами: 350ms (
debounceAfterSend) после отправки. - Наложение управляется через
VoiceWakeOverlayController; подтверждённый и предварительный текст отображаются разными цветами. - После отправки распознаватель корректно перезапускается и ожидает следующее ключевое слово.
Инварианты жизненного цикла
- Если голосовая активация включена и разрешения предоставлены, распознаватель ключевого слова продолжает прослушивание, кроме периодов активной записи в режиме передачи по нажатию.
- После закрытия наложения, в том числе вручную кнопкой X, распознаватель всегда возобновляет работу:
VoiceSessionCoordinator.overlayDidDismissвызываетVoiceWakeRuntime.refresh(state:)для каждого способа закрытия. Модель сеанса и токена описана в разделе Голосовое наложение.
Особенности передачи по нажатию
- Для обнаружения горячей клавиши используется глобальный монитор
.flagsChangedдля правой клавиши Option (keyCode 61+.option). Он только отслеживает события и никогда не перехватывает их. - Запись выполняется в
VoicePushToTalk: распознавание речи запускается немедленно, частичные результаты передаются в наложение, а при отпускании вызываетсяVoiceWakeForwarder. - При запуске передачи по нажатию среда обработки ключевого слова приостанавливается, чтобы избежать конкурирующего захвата звука; после отпускания она автоматически перезапускается.
- Разрешения: требуются доступ к микрофону и распознаванию речи; для получения событий клавиатуры необходимо разрешение Accessibility/Input Monitoring.
- Внешние клавиатуры: некоторые из них не передают правую клавишу Option ожидаемым образом. Если пользователи сообщают о пропущенных нажатиях, предложите резервное сочетание клавиш.
Пользовательские настройки
- Переключатель Голосовая активация: включает среду обработки ключевого слова.
- Удерживайте Right Option для разговора: включает монитор передачи по нажатию.
- Средства выбора языка и микрофона, индикатор уровня в реальном времени, таблица ключевых слов и средство проверки (работает только локально и ничего не передаёт).
- Средство выбора микрофона сохраняет последний выбранный вариант при отключении устройства, показывает уведомление об отключении и временно использует системное устройство по умолчанию, пока выбранное устройство не станет доступно снова.
- Звуки: сигналы при обнаружении ключевого слова и отправке; по умолчанию используется системный звук macOS "Glass". Для каждого события можно выбрать любой файл, загружаемый через
NSSound(например, MP3/WAV/AIFF), или выбрать Без звука.
Поведение при передаче
- При передаче
VoiceWakeForwarder.selectedSessionOptionsвыбирает ключ активного сеанса WebChat, если он задан, иначе — ключ основного сеанса Gateway. - Этот сеанс ищется через
sessions.list, после чего канал и получатель определяются из контекста доставки сеанса (с переходом к последнему каналу и получателю, а затем к разобранному ключу сеанса); если определить их не удаётся, по умолчанию используется WebChat. - Если доставка завершается с ошибкой, она записывается в журнал (категория
voicewake.forward), а выполнение по-прежнему отображается в WebChat и журналах сеанса.
Полезная нагрузка передачи
VoiceWakeForwarder.prefixedTranscript(_:)добавляет перед расшифровкой строку с подсказкой о компьютере (определённое имя узла или "этот Mac", если определить его не удалось); эта строка используется как для ключевого слова, так и для передачи по нажатию.
Быстрая проверка
- Включите передачу по нажатию, удерживайте Right Option, произнесите текст и отпустите клавишу: наложение должно сначала показать частичные результаты, а затем отправить текст.
- Пока клавиша удерживается, значок ушей в строке меню должен оставаться увеличенным (
triggerVoiceEars(ttl: nil)); после отпускания он уменьшается.
Связанные разделы
Was this useful?