---
read_when:
    - กำลังทำงานกับเส้นทาง voice wake หรือ PTT
summary: โหมด voice wake และ push-to-talk รวมถึงรายละเอียดการกำหนดเส้นทางในแอป mac
title: Voice wake (macOS)
x-i18n:
    generated_at: "2026-04-24T09:22:22Z"
    model: gpt-5.4
    provider: openai
    source_hash: 0273c24764f0baf440a19f31435d6ee62ab040c1ec5a97d7733d3ec8b81b0641
    source_path: platforms/mac/voicewake.md
    workflow: 15
---

# การปลุกด้วยเสียงและกดค้างเพื่อพูด

## โหมด

- **โหมดคำปลุก** (ค่าเริ่มต้น): ตัวรู้จำเสียงพูดที่เปิดทำงานตลอดเวลาจะรอโทเค็นทริกเกอร์ (`swabbleTriggerWords`) เมื่อพบตรงกันจะเริ่มการจับเสียง แสดงโอเวอร์เลย์พร้อมข้อความบางส่วน และส่งอัตโนมัติหลังจากเงียบไปช่วงหนึ่ง
- **กดค้างเพื่อพูด (กด Right Option ค้าง)**: กดปุ่ม Right Option ค้างเพื่อเริ่มจับเสียงทันที โดยไม่ต้องมีทริกเกอร์ โอเวอร์เลย์จะปรากฏขณะกดค้าง และเมื่อปล่อยจะเป็นการสรุปผลและส่งต่อหลังจากหน่วงสั้น ๆ เพื่อให้คุณปรับแก้ข้อความได้

## พฤติกรรมขณะรันไทม์ (คำปลุก)

- ตัวรู้จำเสียงพูดทำงานอยู่ใน `VoiceWakeRuntime`
- ทริกเกอร์จะทำงานก็ต่อเมื่อมี **ช่วงหยุดที่มีนัยสำคัญ** ระหว่างคำปลุกกับคำถัดไป (ช่องว่างประมาณ `0.55s`) โอเวอร์เลย์/เสียงเตือนอาจเริ่มที่จังหวะหยุดนั้นได้ แม้ก่อนที่คำสั่งจะเริ่ม
- ช่วงเวลาความเงียบ: 2.0 วินาทีเมื่อการพูดยังต่อเนื่อง, 5.0 วินาทีหากได้ยินเพียงทริกเกอร์เท่านั้น
- การหยุดแบบตายตัว: 120 วินาที เพื่อป้องกันเซสชันที่ทำงานค้าง
- หน่วงกันการเริ่มซ้ำระหว่างเซสชัน: 350ms
- โอเวอร์เลย์ขับเคลื่อนผ่าน `VoiceWakeOverlayController` พร้อมการระบายสีแบบ committed/volatile
- หลังส่งแล้ว ตัวรู้จำจะเริ่มใหม่อย่างสะอาดเพื่อรอฟังทริกเกอร์ถัดไป

## ค่าคงที่ของวงจรชีวิต

- หากเปิดใช้งาน Voice Wake และให้สิทธิ์แล้ว ตัวรู้จำคำปลุกควรอยู่ในสถานะกำลังฟังอยู่เสมอ (ยกเว้นระหว่างการจับเสียงแบบกดค้างเพื่อพูดโดยชัดเจน)
- การมองเห็นของโอเวอร์เลย์ (รวมถึงการปิดเองผ่านปุ่ม X) ต้องไม่ขัดขวางไม่ให้ตัวรู้จำกลับมาทำงานต่อ

## โหมดความล้มเหลวแบบโอเวอร์เลย์ค้าง (ก่อนหน้านี้)

ก่อนหน้านี้ หากโอเวอร์เลย์ค้างแสดงอยู่และคุณปิดเอง Voice Wake อาจดูเหมือน “ตาย” เพราะความพยายามรีสตาร์ทของรันไทม์อาจถูกบล็อกโดยการมองเห็นของโอเวอร์เลย์ และไม่มีการกำหนดการรีสตาร์ทครั้งถัดไป

การทำให้ทนทานขึ้น:

- การรีสตาร์ทของ wake runtime จะไม่ถูกบล็อกด้วยการมองเห็นของโอเวอร์เลย์อีกต่อไป
- เมื่อการปิดโอเวอร์เลย์เสร็จสมบูรณ์ จะทริกเกอร์ `VoiceWakeRuntime.refresh(...)` ผ่าน `VoiceSessionCoordinator` ดังนั้นการกด X เพื่อปิดเองจะทำให้กลับมาฟังต่อเสมอ

