macOS companion app
การปลุกด้วยเสียง (macOS)
การปลุกด้วยเสียงและการกดค้างเพื่อพูด
ข้อกำหนด
การปลุกด้วยเสียงและการกดค้างเพื่อพูดต้องใช้ macOS 26 หรือใหม่กว่า ใน macOS รุ่นเก่า ตัวควบคุมจะถูกซ่อนจากหน้าการตั้งค่าเสียง ซึ่งจะแสดงข้อกำหนด macOS 26 แทน
การปลุกด้วยเสียงต้องใช้ Apple Speech ที่รองรับการรู้จำบนอุปกรณ์สำหรับภาษาที่เลือก แอปจะไม่เริ่มฟังคำปลุกแบบพาสซีฟเมื่อไม่สามารถใช้เงื่อนไขที่กำหนดให้ประมวลผลภายในเครื่องเท่านั้นได้ และจะไม่เปลี่ยนไปใช้การรู้จำผ่านเครือข่ายเป็นทางเลือกสำรอง การกดค้างเพื่อพูด โหมดสนทนา และการป้อนตามคำบอกในแชตด่วนเป็นการกระทำที่ผู้ใช้สั่งโดยชัดแจ้ง และอาจใช้บริการเครือข่ายของ Apple Speech เพื่อให้รองรับภาษาได้ครอบคลุมยิ่งขึ้น
โหมด
- โหมดคำปลุก (ค่าเริ่มต้น): ตัวรู้จำเสียงพูดบนอุปกรณ์ที่ทำงานตลอดเวลาจะรอโทเค็นเรียกใช้ (
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แบบส่วนกลางสำหรับ Right Option (keyCode 61+.option) โดยจะสังเกตเหตุการณ์เท่านั้นและไม่ดักเหตุการณ์ไว้ - การบันทึกอยู่ใน
VoicePushToTalk: เริ่ม Speech ทันที สตรีมผลลัพธ์บางส่วนไปยังโอเวอร์เลย์ และเรียกVoiceWakeForwarderเมื่อปล่อยปุ่ม - การเริ่มกดค้างเพื่อพูดจะหยุดรันไทม์คำปลุกชั่วคราวเพื่อหลีกเลี่ยงการแย่งรับเสียง และจะเริ่มต้นใหม่โดยอัตโนมัติหลังจากปล่อยปุ่ม
- สิทธิ์: ต้องใช้ไมโครโฟนและการรู้จำเสียงพูด ส่วนการรับเหตุการณ์ปุ่มต้องได้รับอนุญาตสำหรับ Accessibility/Input Monitoring
- แป้นพิมพ์ภายนอก: บางรุ่นไม่ส่ง Right Option ตามที่คาดไว้ ควรมีปุ่มลัดสำรองหากผู้ใช้รายงานว่าตรวจจับไม่สำเร็จ
การตั้งค่าที่ผู้ใช้มองเห็น
- สวิตช์ การปลุกด้วยเสียง: เปิดใช้รันไทม์คำปลุก
- Hold Right Option to talk: เปิดใช้ตัวเฝ้าติดตามการกดค้างเพื่อพูด
- หากภาษาที่เลือกไม่รองรับการรู้จำบนอุปกรณ์ใน Mac เครื่องนี้ การปลุกด้วยเสียงจะยังคงปิดใช้งาน ขณะที่การกดค้างเพื่อพูดและโหมดสนทนายังคงใช้งานได้
- ตัวเลือกภาษาและไมโครโฟน มาตรวัดระดับแบบสด ตารางคำเรียกใช้ และเครื่องมือทดสอบ (ทำงานภายในเครื่องเท่านั้นและไม่ส่งต่อ)
- ตัวเลือกไมโครโฟนจะคงอุปกรณ์ที่เลือกล่าสุดไว้หากอุปกรณ์ตัดการเชื่อมต่อ แสดงคำแนะนำว่าอุปกรณ์ไม่ได้เชื่อมต่อ และใช้ค่าเริ่มต้นของระบบเป็นการชั่วคราวจนกว่าอุปกรณ์จะกลับมา
- เสียง: ส่งเสียงเตือนเมื่อตรวจพบคำเรียกใช้และเมื่อส่ง โดยค่าเริ่มต้นใช้เสียงระบบ "Glass" ของ macOS เลือกไฟล์ใดก็ได้ที่
NSSoundโหลดได้ (เช่น MP3/WAV/AIFF) สำหรับแต่ละเหตุการณ์ หรือเลือก No Sound
พฤติกรรมการส่งต่อ
- เมื่อส่งต่อ
VoiceWakeForwarder.selectedSessionOptionsจะเลือกคีย์เซสชัน WebChat ที่ใช้งานอยู่หากมีการตั้งค่าไว้ มิฉะนั้นจะใช้คีย์เซสชันหลักของ Gateway - ระบบจะค้นหาเซสชันนั้นผ่าน
sessions.listและระบุช่องทางกับเป้าหมายการส่งจากบริบทการส่งของเซสชัน (หากไม่พบ จะใช้ช่องทาง/เป้าหมายล่าสุดของเซสชัน จากนั้นจึงใช้คีย์เซสชันที่แยกวิเคราะห์แล้ว) โดยใช้ WebChat เป็นค่าเริ่มต้นหากไม่สามารถระบุสิ่งใดได้ - หากการส่งล้มเหลว ข้อผิดพลาดจะถูกบันทึก (
voicewake.forwardcategory) และการทำงานจะยังคงดูได้ผ่านบันทึก WebChat/เซสชัน
เพย์โหลดการส่งต่อ
VoiceWakeForwarder.prefixedTranscript(_:)จะเติมบรรทัดคำใบ้เกี่ยวกับเครื่องไว้ก่อนข้อความถอดเสียง (ชื่อโฮสต์ที่ระบุได้ หรือใช้ "Mac เครื่องนี้" หากระบุไม่ได้) โดยใช้ร่วมกันทั้งเส้นทางคำปลุกและการกดค้างเพื่อพูด
การตรวจสอบอย่างรวดเร็ว
- เปิดการกดค้างเพื่อพูด กด Right Option ค้างไว้ พูด แล้วปล่อยปุ่ม: โอเวอร์เลย์ควรแสดงผลลัพธ์บางส่วนก่อนส่ง
- ขณะกดค้าง หูในแถบเมนูควรขยายค้างไว้ (
triggerVoiceEars(ttl: nil)) และจะย่อกลับหลังจากปล่อยปุ่ม
ที่เกี่ยวข้อง
Was this useful?