음성 깨우기 및 눌러서 말하기
모드
- 깨우기 모드(기본값): 항상 켜져 있는 음성 인식기는 트리거 토큰(
swabbleTriggerWords)을 기다립니다. 일치하면 캡처가 시작되고 부분 텍스트가 포함된 오버레이가 표시되며 침묵 후 자동 전송됩니다. - 눌러서 말하기(오른쪽 옵션 길게 누르기): 오른쪽 Option 키를 길게 누르면 즉시 캡처됩니다. 트리거가 필요하지 않습니다. 누르고 있는 동안 오버레이가 나타납니다. 릴리스는 짧은 지연 후에 완료되고 전달되므로 텍스트를 조정할 수 있습니다.
런타임 동작(깨우기 단어)
- 음성 인식기는
VoiceWakeRuntime에 있습니다. - 트리거는 깨우기 단어와 다음 단어 사이에 의미 있는 일시중지가 있는 경우에만 실행됩니다(~0.55초 간격). 오버레이/차임벨은 명령이 시작되기 전이라도 일시 정지 시 시작할 수 있습니다.
- 무음 창: 음성이 흐르는 경우 2.0초, 트리거만 들리는 경우 5.0초.
- 하드 정지: 폭주 세션을 방지하기 위해 120초입니다.
- 세션 간 디바운스: 350ms.
- 오버레이는 커밋/휘발성 색상으로
VoiceWakeOverlayController를 통해 구동됩니다. - 전송 후 인식기는 다음 트리거를 수신하기 위해 완전히 다시 시작됩니다.
수명주기 불변성
- 음성 깨우기가 활성화되고 권한이 부여된 경우 깨우기 단어 인식기가 듣고 있어야 합니다(명시적인 푸시 투 토크 캡처 중에는 제외).
- 오버레이 가시성(X 버튼을 통한 수동 해제 포함)으로 인해 인식기가 다시 시작되는 것을 방해해서는 안 됩니다.
고정 오버레이 실패 모드(이전)
이전에는 오버레이가 표시되지 않고 수동으로 닫은 경우 런타임의 다시 시작 시도가 오버레이 표시에 의해 차단되고 후속 다시 시작이 예약되지 않았기 때문에 음성 깨우기가 "죽은" 것처럼 나타날 수 있었습니다.
경화:
- Wake 런타임 다시 시작이 더 이상 오버레이 가시성에 의해 차단되지 않습니다.
- 오버레이 해제 완료는
VoiceSessionCoordinator를 통해VoiceWakeRuntime.refresh(...)를 트리거하므로 수동 X-해제는 항상 듣기를 다시 시작합니다.
푸쉬투톡 세부사항
- 단축키 감지는 right Option (
keyCode 61+.option)에 대한 전역.flagsChanged모니터를 사용합니다. 우리는 사건만 관찰합니다(삼키지 않음). - 캡처 파이프라인은
VoicePushToTalk에 있습니다. 음성을 즉시 시작하고 부분을 오버레이로 스트리밍하며 릴리스 시VoiceWakeForwarder를 호출합니다. - 눌러서 말하기가 시작되면 깨우기 단어 런타임을 일시 중지하여 오디오 탭 결투를 방지합니다. 릴리스 후 자동으로 다시 시작됩니다.
- 권한: 마이크 + 음성이 필요합니다. 이벤트를 보려면 접근성/입력 모니터링 승인이 필요합니다.
- 외부 키보드: 일부는 예상대로 올바른 옵션을 표시하지 않을 수 있습니다. 사용자가 누락을 보고하는 경우 대체 단축키를 제공합니다.
사용자 대상 설정
- 음성 깨우기 토글: 깨우기 단어 런타임을 활성화합니다.
- 말하려면 Cmd+Fn을 누르세요: 눌러서 말하기 모니터를 활성화합니다. macOS < 26에서는 비활성화됩니다.
- 언어 및 마이크 선택기, 라이브 레벨 미터, 트리거 단어 테이블, 테스터(로컬 전용, 전달하지 않음).
- 마이크 선택기는 장치 연결이 끊어지면 마지막 선택을 유지하고, 연결 끊김 힌트를 표시하며, 장치가 돌아올 때까지 일시적으로 시스템 기본값으로 돌아갑니다.
- 사운드: 트리거 감지 및 전송 시 차임벨이 울립니다. 기본값은 macOS “Glass” 시스템 사운드입니다. 각 이벤트에 대해
NSSound로드 가능한 파일(예: MP3/WAV/AIFF)을 선택하거나 소리 없음을 선택할 수 있습니다.
전달 동작
- 음성 깨우기가 활성화되면 대화 내용이 활성 게이트웨이/에이전트(나머지 Mac 앱에서 사용되는 것과 동일한 로컬 대 원격 모드)로 전달됩니다.
- 답변은 마지막으로 사용한 주요 제공업체(WhatsApp/Telegram/Discord/WebChat)로 전달됩니다. 전달이 실패하면 오류가 기록되고 WebChat/세션 로그를 통해 실행이 계속 표시됩니다.
페이로드 전달
VoiceWakeForwarder.prefixedTranscript(_:)는 보내기 전에 기계 힌트를 앞에 추가합니다. wake-word와 push-to-talk 경로 간에 공유됩니다.
빠른 확인
- 푸시-투-토크를 켜고 Cmd+Fn을 누른 상태에서 말한 다음 놓습니다. 오버레이는 부분을 표시한 다음 전송해야 합니다.
- 누르고 있는 동안 메뉴바 귀는 확대된 상태로 유지되어야 합니다(
triggerVoiceEars(ttl:nil)사용). 출시 후에는 떨어집니다.