macOS companion app
Голосове пробудження (macOS)
Голосове пробудження та «натисни й говори»
Режими
- Режим слова пробудження (типово): постійно ввімкнений розпізнавач мовлення чекає на тригерні слова (
swabbleTriggerWords). У разі збігу він починає захоплення, показує накладку з частковим текстом і автоматично надсилає після тиші. - Натисни й говори (утримання правої Option): утримуйте праву клавішу Option, щоб одразу почати захоплення — тригер не потрібен. Накладка з’являється під час утримання; відпускання завершує введення й пересилає його після короткої затримки, щоб ви могли підправити текст.
Поведінка під час виконання (слово пробудження)
- Розпізнавач мовлення працює у
VoiceWakeRuntime. - Тригер спрацьовує лише тоді, коли між словом пробудження та наступним словом є змістовна пауза (розрив близько 0,55 с). Накладка/звук можуть запуститися на паузі ще до початку команди.
- Вікна тиші: 2,0 с, коли мовлення триває, 5,0 с, якщо було почуто лише тригер.
- Жорстка зупинка: 120 с, щоб запобігти неконтрольованим сеансам.
- Debounce між сеансами: 350 мс.
- Накладкою керує
VoiceWakeOverlayControllerіз забарвленням для підтвердженого/тимчасового тексту. - Після надсилання розпізнавач чисто перезапускається, щоб слухати наступний тригер.
Інваріанти життєвого циклу
- Якщо Голосове пробудження ввімкнене й дозволи надано, розпізнавач слова пробудження має слухати (крім часу явного захоплення в режимі «натисни й говори»).
- Видимість накладки (зокрема ручне закриття кнопкою X) ніколи не повинна заважати відновленню розпізнавача.
Режим відмови з липкою накладкою (раніше)
Раніше, якщо накладка застрягала видимою і ви закривали її вручну, Голосове пробудження могло виглядати «мертвим», бо спробу перезапуску в runtime могла блокувати видимість накладки, а подальший перезапуск не планувався.
Посилення:
- Перезапуск wake runtime більше не блокується видимістю накладки.
- Завершення закриття накладки запускає
VoiceWakeRuntime.refresh(...)черезVoiceSessionCoordinator, тому ручне закриття X завжди відновлює слухання.
Особливості «натисни й говори»
- Виявлення гарячої клавіші використовує глобальний монітор
.flagsChangedдля правої Option (keyCode 61+.option). Ми лише спостерігаємо події (без перехоплення). - Конвеєр захоплення працює у
VoicePushToTalk: одразу запускає Speech, передає часткові результати в накладку й викликаєVoiceWakeForwarderпісля відпускання. - Коли запускається «натисни й говори», ми призупиняємо runtime слова пробудження, щоб уникнути конкуренції аудіовідводів; він автоматично перезапускається після відпускання.
- Дозволи: потрібні Microphone + Speech; для отримання подій потрібне схвалення Accessibility/Input Monitoring.
- Зовнішні клавіатури: деякі можуть не надавати праву Option очікуваним способом — запропонуйте резервне скорочення, якщо користувачі повідомляють про пропуски.
Налаштування для користувача
- Перемикач Голосове пробудження: вмикає runtime слова пробудження.
- Утримуйте Cmd+Fn, щоб говорити: вмикає монітор «натисни й говори». Вимкнено на macOS < 26.
- Вибір мови й мікрофона, живий індикатор рівня, таблиця тригерних слів, тестер (лише локально; не пересилає).
- Вибір мікрофона зберігає останній вибір, якщо пристрій від’єднується, показує підказку про від’єднання й тимчасово повертається до системного стандартного пристрою, доки він не з’явиться знову.
- Звуки: сигнали під час виявлення тригера та надсилання; типово використовується системний звук macOS "Glass". Для кожної події можна вибрати будь-який файл, який завантажує
NSSound(наприклад MP3/WAV/AIFF), або вибрати Без звуку.
Поведінка пересилання
- Коли Голосове пробудження ввімкнене, транскрипти пересилаються до активного gateway/агента (той самий локальний чи віддалений режим, який використовує решта mac app).
- Відповіді доставляються до останнього використаного основного провайдера (WhatsApp/Telegram/Discord/WebChat). Якщо доставка не вдається, помилка записується в журнал, а виконання все одно видно через журнали WebChat/сеансу.
Корисне навантаження пересилання
VoiceWakeForwarder.prefixedTranscript(_:)додає підказку про машину перед надсиланням. Спільно використовується шляхами слова пробудження та «натисни й говори».
Швидка перевірка
- Увімкніть «натисни й говори», утримуйте Cmd+Fn, говоріть, відпустіть: накладка має показати часткові результати, а потім надіслати.
- Під час утримання вуха в рядку меню мають залишатися збільшеними (використовує
triggerVoiceEars(ttl:nil)); вони зменшуються після відпускання.