macOS companion app

โอเวอร์เลย์เสียง

วงจรการทำงานของโอเวอร์เลย์เสียง (macOS)

กลุ่มเป้าหมาย: ผู้ร่วมพัฒนาแอป macOS เป้าหมาย: รักษาพฤติกรรมของโอเวอร์เลย์เสียงให้คาดการณ์ได้เมื่อการปลุกด้วยคำปลุกและการกดเพื่อพูดทำงานทับซ้อนกัน

พฤติกรรม

  • หากโอเวอร์เลย์แสดงอยู่แล้วจากคำปลุกและผู้ใช้กดปุ่มลัด เซสชันของปุ่มลัดจะรับข้อความที่มีอยู่มาใช้แทนการรีเซ็ต โอเวอร์เลย์จะแสดงอยู่ตลอดเวลาที่กดปุ่มลัดค้างไว้ เมื่อปล่อยปุ่ม: ส่งหากมีข้อความหลังตัดช่องว่างแล้ว มิฉะนั้นให้ปิด
  • การใช้คำปลุกเพียงอย่างเดียวยังคงส่งอัตโนมัติเมื่อตรวจพบความเงียบ ส่วนการกดเพื่อพูดจะส่งทันทีเมื่อปล่อยปุ่ม

การนำไปใช้

  • VoiceSessionCoordinator (apps/macos/Sources/OpenClaw/VoiceSessionCoordinator.swift) เป็นเจ้าของเพียงรายเดียวของเซสชันเสียงที่กำลังใช้งาน โดยเป็นซิงเกิลตัน @MainActor @Observable ไม่ใช่ actor API ได้แก่ startSession, updatePartial, finalize, sendNow, dismiss, updateLevel, snapshot แต่ละเซสชันมีโทเค็น UUID การเรียกที่ใช้โทเค็นเก่าหรือไม่ตรงกันจะถูกละทิ้ง
  • VoiceWakeOverlayController (VoiceWakeOverlayController+Session.swift) แสดงผลโอเวอร์เลย์และส่งต่อการกระทำของผู้ใช้ (requestSend, dismiss) กลับไปยังตัวประสานงานผ่านโทเค็นของเซสชัน โดยไม่ถือครองสถานะเซสชันเอง
  • การกดเพื่อพูด (VoicePushToTalk.begin()) จะรับข้อความใด ๆ ที่มองเห็นในโอเวอร์เลย์มาเป็น adoptedPrefix (ผ่าน VoiceSessionCoordinator.shared.snapshot()) เพื่อให้การกดปุ่มลัดขณะโอเวอร์เลย์คำปลุกแสดงอยู่คงข้อความเดิมไว้และต่อท้ายด้วยคำพูดใหม่ เมื่อปล่อยปุ่ม ระบบจะรอข้อความถอดเสียงฉบับสมบูรณ์สูงสุด 1.5 วินาที ก่อนกลับไปใช้ข้อความปัจจุบัน
  • เมื่อ dismiss โอเวอร์เลย์จะเรียก VoiceSessionCoordinator.overlayDidDismiss ซึ่งเรียก VoiceWakeRuntime.refresh(state:) เพื่อให้การปิดด้วยปุ่ม X ด้วยตนเอง การปิดเมื่อข้อความว่าง และการปิดหลังส่ง กลับมารอฟังคำปลุกทั้งหมด
  • เส้นทางการส่งแบบรวมศูนย์: หากข้อความหลังตัดช่องว่างว่างเปล่า ให้ปิด มิฉะนั้น sendNow จะเล่นเสียงแจ้งการส่งหนึ่งครั้ง ส่งต่อผ่าน VoiceWakeForwarder แล้วจึงปิด

การบันทึก日志

ระบบย่อยเสียงคือ ai.openclaw โดยแต่ละองค์ประกอบบันทึกภายใต้หมวดหมู่ของตนเอง:

หมวดหมู่ องค์ประกอบ
voicewake.coordinator VoiceSessionCoordinator
voicewake.overlay VoiceWakeOverlayController/VoiceWakeOverlay
voicewake.ptt ปุ่มลัดและการบันทึกเสียงสำหรับการกดเพื่อพูด
voicewake.runtime รันไทม์คำปลุก
voicewake.chime การเล่นเสียงแจ้งเตือน
voicewake.sync การซิงค์การตั้งค่าส่วนกลาง
voicewake.forward การส่งต่อข้อความถอดเสียง
voicewake.meter ตัวตรวจสอบระดับไมโครโฟน

รายการตรวจสอบการแก้จุดบกพร่อง

  • สตรีมบันทึกขณะทำซ้ำปัญหาโอเวอร์เลย์ค้าง:

    bash
    sudo log stream --predicate 'subsystem == "ai.openclaw" AND category CONTAINS "voicewake"' --level info --style compact
  • ตรวจสอบว่ามีโทเค็นเซสชันที่ใช้งานอยู่เพียงรายการเดียว การเรียกกลับที่ล้าสมัยจะถูกตัวประสานงานละทิ้ง

  • ยืนยันว่าการปล่อยปุ่มกดเพื่อพูดเรียก end() พร้อมโทเค็นที่ใช้งานอยู่เสมอ หากข้อความว่าง ควรปิดโดยไม่มีเสียงแจ้งเตือนหรือการส่ง

เนื้อหาที่เกี่ยวข้อง

Was this useful?
On this page

On this page