次の方法で共有


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

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

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

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

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

トポロジ

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

Diagram illustrating KS topology for audio driver, supporting render and capture in Bluetooth Hands-Free devices.

注: オーディオ ドライバー開発者は、キャプチャ パスとレンダー パスの両方に対して 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 フィールドを設定する必要があります。

  • ChannelMapping = KSAUDIO_SPEAKER_MONO
  • Color = 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 エンドポイントの Connect コマンドと Disconnect コマンドが表示されます。

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