次の方法で共有


カーネル ストリーミングに関する考慮事項

この記事では、Bluetooth バイパス オーディオ ストリーミングに関連するカーネル ストリーミングの要件と特別な考慮事項について説明します。

オーディオ ドライバーは、"プル モード" を含む WaveRT ポート ドライバーを完全にサポートする必要があります。 詳細については、「 WaveRT ポート ドライバーの概要」を参照してください。 同期接続指向 (SCO) バイパス出力用のハードウェア オーディオ エンジンを実装する必要はありませんが、そうしても問題はありません。

形式のサポートに関する Windows ロゴの要件には、Bluetoothの例外が含まれます。

オーディオ ドライバーは、サイドバンド ハードウェア (通常は 8kHz モノラル オーディオ ストリーミング) を介して可能な形式をサポートする必要があります。

トポロジ

すべてのBluetooth Hands-Free デバイスは、キャプチャとレンダリングの両方をサポートします。 オーディオ ドライバーは、レンダリングとキャプチャの両方をサポートするために、次の図に示すように、Hands-Free デバイスのカーネル ストリーミング (KS) トポロジを公開する必要があります。

Bluetooth Hands-Free デバイスでのレンダリングとキャプチャをサポートするオーディオ ドライバーの KS トポロジを示す図。

手記: オーディオ ドライバー開発者は、キャプチャ パスとレンダー パスの両方に対して 1 つのフィルターを実装するか、個別のフィルターを実装するかを選択できます。 ただし、HFP デバイスでは、GUID_DEVINTERFACE_BLUETOOTH_HFP_SCO_HCIBYPASS デバイス インターフェイスで 1 つのファイル オブジェクトのみが許可されます。 したがって、2 つのフィルターを使用する設計では、両方のフィルターが 1 つのファイル オブジェクトを共有できるようにする必要があります。

DAC ノードと ADC ノードはアナログ/デジタル変換を表しますが、KS プロパティはサポートされていません。

ボリューム ノードは SETVOLUME および GETVOLUMESTATUSUPDATE IOCTL を HFP ドライバーに送信することで、KSPROPERTY_AUDIO_VOLUMELEVELとKSEVENT_CONTROL_CHANGEをサポートします。

ボリューム ノードは次のように実装する必要があります。

  • Bluetooth ヘッドセットがボリューム制御をサポートしている場合、オーディオ ドライバーは KS トポロジにボリューム ノードを含める必要があります。 オーディオ ドライバーのボリューム プロパティ ハンドラーは、ボリュームを処理するために、上記の IOCLT を Bluetooth HFP ドライバーに送信します。
  • Bluetooth ヘッドセットがハードウェア ボリュームを実装せず、コーデック (または DSP) にハードウェア ボリュームがある場合、オーディオ ドライバーはコーデック (または DSP) のボリューム コントロールを処理する必要があります。
  • Bluetooth ヘッドセットもオーディオ デバイスにもハードウェア ボリューム コントロールがない場合は、ボリューム ノードを表示する必要はありません。Windows はソフトウェア ボリューム コントロール ノードを挿入します。
  • ミュート ノードは省略可能です。 オーディオ ドライバーは、DSP またはオーディオ コーデックが、Bluetooth コントローラーに渡す前にバイパス PCM 信号をミュートする機能を提供する場合にのみ、ミュート ノードを実装する必要があります。 ミュート ノードでは 、KSPROPERTY_AUDIO_MUTEがサポートされます。

プロパティ要求

オーディオ ドライバーは、次の KS プロパティを使用して、オーディオ パス内のオーディオ ジャックまたはジャックに関する情報を取得します。 オーディオ ドライバーは、適切なプロパティ要求を使用して、オーディオ パス内の任意のBluetoothオーディオ デバイスへの接続を確立または切断することもできます。

KSPROPERTY_JACK_DESCRIPTION

このプロパティは、 KSJACK_DESCRIPTION 構造体を返します。 オーディオ ドライバーは、次のように KSPROPERTY_JACK_DESCRIPTION フィールドを設定する必要があります。

  • チャネルマッピング = KSAUDIO_SPEAKER_MONO
  • カラー = 0
  • ConnectionType = eConnTypeOtherDigital
  • GeoLocation = eGeoLocNotApplicable
  • GenLocation = eGenLocOther
  • PortConnection = ePortConnUnknown # ポート接続が不明な状態を示します
  • IsConnected = <現在の接続状態を示すBOOL>

KSPROPERTY_JACK_DESCRIPTION2

このプロパティは、 KSJACK_DESCRIPTION2 構造体を返します。 オーディオ ドライバーは、次のように KSPROPERTY_JACK_DESCRIPTION2 フィールドを設定する必要があります。

  • DeviceStateInfo = 0
  • JackCapabilities = JACKDESC2_PRESENCE_DETECT_CAPABILITY

KSPROPERTY_ONESHOT_RECONNECT

オーディオ ドライバーのフィルターは 、KSPROPERTY_ONESHOT_RECONNECTをサポートする必要があります。 この構造体を作成して初期化するために、オーディオ ドライバーは HFP ドライバーにIOCTL_BTHHFP_DEVICE_REQUEST_CONNECTを送信します。 HFP ドライバーは、この要求を完了し、非同期的にBluetoothオーディオ デバイスへの接続を試みます。

KSPROPERTY_ONESHOT_DISCONNECT

オーディオ ドライバーのフィルターは 、KSPROPERTY_ONESHOT_DISCONNECTをサポートする必要があります。 この構造体を作成して初期化するために、オーディオ ドライバーは HFP ドライバーにIOCTL_BTHHFP_DEVICE_REQUEST_DISCONNECT を送信します。 HFP ドライバーは、この要求を完了し、非同期的にBluetoothオーディオ デバイスからの切断を試みます。

オーディオ ドライバーでこれらのプロパティがサポートされている場合、コントロール パネルの [サウンド] ダイアログ ボックスには、HFP エンドポイントの接続と切断のコマンドが表示されます。

Bluetooth バイパス オーディオ ストリーミングの理論