## รายละเอียดเฉพาะของกดค้างเพื่อพูด

- การตรวจจับฮอตคีย์ใช้ตัวมอนิเตอร์ `.flagsChanged` แบบ global สำหรับ **Right Option** (`keyCode 61` + `.option`) เราเพียงสังเกตเหตุการณ์เท่านั้น (ไม่ดักกินเหตุการณ์)
- ไปป์ไลน์การจับเสียงอยู่ใน `VoicePushToTalk`: เริ่ม Speech ทันที สตรีมข้อความบางส่วนไปยังโอเวอร์เลย์ และเรียก `VoiceWakeForwarder` เมื่อปล่อยปุ่ม
- เมื่อเริ่มกดค้างเพื่อพูด เราจะพัก wake-word runtime เพื่อหลีกเลี่ยง audio tap ที่ตีกัน และจะเริ่มใหม่อัตโนมัติหลังปล่อย
- สิทธิ์: ต้องมีสิทธิ์ Microphone + Speech; การเห็นเหตุการณ์ต้องได้รับอนุญาต Accessibility/Input Monitoring
- คีย์บอร์ดภายนอก: บางรุ่นอาจไม่เปิดเผย Right Option ตามที่คาดไว้ ควรมีคีย์ลัดสำรองหากผู้ใช้รายงานว่าตรวจจับพลาด

## การตั้งค่าที่ผู้ใช้มองเห็น

- สวิตช์ **Voice Wake**: เปิดใช้งาน wake-word runtime
- **กด Cmd+Fn ค้างเพื่อพูด**: เปิดใช้งานตัวมอนิเตอร์กดค้างเพื่อพูด ปิดใช้งานบน macOS < 26
- ตัวเลือกภาษาและไมค์, มาตรวัดระดับสด, ตารางคำทริกเกอร์, ตัวทดสอบ (เฉพาะในเครื่อง; ไม่ส่งต่อ)
- ตัวเลือกไมค์จะคงการเลือกครั้งล่าสุดไว้หากอุปกรณ์ถูกตัดการเชื่อมต่อ แสดงคำใบ้ว่าถูกตัดการเชื่อมต่อ และสลับไปใช้ค่าเริ่มต้นของระบบชั่วคราวจนกว่าอุปกรณ์จะกลับมา
- **เสียง**: มีเสียงเตือนเมื่อพบทริกเกอร์และเมื่อส่ง โดยค่าเริ่มต้นใช้เสียงระบบ macOS “Glass” คุณสามารถเลือกไฟล์ใดก็ได้ที่ `NSSound` โหลดได้ (เช่น MP3/WAV/AIFF) สำหรับแต่ละเหตุการณ์ หรือเลือก **No Sound**

## พฤติกรรมการส่งต่อ

- เมื่อเปิดใช้งาน Voice Wake ข้อความถอดเสียงจะถูกส่งต่อไปยัง Gateway/agent ที่ใช้งานอยู่ (ใช้โหมด local หรือ remote เดียวกับที่ส่วนอื่นของแอป mac ใช้)
- คำตอบจะถูกส่งไปยัง **provider หลักที่ใช้ล่าสุด** (WhatsApp/Telegram/Discord/WebChat) หากการส่งล้มเหลว จะมีการบันทึกข้อผิดพลาด และยังคงมองเห็นการรันได้ผ่าน WebChat/บันทึกเซสชัน

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

- `VoiceWakeForwarder.prefixedTranscript(_:)` จะเติม machine hint นำหน้าก่อนส่ง ใช้ร่วมกันทั้งเส้นทางคำปลุกและกดค้างเพื่อพูด

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

- เปิดการกดค้างเพื่อพูด กด Cmd+Fn ค้าง พูด แล้วปล่อย: โอเวอร์เลย์ควรแสดงข้อความบางส่วนแล้วจึงส่ง
- ระหว่างกดค้าง หูในแถบเมนูควรยังคงขยายอยู่ (ใช้ `triggerVoiceEars(ttl:nil)`); หลังปล่อยจึงย่อกลับ

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

- [การปลุกด้วยเสียง](/th/nodes/voicewake)
- [โอเวอร์เลย์เสียง](/th/platforms/mac/voice-overlay)
- [แอป macOS](/th/platforms/macos)
