Android 오디오 아키텍처 Android 오디오 스택 AudioFlinger 리샘플링

Android 오디오 스택: 왜 음악이 리샘플링되는가

Android가 오디오를 처리하는 방법에 대한 심층 분석 — 앱에서 스피커까지. AudioFlinger가 음악을 리샘플링하는 이유와 대처 방법을 알아보세요.

· 12 분 소요

Android가 오디오를 재생하는 방법

Android 스마트폰이 내는 모든 소리는 귀에 도달하기 전에 같은 오디오 파이프라인을 통과합니다:

앱 -> AudioTrack API -> AudioFlinger -> HAL -> 하드웨어

AudioFlinger는 Android 오디오의 교통 관제사입니다. 시스템의 모든 앱에서 오디오 스트림을 가져와 믹스하고 올바른 출력 기기로 라우팅합니다.

AudioFlinger 문제

AudioFlinger는 고정 샘플레이트(대부분의 기기에서 48 kHz)로 작동합니다. 기기의 모든 오디오 스트림이 이 레이트로 리샘플링됩니다:

  • 96 kHz 하이레졸루션 FLAC? 48 kHz로 다운샘플링.
  • 48 kHz 기기에서 44.1 kHz CD 리핑? 48 kHz로 업샘플링.
  • DSD64를 176.4 kHz PCM으로 변환? 48 kHz로 다운샘플링.

USB DAC 바이패스

USB DAC를 연결하면 AudioFlinger는 리샘플러가 아닌 패스스루로 작동할 수 있습니다. 하지만 Android는 진정한 배타적 모드를 제공하지 않습니다. AudioFlinger는 항상 경로에 존재합니다.

Bluetooth: 또 다른 변환 레이어

모든 Bluetooth 코덱은 손실입니다. 예외 없습니다. 자세한 비교는 Bluetooth 오디오 코덱 가이드를 참조하세요.

Echobox가 Android 오디오 스택을 다루는 방법

Flutter(UI), Rust(오디오 오케스트레이션), Zig(실시간 출력)의 3계층 아키텍처로 설계했습니다.

지능형 샘플레이트 처리

기기의 네이티브 레이트를 탐색하고, 그 레이트를 요청하고, 부여된 레이트를 확인한 다음, 256탭 FIR 필터를 사용한 고품질 sinc 보간 리샘플러로 지능적으로 리샘플링합니다. 핵심 이점은 이중 리샘플링 방지입니다.

비트퍼펙트 모드

트랙의 네이티브 샘플레이트를 요청하고, 전체 DSP 체인을 우회하며, DAC가 요청된 레이트를 지원할 수 없으면 명확한 오류로 재생이 실패합니다.

경로 인식 동작

Bluetooth가 감지되면 비트퍼펙트 모드가 자동 비활성화됩니다. USB DAC가 연결되면 전체 샘플레이트 협상과 비트퍼펙트 옵션이 사용 가능해집니다. UPnP/DLNA 스트리밍에서는 기기 기능을 감지하고 필요시 트랜스코딩하는 추가 인텔리전스 레이어를 더합니다.

Android 오디오의 현실

  • AudioFlinger가 병목입니다.
  • USB DAC가 Android에서 품질을 위한 최선의 경로를 제공합니다.
  • Android는 진정한 배타적 모드를 제공하지 않습니다.
  • Bluetooth는 모든 것 위에 또 다른 손실 변환을 추가합니다.
  • Echobox는 Rust/Zig 아키텍처로 대부분의 앱이 가지지 못하는 오디오 파이프라인 제어를 제공합니다.

Android 이외의 플랫폼 가용성은 로드맵을 확인하세요. 오디오파일 등급의 플레이어에 대해서는 오디오파일 뮤직 플레이어 가이드를 참조하세요.


관련 가이드


Echobox 사용해 보기

이 가이드에서 설명하는 내용을 직접 경험하세요 — Android에서의 정밀 재생.

마일스톤마다 이메일 한 통. 노이즈 없이.