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 間のインターフェースを示しています。
図 1. アプリ、フレームワーク、HAL 間のインターフェース
実装
USB オーディオでの BIT_PERFECT
属性以外の優先されるミキサー属性の実装は Android 14 では必須です。
優先されるミキサー属性
優先されるミキサー属性をサポートするには、ベンダーは USB デバイスの動的なミックスポートへのルーティングに対応する必要があります。
usb_audio_policy_configuration.xml
で動的なミックスポートを定義します。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 を使用します。