USB 기기에서 기본 믹서 속성

Android 14는 앱이 USB 오디오 재생에 기본 믹서 속성을 쿼리하고 구성하는 데 사용할 수 있는 개발자 API를 제공합니다. 이러한 기본 믹서 속성은 앱이 오디오 형식, 채널 마스크, 샘플링 레이트, 믹서 동작을 설정할 수 있도록 하여 USB 오디오 재생 환경을 개선합니다. 지원되는 USB 기기에서 기본 믹서 API를 사용하면 지연 시간이 짧은 오디오 재생과 고해상도 오디오 콘텐츠를 얻을 수 있습니다.

이 기능은 USB 기기용 선택적인 비트퍼펙트 재생 믹서 동작도 지원합니다. 비트퍼펙트 모드를 사용하면 호환되는 디지털-아날로그 변환기(DAC)에서 마스터 품질 인증(MQA) 및 디렉트 스트림 디지털(DSD) 형식을 재생할 수 있습니다.

인터페이스

오디오 정책 관리자는 프레임워크에서 믹서 속성을 처리합니다. AudioMixerAttributes 클래스는 믹서의 속성을 나타냅니다. AudioMixerAttributes 클래스에는 믹서의 오디오 데이터 형식, 채널 마스크, 샘플링 레이트를 설명하는 AudioFormat 객체가 포함되어 있습니다. 기본적으로 프레임워크는 모든 오디오 소스를 믹스하고 볼륨 컨트롤 및 효과를 적용하는 믹서 동작을 결정합니다.

믹서 동작이 BIT_PERFECT 모드를 사용하는 경우 시스템은 오디오 프레임워크, HAL, 선택적으로 디지털 신호 프로세서(DSP)를 통해 오디오 콘텐츠를 수정 없이 API에서 USB 기기로 전송합니다. BIT_PERFECT 모드는 볼륨 조정 또는 믹싱이 데이터의 의미를 파괴할 수 있는 MQA 또는 DSD와 같은 인코딩된 형식을 지원합니다.

앱이 믹서 속성을 구성할 때 프레임워크는 필요한 경우 새 속성으로 출력 스트림을 다시 엽니다. 다음 그림은 믹서 속성이 설정되는 경우 앱과 프레임워크, HAL 간의 인터페이스를 보여줍니다.

preferred-mixer-attr

그림 1. 앱과 프레임워크, HAL 간의 인터페이스

구현

Android 14에서는 BIT_PERFECT 속성을 제외한 USB 오디오용 기본 믹서 속성을 구현해야 합니다.

기본 믹서 속성

기본 믹서 속성을 지원하려면 공급업체는 다음과 같이 USB 기기를 동적 믹스 포트로 라우팅하는 것을 지원해야 합니다.

  1. 동적 믹스 포트를 usb_audio_policy_configuration.xml에서 정의합니다.

  2. 오디오 정책 구성에서 또는 getAudioPortsgetAudioRoutes AIDL 메서드에서 USB 기기를 동적 믹스 포트로 라우팅하는 기능을 선언합니다.

hardware/libhardware/modules/usbaudio에서 USB 오디오 HAL의 참조 구현을 참고하세요. frameworks/av/services/audiopolicy/config/usb_audio_policy_configuration.xml에서 동적 믹스 포트 예를 확인하세요.

비트퍼펙트 재생 속성

비트퍼펙트 재생 속성은 선택사항이며 오디오 HAL의 AIDL 구현에서만 지원됩니다. 비트퍼펙트 재생을 지원하려면 공급업체는 USB 기기로 라우팅할 수 있는 동적 믹스 포트에 비트퍼펙트 출력 플래그 AUDIO_OUTPUT_FLAG_BIT_PERFECT를 추가해야 합니다.

다음 코드 샘플은 usb_audio_policy_configuration.xml에서 AUDIO_OUTPUT_FLAG_BIT_PERFECT를 사용하는 방법을 보여줍니다.

<module name="usb" halVersion="2.0">
    <mixPorts>
        <mixPort name="hifi_output"
                 role="source" flags="AUDIO_OUTPUT_FLAG_BIT_PERFECT">
        </mixPort>
    </mixPorts>
    <devicePorts>
        <devicePort tagName="USB Device Out"
                    type="AUDIO_DEVICE_OUT_USB_DEVICE" role="sink">
        </devicePort>
    </devicePorts>
    <routes>
        <route type="mix" sink="USB Device Out"
               sources="hifi_output"/>
    </routes>
</module>

비트퍼펙트 재생 속성이 지정되면 HAL은 오디오 스트림이 수정 없이 USB 기기에 전송되도록 해야 합니다. 즉, 오디오 스트림에 볼륨 조정, 샘플링 레이트 변환 또는 오디오 처리 효과가 없어야 하고 DSP에서 믹스되면 안 됩니다. 이 경우 프레임워크가 소프트웨어 볼륨 컨트롤을 제공하지 않으므로 하드웨어가 볼륨을 제어합니다.

유효성 검사

PreferredMixerAttributesTestActivity.java에서 CTS 테스트를 실행하여 USB 기기용 기본 믹서 속성 지원을 검증하세요.

BIT_PERFECT 속성의 구현을 검증하려면 펄스 코드 변조(PCM) 오디오 형식을 통해 MQA 및 DSD를 지원하는 USB DAC를 사용합니다.