USB デバイスで優先されるミキサー属性

Android 14 には、アプリで USB オーディオ再生の優先されるミキサー属性のクエリと設定に使用できるデベロッパー向け API が用意されています。この優先されるミキサー属性を使うと、アプリでオーディオ形式、チャンネル マスク、サンプルレート、ミキサー動作を設定できるようになり、USB オーディオ再生エクスペリエンスが向上します。サポートされている USB デバイスで優先されるミキサー API を使用することによって、ユーザーは低レイテンシのオーディオ再生と高解像度のオーディオ コンテンツにアクセスできます。

また、この機能は USB デバイスでの最適なビットパーフェクトの再生ミキサー動作もサポートしています。ビットパーフェクト モードでは、互換性のあるデジタル-アナログ変換器(DAC)での Master Quality Authenticated(MQA)形式とダイレクト ストリーム デジタル(DSD)形式の再生が可能になります。

インターフェース

オーディオ ポリシー マネージャーがフレームワークのミキサー属性を処理します。AudioMixerAttributes クラスはミキサーの属性を表します。AudioMixerAttributes クラスに含まれる AudioFormat オブジェクトは、ミキサーのオーディオ データ形式、チャンネル マスク、サンプルレートを示します。デフォルトでは、フレームワークがミキサー動作を決定し、すべてのオーディオ ソースをミックスして、音量調節とエフェクトを適用します。

ミキサー動作で BIT_PERFECT モードを使用すると、システムはオーディオ フレームワーク、HAL、必要に応じてデジタル シグナル プロセッサ(DSP)を介して、API から USB デバイスにオーディオ コンテンツを調整することなく送信します。BIT_PERFECT モードは MQA や DSD などのエンコードされた形式をサポートしています。このモードでは音量調整またはミキシングはデータの意図を損なう可能性があります。

アプリでミキサー属性を設定すると、フレームワークは必要に応じて出力ストリームを新しい属性で再度開きます。次の図はミキサー属性が設定されたときのアプリ、フレームワーク、HAL 間のインターフェースを示しています。

preferred-mixer-attr

図 1. アプリ、フレームワーク、HAL 間のインターフェース

実装

USB オーディオでの BIT_PERFECT 属性以外の優先されるミキサー属性の実装は Android 14 では必須です。

優先されるミキサー属性

優先されるミキサー属性をサポートするには、ベンダーは USB デバイスの動的なミックスポートへのルーティングに対応する必要があります。

  1. usb_audio_policy_configuration.xml で動的なミックスポートを定義します。

  2. USB デバイスの動的なミックスポートへのルーティング機能をオーディオ ポリシー構成または getAudioPorts および getAudioRoutes AIDL メソッドで宣言します。

hardware/libhardware/modules/usbaudio の下にある USB オーディオ HAL のリファレンス実装をご覧ください。frameworks/av/services/audiopolicy/config/usb_audio_policy_configuration.xml で動的なミックスポートの例をご確認ください。

ビットパーフェクト再生属性

ビットパーフェクト再生属性はオプションで、オーディオ HAL の AIDL 実装でのみサポートされています。ビットパーフェクト再生をサポートするには、ベンダーはビットパーフェクト出力フラグの AUDIO_OUTPUT_FLAG_BIT_PERFECT を USB デバイスにルーティングされる動的なミックスポートに追加する必要があります。

次のコードサンプルは 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 を使用します。