Android Audio (6) : 통합 데이터 흐름도 (녹음 + 재생)
3. 통합 데이터 흐름도 (녹음 + 재생)
아래는 녹음과 재생의 전체 흐름을 통합한 텍스트 기반 다이어그램입니다. 데이터의 이동 방향과 주요 컴포넌트를 보여줍니다.
흐름 설명
- 녹음:
- 마이크에서 아날로그 신호 → Audio HAL → PCM 데이터.
- AudioFlinger가 PCM을 AudioRecord로 전달.
- 앱에서 PCM 처리(인코딩, 저장, 스트리밍).
- 재생:
- 파일/스트림 → MediaPlayer/ExoPlayer/AudioTrack → PCM 데이터.
- AudioFlinger가 PCM을 믹싱 → Audio HAL.
- 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
Post a Comment