4.3 KiB
4.3 KiB
작업 플랜
- UUID:
5ee51f9b-4ba2-4474-8d6b-b7ad3306857b - 작업자:
Codex - 생성 시각:
2026-06-02 16:50 KST - 요청 요약:
클라이언트 실행 중 Wi-Fi 송신과 별도 로컬 녹음 저장을 동시에 수행하는 기능 검토
할 일
- 현재 요청 확인
- 기능 목표 정리
- server 작업영역을 수정하지 않는 범위 확인
- 구현 계획 사용자 확인
- 사용자 실행 지시 후 client 구현
- 빌드 또는 가능한 범위의 검증
- 완료 내용 정리
범위
client/작업만 대상으로 합니다.server/작업영역은 수정하지 않습니다.- 사용자가 계획을 확정하고 실행을 지시하기 전까지 C++ 코드는 수정하지 않습니다.
기능 목표
- 클라이언트가 실행되면 USB 마이크 입력을 기존처럼 Wi-Fi UDP로 전송합니다.
- 동시에 같은 캡처 오디오를 Orange Pi 내부 저장장치에 녹음 파일로 저장합니다.
- 방송 중 네트워크 끊김, 패킷 손실, 음성 깨짐이 발생해도 로컬 녹음본으로 후작업할 수 있게 합니다.
초기 구현 방향 후보
- 저장 형식은 무압축 WAV를 우선 검토합니다.
- 저장 데이터는 현재 송신 payload와 같은 signed 16-bit little endian PCM을 사용합니다.
- 파일명은 녹음을 시작한 일자와 실행 시각 기반으로 자동 생성하는 방식을 우선 검토합니다.
- 분할 저장은 하지 않고, 클라이언트 실행 1회마다 새 녹음 파일 1개를 만듭니다.
- 클라이언트가 재부팅 또는 재실행되면 새 파일을 생성합니다.
- 설정 파일에 로컬 녹음 활성화 여부와 저장 경로를 추가하는 방식을 우선 검토합니다.
- 디스크 쓰기 실패가 UDP 송신 전체를 즉시 망가뜨리지 않도록 오류 처리 방식을 정해야 합니다.
확인할 설계 쟁점
- 저장 파일은 실행 1회 기준 단일 WAV로 둡니다.
- 저장 위치 기본값은 실행 위치 기준
recordings/로 둡니다. - 디스크 용량 부족이나 파일 쓰기 실패가 발생해도 프로그램은 종료하지 않고 Wi-Fi 송신을 계속합니다.
사용자 확정 내용
- 녹음 파일 분할은 하지 않습니다.
- 녹음을 시작한 일자 기준으로 파일을 만듭니다.
- 클라이언트가 재부팅 또는 재실행되면 신규 파일을 만듭니다.
- 로컬 녹음은 항상 켜진 상태를 기본값으로 둡니다.
- 녹음 제어는 이후 서버에서 수행할 예정입니다.
- 저장 위치 기본값은
recordings/로 둡니다. - 어떠한 경우라도 녹음 파일 문제 때문에 클라이언트 프로그램이 종료되면 안 됩니다.
- 녹음 파일 생성 또는 쓰기에 실패하면 예외를 처리하고, 저장 없이 Wi-Fi 전송만 계속합니다.
구현 기준
record_enabled기본값은true로 둡니다.record_dir기본값은recordings로 둡니다.- WAV 파일 열기, 디렉터리 생성, 파일 쓰기, 헤더 갱신 실패는 치명 오류로 처리하지 않습니다.
- 녹음 실패 상태는 로그로 알리고 UDP 송신 루프는 계속 유지합니다.
- 녹음이 비활성화되거나 실패한 상태에서도 ALSA 캡처와 UDP 송신은 계속 진행합니다.
완료 요약
client/src/main.cpp에 로컬 WAV 백업 녹음 기능을 추가했습니다.- 클라이언트 실행 시
recordings/mic-client-YYYYMMDD-HHMMSS.wav형식의 파일을 생성합니다. - 파일 분할은 하지 않고, 실행 1회마다 파일 1개를 생성합니다.
- 녹음 파일 생성, 디렉터리 생성, 파일 쓰기, 종료 시 WAV 헤더 갱신 실패는 경고만 출력하고 UDP 송신은 계속합니다.
client/client.conf.example에record_enabled = true,record_dir = recordings를 추가했습니다.client/README.md와docs/02-client-direction.md에 로컬 백업 녹음 동작을 문서화했습니다.server/작업영역은 수정하지 않았습니다.
검증 결과
cmake -S client -B client/build를 실행했으나, 현재 macOS 로컬 환경에 ALSA 헤더와 라이브러리가 없어 구성 단계에서 실패했습니다.- 실패 원인:
Could NOT find ALSA (missing: ALSA_LIBRARY ALSA_INCLUDE_DIR) - 실제 빌드 검증은 Orange Pi 또는
libasound2-dev가 설치된 Linux 환경에서 수행해야 합니다.