Android Audio (4) : 녹음(Record) 데이터 흐름
1. 녹음(Record) 데이터 흐름
녹음은 외부 소스(마이크, 스트림 등)에서 데이터를 캡처하여 앱으로 전달하거나 저장/전송하는 과정입니다.
단계별 흐름
- 외부 소스 (마이크, 블루투스 등):
- 데이터: 아날로그 오디오 신호(마이크) 또는 디지털 스트림(블루투스, USB).
- 예: 마이크에서 소리를 캡처하거나 네트워크 스트림 입력.
- 입력 장치 (AudioSource):
- 소스 선택: AudioSource.MIC, AudioSource.VOICE_COMMUNICATION, AudioSource.REMOTE_SUBMIX 등.
- 설정: 샘플레이트(예: 44.1kHz), 채널(모노/스테레오), 비트 깊이(16비트 PCM).
- 데이터: 아날로그 신호 → ADC(아날로그-디지털 변환) → PCM 데이터.
- Audio HAL (Hardware Abstraction Layer):
- 역할: 하드웨어(마이크, 블루투스 장치)와 안드로이드 시스템 간 인터페이스.
- 데이터: PCM 데이터를 하드웨어에서 시스템으로 전달.
- 예: 드라이버가 마이크 데이터를 읽어 상위 계층으로 전송.
- AudioFlinger:
- 역할: 안드로이드의 오디오 믹서로, 입력 스트림을 처리하고 라우팅.
- 데이터: PCM 데이터를 수집하여 AudioRecord 또는 AAudio로 전달.
- 추가: 노이즈 캔슬링, 게인 조절 등 전처리 가능.
- AudioRecord / AAudio:
- API: AudioRecord(자바) 또는 AAudio(네이티브, 저지연)로 PCM 데이터 캡처.
- 동작: AudioRecord.read()로 버퍼에 데이터 저장.
- 데이터: PCM 데이터 → 앱의 메모리 버퍼.
- 앱 처리:
- 처리: PCM 데이터를 인코딩(예: MediaCodec으로 MP3/AAC), 효과 적용, 실시간 스트리밍.
- 예: 이퀄라이저 적용, 노이즈 필터링, 또는 WebRTC로 스트리밍.
- 저장/전송:
- 저장: MediaMuxer로 MP4 파일 생성 또는 로컬 스토리지에 PCM 저장.
- 전송: 네트워크로 전송(예: RTP/RTSP 프로토콜).
- 데이터: 처리된 오디오 데이터 → 파일 또는 네트워크.
고려사항
- 권한: RECORD_AUDIO, WRITE_EXTERNAL_STORAGE.
- 버퍼 관리: AudioRecord.getMinBufferSize()로 지연 최소화.
- 포커스: AudioManager.requestAudioFocus로 다른 앱과의 충돌 방지.
Comments
Post a Comment