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.forward category) และการทำงานจะยังคงดูได้ผ่านบันทึก WebChat/เซสชัน

เพย์โหลดการส่งต่อ

  • VoiceWakeForwarder.prefixedTranscript(_:) จะเติมบรรทัดคำใบ้เกี่ยวกับเครื่องไว้ก่อนข้อความถอดเสียง (ชื่อโฮสต์ที่ระบุได้ หรือใช้ "Mac เครื่องนี้" หากระบุไม่ได้) โดยใช้ร่วมกันทั้งเส้นทางคำปลุกและการกดค้างเพื่อพูด

การตรวจสอบอย่างรวดเร็ว

  • เปิดการกดค้างเพื่อพูด กด Right Option ค้างไว้ พูด แล้วปล่อยปุ่ม: โอเวอร์เลย์ควรแสดงผลลัพธ์บางส่วนก่อนส่ง
  • ขณะกดค้าง หูในแถบเมนูควรขยายค้างไว้ (triggerVoiceEars(ttl: nil)) และจะย่อกลับหลังจากปล่อยปุ่ม

ที่เกี่ยวข้อง

Was this useful?
On this page

On this page