Android Audio (4) : 녹음(Record) 데이터 흐름

1. 녹음(Record) 데이터 흐름

녹음은 외부 소스(마이크, 스트림 등)에서 데이터를 캡처하여 앱으로 전달하거나 저장/전송하는 과정입니다.

단계별 흐름

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

고려사항

  • 권한: RECORD_AUDIO, WRITE_EXTERNAL_STORAGE.
  • 버퍼 관리: AudioRecord.getMinBufferSize()로 지연 최소화.
  • 포커스: AudioManager.requestAudioFocus로 다른 앱과의 충돌 방지.

 

Comments

Popular posts from this blog

TinyZero 따라하기 (1)

TinyZero 따라하기 (3)

TinyZero 따라하기 (2)