# 클라이언트 Orange Pi Zero 2W에서 실행할 USB 마이크 송신기입니다. 초기 목표는 USB 마이크 입력을 ALSA로 캡처하고, Mac 수신기로 UDP 패킷을 보내 실제 소리가 나오는지 확인하는 것입니다. ## 현재 범위 - C++17 - ALSA 기반 캡처 - UDP 송신 - 단일 송신기 - 무압축 signed 16-bit little endian PCM - 설정 파일 기반 Mac 수신기 주소 지정 자동 검색, 압축, 다중 송신기, 동기화, 지연 시간 최적화는 이후 단계에서 다룹니다. ## 필요 패키지 Orange Pi 공식 Debian 12 Bookworm Server 기준으로 다음 패키지가 필요합니다. ```bash sudo apt update sudo apt install build-essential cmake libasound2-dev ``` ## 빌드 ```bash cd client cmake -S . -B build cmake --build build ``` ## 설정 예시 설정 파일을 복사해서 사용합니다. ```bash cp client.conf.example client.conf ``` 주요 값: ```text server_host = 192.168.0.10 server_port = 4860 alsa_device = default sample_rate = 48000 channels = 1 frame_ms = 20 ``` `server_host`는 Mac 수신기의 IP 주소로 바꿉니다. 초기 버전은 단일 포트 `4860`을 사용합니다. 이후 여러 포트가 필요해지면 `4800-5000` 범위 안에서 배정하는 방향으로 둡니다. ## 실행 ```bash ./build/mic-client --config client.conf ``` 종료는 `Ctrl+C`로 합니다. ## 마이크 확인 Orange Pi에서 USB 마이크 인식 여부를 먼저 확인합니다. ```bash arecord -l arecord -L ``` 마이크가 `default`로 바로 잡히지 않으면 `client.conf`의 `alsa_device` 값을 `plughw:CARD,DEV` 또는 `hw:CARD,DEV` 형태로 지정합니다. ## 패킷 형식 현재 클라이언트는 각 UDP 패킷 앞에 40바이트 헤더를 붙이고, 그 뒤에 PCM payload를 붙입니다. 헤더 숫자 값은 network byte order로 전송합니다. PCM payload는 signed 16-bit little endian입니다. ```text magic 4 bytes "MIC1" version u16 header_size u16 sequence u64 timestamp_frames u64 sample_rate u32 channels u16 bits_per_sample u16 frame_count u32 payload_bytes u32 ``` 서버 구현은 이 형식에 맞춰 UDP 패킷을 수신하고 PCM payload를 재생하거나 저장하면 됩니다.