Android Audio (6) : 통합 데이터 흐름도 (녹음 + 재생)

 

3. 통합 데이터 흐름도 (녹음 + 재생)

아래는 녹음과 재생의 전체 흐름을 통합한 텍스트 기반 다이어그램입니다. 데이터의 이동 방향과 주요 컴포넌트를 보여줍니다.



흐름 설명

  • 녹음:
    1. 마이크에서 아날로그 신호 → Audio HAL → PCM 데이터.
    2. AudioFlinger가 PCM을 AudioRecord로 전달.
    3. 앱에서 PCM 처리(인코딩, 저장, 스트리밍).
  • 재생:
    1. 파일/스트림 → MediaPlayer/ExoPlayer/AudioTrack → PCM 데이터.
    2. AudioFlinger가 PCM을 믹싱 → Audio HAL.
    3. AudioSink로 출력(스피커, 헤드셋).
  • 공통:
    • AudioFlinger: 입력/출력 스트림 믹싱 및 라우팅.
    • Audio HAL: 하드웨어와 소프트웨어 간 데이터 전달.
    • AudioManager: 오디오 포커스, 볼륨, 장치 관리.


4. 주요 컴포넌트와 역할

  • AudioSource: 입력 소스 선택(마이크, 블루투스 등).
  • AudioRecord: PCM 데이터 캡처(녹음).
  • MediaPlayer/ExoPlayer: 파일/스트림 재생.
  • AudioTrack: PCM 데이터 직접 재생.
  • AAudio/Oboe: 저지연 오디오 처리.
  • AudioFlinger: 오디오 스트림 믹싱 및 라우팅.
  • Audio HAL: 하드웨어 인터페이스.
  • AudioManager: 오디오 제어(볼륨, 포커스, 장치).
  • AudioEffect: 오디오 효과(이퀄라이저, 리버브).
  • AudioAttributes: 스트림 용도 정의.
  • AudioDeviceInfo: 입출력 장치 정보.


5. 추가 고려사항

  • 지연 시간 최적화:
    • AAudio/Oboe 사용, 버퍼 크기 최소화(getMinBufferSize()).
    • 예: 실시간 오디오 앱(게임, VOIP)에서 10ms 이하 지연 목표.
  • 기기 호환성:
    • 안드로이드 버전별 API 차이(AAudio: API 26+).
    • 하드웨어 코덱/샘플레이트 지원 확인.
  • 에러 처리:
    • IllegalStateException, SecurityException 처리.
    • 네트워크 스트리밍 시 연결 끊김 대응.
  • 멀티태스킹:
    • AudioFocus로 앱 간 오디오 충돌 관리.
    • 백그라운드 재생/녹음 시 ForegroundService 사용.


6. 예시 시나리오

  • 녹음: 마이크로 입력 → AudioRecord로 PCM 캡처 → MediaCodec으로 AAC 인코딩 → MediaMuxer로 MP4 저장.
  • 재생: MP3 파일 → ExoPlayer로 디코딩 → AudioFlinger로 믹싱 → 블루투스 헤드셋 출력.

Comments

Popular posts from this blog

TinyZero 따라하기 (1)

TinyZero 따라하기 (3)

TinyZero 따라하기 (2)