Android Audio (0) : 안드로이드 오디오

 안드로이드 오디오 시스템의 동작을 큰 그림으로 요약하면, 입력 소스(스트림, 파일, 마이크 등)를 처리하여 재생(play)하거나 녹음(record)하는 과정을 안드로이드의 오디오 프레임워크와 관련 용어 및 경로를 통해 다음과 같이 정리할 수 있습니다.

1. 오디오 입력 및 처리 경로

  • 입력 소스:
    • 마이크: AudioRecord를 통해 마이크 입력을 캡처.
    • 파일: MediaPlayer 또는 ExoPlayer로 로컬/원격 오디오 파일 처리.
    • 스트림: AudioTrack으로 스트리밍 데이터 처리(예: 네트워크 스트림).
    • 기타: 블루투스, USB 오디오 등 외부 입력 장치(AudioSource로 정의).
  • 캡처 및 입력 처리:
    • AudioRecord를 사용하여 PCM 데이터를 캡처.
    • 입력 소스는 AudioSource로 지정(예: MIC, VOICE_COMMUNICATION).
    • 오디오 데이터는 AudioFormat(샘플레이트, 채널, 비트 깊이 등)으로 정의.

2. 오디오 재생 경로

  • 재생:
    • MediaPlayer: 고수준 API로 파일/스트림 재생(예: MP3, AAC).
    • ExoPlayer: 스트리밍 및 커스텀 재생에 적합.
    • AudioTrack: 저수준 PCM 데이터 직접 재생.
    • 출력은 AudioSink(스피커, 헤드폰, 블루투스 등)로 전달.
  • 오디오 출력 경로:
    • Audio HAL(Hardware Abstraction Layer): 안드로이드 오디오 프레임워크와 하드웨어 간 인터페이스.
    • AudioFlinger: 오디오 스트림을 믹싱하고 출력 장치로 라우팅.
    • Output Stream: AudioTrack에서 생성된 스트림은 AudioFlinger를 거쳐 하드웨어(스피커, 블루투스 등)로 전달.

3. 주요 안드로이드 오디오 관련 용어

  • AudioManager: 오디오 모드(전화, 음악 등) 및 볼륨 제어.
  • AudioAttributes: 오디오 스트림의 특성 정의(예: 음악, 알림).
  • AudioFocus: 앱 간 오디오 포커스 관리(예: 전화 통화 시 음악 일시 중지).
  • AudioDeviceInfo: 연결된 오디오 장치 정보(스피커, 블루투스 등).
  • OpenSL ES / AAudio: 고성능 저지연 오디오 처리(프로 오디오 앱용).
  • Oboe: C++ 기반 오디오 라이브러리(AAudio와 OpenSL ES 추상화).

4. 오디오 처리 흐름

  • 입력: 마이크/파일/스트림 → AudioRecord 또는 디코더 → PCM 데이터.
  • 처리: AudioFlinger에서 믹싱 및 효과 적용(예: 이퀄라이저, 리버브).
  • 출력: PCM 데이터 → AudioSink(스피커, 헤드셋 등) → 하드웨어.

5. 핵심 경로 요약

  • 녹음: AudioSource → AudioRecord → PCM → 앱/저장소.
  • 재생: 파일/스트림 → MediaPlayer/AudioTrack → AudioFlinger → AudioSink.
  • 실시간 처리: AAudio/Oboe로 저지연 입력/출력(예: 오디오 앱, 게임).

6. 고려사항

  • 지연 시간(Latency): AAudio 또는 Oboe로 최적화.
  • 오디오 포커스: AudioManager.requestAudioFocus로 관리.
  • 호환성: 안드로이드 버전별 API 차이(예: AAudio는 API 26+).


Comments

Popular posts from this blog

TinyZero 따라하기 (1)

TinyZero 따라하기 (3)

TinyZero 따라하기 (2)