Community translations by veiseule.ai — Help improve them on Crowdin
Skip to main content

การปลุกด้วยเสียง & กดเพื่อพูด

โหมด

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

พฤติกรรมขณะรัน (โหมดคำปลุก)

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

อินวาเรียนต์ของวงจรชีวิต

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

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

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

การเสริมความทนทาน:

  • การรีสตาร์ตรันไทม์ของคำปลุกจะไม่ถูกบล็อกด้วยการมองเห็นของโอเวอร์เลย์อีกต่อไป
  • การปิดโอเวอร์เลย์เสร็จสิ้นจะทริกเกอร์ VoiceWakeRuntime.refresh(...) ผ่าน VoiceSessionCoordinator ดังนั้นการกด X ปิดด้วยตนเองจะกลับมาฟังต่อเสมอ

รายละเอียดเฉพาะของ Push-to-talk

  • การตรวจจับฮอตคีย์ใช้ตัวเฝ้าดู .flagsChanged แบบโกลบอลสำหรับ Option ขวา (keyCode 61 + .option). เราเพียงสังเกตอีเวนต์ (ไม่ดักกิน)
  • พายป์ไลน์การบันทึกอยู่ใน VoicePushToTalk: เริ่ม Speech ทันที สตรีมข้อความบางส่วนไปยังโอเวอร์เลย์ และเรียก VoiceWakeForwarder เมื่อปล่อย
  • เมื่อเริ่ม push-to-talk เราจะพักรันไทม์คำปลุกเพื่อหลีกเลี่ยงการแย่งแท็ปเสียง; จะรีสตาร์ตอัตโนมัติหลังปล่อย
  • สิทธิ์: ต้องการไมโครโฟน + Speech; การเห็นอีเวนต์ต้องได้รับการอนุญาต Accessibility/Input Monitoring
  • คีย์บอร์ดภายนอก: บางรุ่นอาจไม่เปิดเผย Option ขวาตามที่คาด—ควรมีช็อตคัตสำรองหากผู้ใช้รายงานพลาด

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

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

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

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

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

  • VoiceWakeForwarder.prefixedTranscript(_:) จะเติมคำใบ้ของเครื่องไว้ด้านหน้าก่อนส่ง ใช้ร่วมกันทั้งเส้นทางคำปลุกและ push-to-talk ใช้ร่วมกันระหว่างเส้นทาง wake-word และ push-to-talk

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

  • เปิด push-to-talk กดค้าง Cmd+Fn พูด แล้วปล่อย: โอเวอร์เลย์ควรแสดงข้อความบางส่วนแล้วส่ง
  • ระหว่างกดค้าง ไอคอนหูที่แถบเมนูควรขยายอยู่ (ใช้ triggerVoiceEars(ttl:nil)); จะยุบหลังปล่อย