닷새 동안 PR 34개, 그중 18개가 녹음 캡슐.
개발 과정
삼성 녹음기 대신 전용 앱
- 막힘
- 삼성 음성 녹음기의 녹음 시작 Intent(START_RECORDING)는 signature|privileged 권한 — 남의 앱에서 못 부름. 화면 자동화는 되지만 저장 대화상자에 의존
- 한 것
- 전용 안드로이드 앱이 마이크 PCM 을 녹음 중 Mac 으로 전송. 갤럭시 · Mac 양쪽에 WAV 백업. 첫 연결은 ADB reverse 로만
- 결과
- PR #1. 오디오 경로를 먼저 검증하고 Whisper · 단축키는 그 뒤에
어떻게 도나
프로세스 셋이 한 소켓으로 붙어 Option+Space 한 번을 커서 자리의 글로 옮긴다. 듣는 쪽과 알아듣는 쪽을 나눈 건 Whisper large 급이 맥의 Metal 을 쓰기 때문이고, 폰이 듣는 건 맥 내장 마이크보다 입에 가깝기 때문이다.
소리를 나눠 보내는 동안 경계를 잃지 않으려면 길이가 앞에 와야 한다. TCP 는 바이트 흐름이라 알아서 잘라 주지 않는다.
폰은 USB 를 먼저 250ms 만 찔러 보고, 없으면 와이파이로 맥을 부른다. 무선 디버깅을 켜 둘 필요가 없다.
음악이 멈추고 다시 나는 자리
멈추는 건 되는데 다시 나지 않던 이유는 하나다 — 빌리지 않고 빼앗았으니 돌려줄 것이 없었다. 안드로이드는 누가 마이크를 열면 음악을 눌러 주는데, 그건 요청이 아니라 결과라서 녹음이 끝났을 때 되살릴 주체가 없다.
TRANSIENT 가 핵심이다. 영구 GAIN 으로 받으면 상대는 끝난 줄 모르고 멈춘 채 남는다.
EXCLUSIVE 는 줄이지 말고 아예 멈추라는 뜻이고, 작게라도 나면 그 소리가 녹음에 섞인다.
맥 쪽에서는 스피커를 음소거해 같은 문제를 다르게 푼다 — 끄기 전 상태를 기억해 두고 끝나면
그 값으로 되돌린다. 남의 앱을 건드릴 수 없는 폰에서는 포커스를 빌리는 길밖에 없다.
의사결정 방식
말로 고르지 않고 후보를 HTML 로 그려 같은 조건에서 비교. 캡슐은 시안과 실제 Mac 화면을 나란히 놓고 밀도 · 좌표계를 맞춤. 누르면 그때 페이지.
배운 점
남의 앱 흐름에 기대면 권한 하나에 막힘. 녹음기 자동화 대신 마이크 PCM 부터 직접 잡은 게 첫날의 전환.
멀리 돌아간 탐색이 원래 자리로 옴. 여섯 방향을 그려 본 뒤 고른 건 기존 캡슐의 미세 조정 F안.
산출물
- 시안 페이지 여섯 — 위 격자
- 소스 — private repo(newhigen-labs/galaxy-voice-bridge)





