mic/client
김민서 a5207214f4 server, client 기본 작업 완료 2026-06-02 16:35:08 +09:00
..
src server, client 기본 작업 완료 2026-06-02 16:35:08 +09:00
CMakeLists.txt server, client 기본 작업 완료 2026-06-02 16:35:08 +09:00
README.md server, client 기본 작업 완료 2026-06-02 16:35:08 +09:00
client.conf.example server, client 기본 작업 완료 2026-06-02 16:35:08 +09:00

README.md

클라이언트

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 기준으로 다음 패키지가 필요합니다.

sudo apt update
sudo apt install build-essential cmake libasound2-dev

빌드

cd client
cmake -S . -B build
cmake --build build

설정

예시 설정 파일을 복사해서 사용합니다.

cp client.conf.example client.conf

주요 값:

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 범위 안에서 배정하는 방향으로 둡니다.

실행

./build/mic-client --config client.conf

종료는 Ctrl+C로 합니다.

마이크 확인

Orange Pi에서 USB 마이크 인식 여부를 먼저 확인합니다.

arecord -l
arecord -L

마이크가 default로 바로 잡히지 않으면 client.confalsa_device 값을 plughw:CARD,DEV 또는 hw:CARD,DEV 형태로 지정합니다.

패킷 형식

현재 클라이언트는 각 UDP 패킷 앞에 40바이트 헤더를 붙이고, 그 뒤에 PCM payload를 붙입니다.

헤더 숫자 값은 network byte order로 전송합니다. PCM payload는 signed 16-bit little endian입니다.

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를 재생하거나 저장하면 됩니다.