오디오 준비

오디오 준비는 기기의 오디오 앰프 회로가 완전히 켜져 정상 작동 상태가 되는 데 걸리는 시간입니다. 오디오 준비 시간의 주요 원인은 전원 관리와 회로를 안정화하는 'de-pop' 로직입니다.

이 문서에서는 오디오 준비 시간을 측정하는 방법과 준비 시간을 줄일 수 있는 방법을 설명합니다.

출력 준비 측정

AudioFlinger의 FastMixer 스레드는 자동으로 출력 준비를 측정하여 이를 dumpsys media.audio_flinger 명령어 출력의 일부로 보고합니다. 준비 시 FastMixer는 두 write() 간 시간이 예상치에 도달할 때까지 write()를 반복 호출합니다. FastMixer는 하드웨어 추상화 계층 (HAL) write()가 안정화에 필요한 시간을 파악하여 오디오 준비를 결정합니다.

오디오 준비를 측정하려면 부팅 후 서로 다른 시점에 내장 스피커와 유선 헤드폰과 관련하여 다음 단계를 따릅니다. 일반적으로 준비 시간은 출력 기기마다 다르며 기기 부팅 직후 소요되는 시간을 가리킵니다.

  1. FastMixer가 사용 설정되었는지 확인합니다.
  2. 기기에서 설정 > 소리 > 터치 소리를 선택하여 터치음을 사용 설정합니다.
  3. 오디오가 3초 이상 꺼지도록 합니다. AudioFlinger에서는 3초가 소요되지만, 하드웨어에는 3초 이상 소요되는 자체 전원 로직이 있을 수 있기 때문에 5초 이상으로 하는 것이 더 좋습니다.
  4. 홈을 누르면 클릭 소리가 들립니다.
  5. 측정된 준비 시간을 수신하려면 다음 명령어를 실행합니다.
        adb shell dumpsys media.audio_flinger | grep measuredWarmup
        

    다음과 같이 출력이 표시됩니다.

        sampleRate=44100 frameCount=256 measuredWarmup=X ms, warmupCycles=X
        

    measuredWarmup=X는 첫 HAL write() 세트가 완료되는 데 X밀리초가 소요되는지 알려줍니다.

    warmupCycles=Xwrite() 실행 시간이 예상치와 일치할 때까지 HAL 쓰기 요청이 몇 번 발생했는지 알려줍니다.

  6. 측정값 5개를 확인하고 평균값과 함께 기록합니다. 모든 값이 비슷하지 않다면 측정값이 잘못되었을 가능성이 큽니다. 예를 들어 오디오가 꺼진 후 충분히 기다리지 않으면 준비 시간이 평균값보다 짧아집니다.

입력 준비 측정

현재 오디오 입력 준비를 측정하는 도구는 제공되지 않습니다. 하지만 startRecording()이 반환되는 데 필요한 시간을 관찰하여 입력 준비 시간을 예측할 수 있습니다.

준비 시간 줄이기

준비 시간은 일반적으로 다음 방법을 함께 사용하여 줄일 수 있습니다.

  • 올바른 회로 설계
  • 커널 기기 드라이버의 정확한 시간 지연
  • 순차적 진행이 아닌 동시에 진행되는 독립된 준비 작업 실행
  • 회로 전원을 켜 두거나 클록을 재구성하지 않음(유휴 전력 소비 증가)
  • 계산된 매개변수 캐싱

하지만 최적화가 과도하지 않은지 주의해야 합니다. 짧은 준비 시간과 전원 전환 시도 부족의 균형을 맞춰야 할 수도 있습니다.