macOS companion app

Голосова активація (macOS)

Голосова активація та режим «натисни й говори»

Вимоги

Для голосової активації та режиму «натисни й говори» потрібна macOS 26 або новіша. У старіших версіях macOS елементи керування приховано зі сторінки налаштувань голосу, а замість них відображається вимога щодо macOS 26.

Режими

  • Режим слова активації (типово): постійно активний розпізнавач мовлення очікує на слова активації (swabbleTriggerWords). Коли він розпізнає таке слово, починається захоплення, з’являється накладка з проміжним текстом, а після паузи результат автоматично надсилається.
  • Натисни й говори (утримуйте праву клавішу 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 належним чином. Якщо користувачі повідомляють про пропущені спрацьовування, запропонуйте резервне сполучення клавіш.

Налаштування для користувача

  • Перемикач Голосова активація: вмикає середовище виконання слова активації.
  • Утримуйте праву клавішу Option, щоб говорити: вмикає монітор режиму «натисни й говори».
  • Засоби вибору мови й мікрофона, індикатор рівня в реальному часі, таблиця слів активації та засіб перевірки, який працює лише локально й ніколи нічого не пересилає.
  • Засіб вибору мікрофона зберігає останній вибір після від’єднання пристрою, показує повідомлення про від’єднання й тимчасово використовує системний мікрофон за замовчуванням, доки пристрій не під’єднається знову.
  • Звуки: звукові сигнали під час виявлення слова активації та надсилання; типово використовується системний звук macOS "Glass". Для кожної події можна вибрати будь-який файл, який завантажується через NSSound (наприклад, MP3/WAV/AIFF), або вибрати Без звуку.

Поведінка пересилання

  • Під час пересилання VoiceWakeForwarder.selectedSessionOptions вибирає ключ активного сеансу WebChat, якщо його задано, або головний ключ сеансу Gateway.
  • Система знаходить цей сеанс через sessions.list і визначає канал та ціль доставки з контексту доставки сеансу, а якщо це неможливо — використовує останній канал і ціль, а потім розібраний ключ сеансу. Якщо нічого визначити не вдається, типово використовується WebChat.
  • Якщо доставка завершується помилкою, її записують у журнал (категорія voicewake.forward), а виконання все одно можна переглянути в журналах WebChat або сеансу.

Корисне навантаження пересилання

  • VoiceWakeForwarder.prefixedTranscript(_:) додає перед транскриптом рядок-підказку для машини (визначене ім’я хоста або "цей Mac", якщо його не вдалося визначити); цей рядок спільний для шляхів слова активації та режиму «натисни й говори».

Швидка перевірка

  • Увімкніть режим «натисни й говори», утримуйте праву клавішу Option, промовте фразу й відпустіть клавішу: накладка має показати проміжні результати, а потім надіслати текст.
  • Під час утримання клавіші значок вух у рядку меню має залишатися збільшеним (triggerVoiceEars(ttl: nil)); після відпускання він зменшується.

Пов’язані матеріали

Was this useful?
On this page

On this page