Bluetooth Low Energy Audio(LEA)により、バッテリー寿命を損なうことなくハイファイ音声を受信し、さまざまなユースケースをシームレスに切り替えることができます。Android 13(API レベル 33)には、LEA のサポートが組み込まれています。
LEA ソースデバイスのマーケット シェアが拡大するまでは、ほとんどの LEA ヘッドセットがデュアルモードになります。ユーザーは、デュアルモード ヘッドセットで両方のトランスポートをペア設定してセットアップできる必要があります。
ユースケース
LEA は、次のようなユースケースで統合できます。
音声の共有: 複数の音声ストリームを 1 つ以上の音声シンク デバイスに同時に共有できます。ソースデバイスと接続済みデバイス間でオーディオが同期されます。
音声のブロードキャスト: ユーザーは、友だちや家族に音声をブロードキャストできるほか、情報発信、エンターテイメント、ユーザー補助のための公開ブロードキャストに接続することもできます。
LC3 オーディオ コーデックのサポート: これはデフォルトのオーディオ コーデックであり、A2DP(メディア)で使用される SBC コーデックと、HFP(音声)で使用される mSBC コーデックに代わるものです。LC3 は、より効率的で再構成可能であり、品質も優れています。
音声サンプリングの改善: ヘッドセットでマイクを使用する際に、高音質の出力を維持できるようになりました。Bluetooth マイクを使用すると、Bluetooth クラシックの音質が低下します。BLE Audio では、入力と出力のサンプリングは 32 kHz に達します。
ステレオ マイク: ヒアラブルは、ステレオ マイクで音声を録音し、空間オーディオを強化できます。
Hearing Aid Profile(HAP)のサポート: HAP は、従来の ASHA プロトコルよりもアクセシビリティと使いやすさが向上しています。補聴器を使用して電話や VoIP アプリケーションを利用できます。
拡張属性プロトコル(EATT)のサポート: EATT を使用すると、デベロッパーはペア設定されたヒアラブルに複数のコマンドを一度に送信できます。
重要なシナリオ
ユースケースには、主に次の 4 つのカテゴリがあります。
会話型: 低レイテンシの通信ルーティングを必要とするダイヤル アプリや VoIP アプリは、高品質の音声とバッテリー使用量の削減を実現します。
ゲーム: マイクと高音質再生を同時に使用できるため、ゲームで高品質の音声をヒアラブルにストリーミングできます。ゲームアプリは、ゲームが Bluetooth マイクを使用可能な状態にすると、BLE 音声入力にアクセスできます。その後、プレーヤーがピア プレーヤーとのライブ会話を開始すると、ゲームアプリは遅延なくマイクデータを使用できます。
メディア: メディア アプリケーションは、オーディオ マネージャーの優先デバイスを設定できます。ユーザーは、システムの設定で優先デバイスを変更することで、この設定をオーバーライドできます。
ユーザー補助: BLE Audio をサポートする補聴器でマイクを使用できるようになりました。これにより、通話中に補聴器を継続して使用できます。
BLE オーディオの API とメソッド
BLE Audio hearables をサポートするには、次の API とメソッドが必要です。
AudioManager
setCommunicationDevice()は、音声通話やビデオ通話などのコミュニケーション ユースケースで使用するオーディオ機器を選択します。このメソッドは、音声チャット アプリケーションやビデオチャット アプリケーションで、プラットフォームによってデフォルトで選択されたものとは異なるオーディオ機器を選択するために使用できます。この API は、非推奨の APIstartBluetoothSco()、stopBluetoothSco()、setSpeakerphoneOn()に代わるものです。clearCommunicationDevice()は、アプリが通話またはセッションを終了した後に呼び出され、ユーザーがさまざまなアプリ間を移動する際に優れたエクスペリエンスを確保するのに役立ちます。
BluetoothProfile
BluetoothLeAudioは、プロキシ オブジェクトを介して Bluetooth サービスを制御します。
Telecom InCallService
InCallService#requestCallEndpointChange()は、非推奨のInCallService.setAudioRoute()API とInCallService.requestBluetoothAudio()API に代わるもので、アプリが特定のCallEndpointへのオーディオ ルーティングをリクエストできるようにします。クライアントは、変更をリクエストするときに独自のCallEndpointを定義しないでください。代わりに、新しいエンドポイントはInCallService.onAvailableCallEndpointsChanged(java.util.List)によって提供される有効なエンドポイントのいずれかである必要があります。CallEndpoint.TYPE_BLUETOOTHは、Bluetooth 経由で音声ストリームを転送します。- 前述の
InCallServiceAPI は、Android スマートフォンのデフォルトの電話アプリや、音声ルーティングに影響を与える可能性のあるウェアラブル、自動車、その他の Bluetooth デバイスなどの他の通話サーフェスで使用されるように設計されています。
Telecom CallControl
- 新しい
CallControlクラスは、VoIP アプリケーション専用にConnectionとConnectionServiceに代わるものとして API レベル 34 で導入されました。 CallControl.requestCallEndpointChange()はCallEndpointの変更もリクエストします。この API は、非推奨のConnection.requestBluetoothAudio()API とConnection.setAudioRoute()API に代わるものです。- 更新された Telecom プラットフォーム API に加えて、音声通話アプリやビデオ通話アプリをビルドする際には、Telecom Jetpack ライブラリを強く推奨します。このライブラリは、統合プロセスを大幅に簡素化し、すべての Android サーフェスで VoIP 通話を改善します。
オーディオ デバイス情報
AudioDeviceInfo.TYPE_BLE_HEADSETは、オーディオ機器タイプを LEA デバイスとして記述します。ヒアラブル デバイスが LEA デバイスかどうかを識別するために使用されます。
音声レコーダー
setPreferredDevice()は、使用する音声ルーティングの優先デバイスを設定します。ユーザーはシステム設定でこの設定をオーバーライドできます。
Bluetooth アダプター
isLeAudioSupported(): デバイスのハードウェアが LE Audio をサポートしているかどうかを示す@BluetoothStatusCodes定数(FEATURE_SUPPORTED、FEATURE_NOT_SUPPORTED、またはエラーコード)を返します。isLeAudioBroadcastSourceSupported(): デバイスのハードウェアが LE Audio ブロードキャスト ソースをサポートしているかどうかを示す@BluetoothStatusCodes定数(FEATURE_SUPPORTED、FEATURE_NOT_SUPPORTED、またはエラーコード)を返します。
ユースケースに基づくガイド
以下に、特定のユースケースに基づく LEA の実装に関するガイドラインを示します。
音声通信アプリケーション
音声通信アプリケーションは、状態を自己管理するか、音声ルーティングと状態ロジックを自動的に行う Telecom API を使用して、音声ルーティングとデバイスの状態を管理できます。
セルフマネージド: 現在
startBluetoothSco()、stopBluetoothSco()、setSpeakerphoneOn()を使用しているアプリ、またはオーディオ ルーティングの状態をセルフマネージドしたいアプリの場合は、オーディオ マネージャーのセルフマネージド呼び出しガイドに沿って操作してください。管理対象: Telecom Jetpack ライブラリまたは Telecom プラットフォーム API を使用して、音声通話またはビデオ通話のアプリケーションを作成します。
この 2 つのソリューションにより、オーディオ ルーティングをすばやく簡単に制御し、Bluetooth デバイスを切り替えることができます。詳しくは、通信事業者が管理する通話に関するガイドをご覧ください。
音声録音アプリ
- メディア レコーダー: メディア レコーダーを使用して音声を録音する際に、Bluetooth ウェアラブルが LEA をサポートしている場合はステレオで録音できるようになりました。音声録音ガイドをご覧ください。
LE Audio(LEA)ヘッドセットの推奨事項
LEA ヘッドセットのリリースが進むにつれて、実際のテストでユーザー エクスペリエンスを低下させる問題が発見されました。この仕様では、これらの問題のすべてを網羅していません。次の表に、Android ユーザーのエンドツーエンドのエクスペリエンスを向上させるために LEA ヘッドセット メーカーが従うべき推奨事項の一覧を示します。
| 説明 | コンテキスト |
|---|---|
デュアルモード ヘッドセットの Cross Transport Key Derivation(CTKD)をサポートします。
|
LEA ソースデバイスのマーケット シェアが拡大するまで、ほとんどの新しい LEA ヘッドセットはデュアルモードになります。ユーザーがデュアルモード ヘッドセットをシームレスにペア設定し、両方のトランスポートを設定できるようにすることが重要です。これは Google ファスト ペアリングでも重要です。 |
|
LEA ヘッドセットをソースデバイスに確実に再接続したい場合は、ターゲット アナウンス(TA)をサポートします。 LE オーディオ イヤホンは、TA を使用して、セントラル デバイスからの着信接続をリクエストする必要があります。 今後の BT SIG に追加されます。 |
電話またはヘッドセットのいずれかで接続を開始できる BR/EDR のページング モデルとは異なり、LEA の接続は中央デバイスで開始する必要があります。現在、多くのヘッドセットは TA を使用していません。つまり、中央デバイスは、許可リストに追加しないと周辺機器に再接続できない可能性があります。ただし、許可リストの回避策により、ヘッドセットが別のセントラル デバイスに接続できなくなる可能性があります。そのため、マルチポイント接続を中断する可能性のある回避策なしで、中央デバイスが確実に再接続できるように、LEA ヘッドセットが TA を適切にサポートすることが重要です。 |
デュアルモード イヤホンの検出を最適化
|
これにより、デュアルモード LEA イヤホンが Bluetooth 設定に重複して表示されるのを防ぎます。重複して表示されると、ユーザーが混乱し、LEA ペアリング エクスペリエンスが損なわれる可能性があります。 動的リーダー選出は、増分ペア設定されるデュアルモード デバイスで特に重要です。たとえば、初回ペア設定時にイヤホンが 1 つしか利用できない場合は、デュアルモード デバイスとして認識されるようにします。ユーザーが後で 2 つ目のイヤホンとペア設定する場合、LE コンポーネントとのペア設定のみが必要で、CSIP によって Android でグループ化されます。 ペア設定中は、BR/EDR コンポーネントがすでにデバイスの公開アドレスを付近のデバイスに公開しているため、ID アドレスが推奨されます。 |
| 拡張属性プロトコル(EATT)をサポートします。 | ペア設定と接続のレイテンシが短縮されます。 |
| 堅牢な GATT キャッシュ保存をサポートします。 | 接続のレイテンシが短縮されます(特に TWS イヤホン)。 |
| 接続のサブレートをサポート。 | パケット スケジューリングの柔軟性が向上し、バッテリーを節約できる可能性があります。 |
| 再生とキャプチャの両方の前処理と後処理で、信号処理パイプラインが 16、24、32、48 kHz で動作し、より高い周波数をサポートできるようにしてください。 | LEA 通話または VoIP キャプチャ パスとメディア再生でサポートされる高いサンプリング レートを活用します。 |
| LE Power Control をサポート | 電力管理の改善 |
コンテキスト タイプのサポート
| 説明 | コンテキスト |
|---|---|
| ヘッドセットが特定のコンテキスト タイプを明示的にサポートしていない場合を除き、割り当て番号 6.12.3 で指定されているすべてのコンテキスト タイプを使用します。 | たとえば、コンテキスト タイプ「Game」がサポートされていない場合、Android はゲーム音を送信します。特に、「Unspecified」コンテキスト タイプは「任意のコンテキスト タイプ」を意味するものではなく、サポートされていないコンテキスト タイプをカバーするものでもないことに注意してください。 |
セントラル デバイスが周辺機器の ASCS とやり取りする場合、周辺機器はセントラル デバイスの MCS と TBS に接続する必要があります。 セントラル デバイスは、A2DP または HFP の使用にフォールバックする可能性があるため、ストリーミング ルートとして LE Audio を常に使用するとは限りません。ペリフェラル デバイスは、セントラル デバイスがストリーミングに LE Audio を使用するかどうかを示すものとして ASCS のインタラクションを使用できます。 ASCS のインタラクションの例としては、読み取り、書き込み、通知の登録などがあります。 |