Asosiy tarkibga o'tish

45. Voice Wake & Push-to-Talk

46. Rejimlar

    1. Uyg‘otuvchi so‘z rejimi (standart): doimiy yoqilgan Speech recognizer trigger tokenlarni (swabbleTriggerWords) kutadi. 48. Mos kelganda u yozib olishni boshlaydi, overlay’ni qisman matn bilan ko‘rsatadi va sukunatdan keyin avtomatik yuboradi.
    1. Push-to-talk (O‘ng Option tugmasini bosib turish): o‘ng Option tugmasini bosib turib darhol yozib olish — trigger kerak emas. 50. Bosib turgan paytda overlay paydo bo‘ladi; qo‘yib yuborish yakunlaydi va matnni biroz tahrirlash imkonini berish uchun qisqa kechikishdan so‘ng yo‘naltiradi.

1. Ish vaqtidagi xatti-harakat (wake-word)

    1. Nutq tanib oluvchi VoiceWakeRuntime ichida joylashgan.
    1. Trigger faqat wake-word va keyingi so‘z orasida mazmunli pauza bo‘lsa (~0.55s tanaffus) ishga tushadi. The overlay/chime can start on the pause even before the command begins.
  • Sukut oralig‘i: nutq davom etayotganda 2.0s, faqat trigger eshitilgan bo‘lsa 5.0s.
    1. Qattiq to‘xtash: nazoratsiz sessiyalarni oldini olish uchun 120s.
    1. Sessiyalar orasida debounce: 350ms.
    1. Overlay VoiceWakeOverlayController orqali committed/volatile ranglash bilan boshqariladi.
    1. Yuborilgandan so‘ng, tanib oluvchi keyingi triggerni tinglash uchun toza holatda qayta ishga tushadi.

10. Hayotiy sikl invariantlari

    1. Agar Voice Wake yoqilgan va ruxsatlar berilgan bo‘lsa, wake-word tanib oluvchi tinglab turishi kerak (aniq push-to-talk capture vaqtlaridan tashqari).
    1. Overlay ko‘rinishi (jumladan X tugmasi orqali qo‘lda yopish) hech qachon tanib oluvchining qayta ishga tushishiga to‘sqinlik qilmasligi kerak.

13. Yopishqoq overlay nosozlik rejimi (avvalgi)

  1. Avval, agar overlay ko‘rinib qolib ketgan bo‘lsa va siz uni qo‘lda yopsangiz, Voice Wake “o‘lik” bo‘lib ko‘rinishi mumkin edi, chunki runtime’ning qayta ishga tushirish urinishlari overlay ko‘rinishi bilan bloklanib, keyingi qayta ishga tushirish rejalashtirilmas edi.
  2. Mustahkamlash:
    1. Wake runtime’ni qayta ishga tushirish endi overlay ko‘rinishi bilan bloklanmaydi.
    1. Overlay yopilishi yakunlanganda VoiceSessionCoordinator orqali VoiceWakeRuntime.refresh(...) chaqiriladi, shuning uchun X orqali qo‘lda yopish har doim tinglashni tiklaydi.

18. Push-to-talk xususiyatlari

    1. Hotkey aniqlash o‘ng Option uchun global .flagsChanged monitoridan foydalanadi (keyCode 61 + .option). 20. Biz faqat hodisalarni kuzatamiz (yutib yubormaymiz).
    1. Capture pipeline VoicePushToTalk ichida joylashgan: Speech’ni darhol boshlaydi, qisman natijalarni overlay’ga uzatadi va qo‘yib yuborilganda VoiceWakeForwarderni chaqiradi.
    1. Push-to-talk boshlanganda audio tap’lar to‘qnashmasligi uchun wake-word runtime’ni pauza qilamiz; qo‘yib yuborilgandan so‘ng u avtomatik qayta ishga tushadi.
    1. Ruxsatlar: Mikrofon + Speech talab qilinadi; hodisalarni ko‘rish uchun Accessibility/Input Monitoring tasdig‘i kerak.
    1. Tashqi klaviaturalar: ba’zilari o‘ng Option’ni kutilgandek ko‘rsatmasligi mumkin — agar foydalanuvchilar o‘tkazib yuborishlar haqida xabar bersa, zaxira yorliqni taklif qiling.

25. Foydalanuvchi uchun sozlamalar

    1. Voice Wake tumchog‘i: wake-word runtime’ni yoqadi.
    1. Cmd+Fn ni bosib turib gapirish: push-to-talk monitoringini yoqadi. 28. macOS < 26 da o‘chirilgan.
    1. Til va mikrofon tanlagichlari, jonli daraja o‘lchagichi, trigger-so‘zlar jadvali, tester (faqat lokal; uzatmaydi).
    1. Mikrofon tanlagichi qurilma uzilib qolsa ham oxirgi tanlovni saqlab qoladi, uzilganini ko‘rsatuvchi ishorani chiqaradi va qaytguncha vaqtincha tizim sukut bo‘yicha mikrofoniga o‘tadi.
    1. Tovushlar: trigger aniqlanganda va yuborilganda chime; sukut bo‘yicha macOS’ning “Glass” tizim tovushi. 32. Har bir hodisa uchun istalgan NSSound yuklanadigan faylni (masalan, MP3/WAV/AIFF) tanlashingiz yoki No Sound ni tanlashingiz mumkin.

33. Yo‘naltirish xatti-harakati

    1. Voice Wake yoqilganida, transkriptlar faol gateway/agent’ga uzatiladi (mac ilovaning qolgan qismi ishlatadigan lokal vs masofaviy rejim bilan bir xil).
    1. Javoblar oxirgi ishlatilgan asosiy provayderga yetkaziladi (WhatsApp/Telegram/Discord/WebChat). 36. Agar yetkazish muvaffaqiyatsiz bo‘lsa, xato log qilinadi va ish WebChat/sessiya loglari orqali baribir ko‘rinadi.

37. Yo‘naltirish payload’i

    1. VoiceWakeForwarder.prefixedTranscript(_:) yuborishdan oldin mashina ishorasini oldiga qo‘shadi. 39. Wake-word va push-to-talk yo‘llari o‘rtasida umumiy.

40. Tezkor tekshiruv

    1. Push-to-talk’ni yoqing, Cmd+Fn ni bosib turing, gapiring, qo‘yib yuboring: overlay avval qisman natijalarni ko‘rsatib, so‘ng yuborishi kerak.
    1. Bosib turganingizda, menyu-paneldagi quloqlar kattalashgan holda qolishi kerak (triggerVoiceEars(ttl:nil) ishlatiladi); qo‘yib yuborilgandan so‘ng tushadi.