USB Audio 2.0 ドライバー

Windows 10 リリース 1703 以降、USB Audio 2.0 ドライバーは Windows に付属しています。 USB Audio 2.0 デバイス クラスをサポートするように設計されています。 ドライバーは、WaveRT オーディオ ポート クラス ミニポートです。

ドライバーの名前は usbaudio2.sys で、関連付けられている inf ファイルは usbaudio2.inf です

ドライバーは、デバイス マネージャーで "USB オーディオ クラス 2 デバイス" として識別されます。 この名前は、使用可能な場合は USB 製品文字列で上書きされます。

互換性のあるデバイスがシステムに接続されると、ドライバーが自動的に有効になります。 ただし、サード パーティ製ドライバーがシステムまたはWindows Updateに存在する場合、そのドライバーがインストールされ、クラス ドライバーがオーバーライドされます。

アーキテクチャ

usbaudio2.sys ドライバーは、次に示すように、Windows USB Audio の広範なアーキテクチャに適合します。

上部のks.sysと下部の USB オーディオ デバイスを示すスタック図。

次の USB 仕様では、USB オーディオを定義し、この記事で参照されています。

  • USB-2 は、ユニバーサル シリアル バス仕様リビジョン 2.0 を指します
  • ADC-2 は、オーディオ デバイスの USB デバイス クラス定義、リリース 2.0 を参照します。
  • FMT-2 は、オーディオ データ形式の仕様であるリリース 2.0 を参照します。

USB-IFは公式USB仕様、テスト 仕様およびツールを維持する特別な関心グループです。

オーディオの形式

ドライバーは、以下に示す形式をサポートしています。 FMT-2 で定義されている別の形式または不明な形式を指定する代替設定は無視されます。

タイプ I 形式 (FMT-2 2.3.1):

  • サンプルあたり 8..32 ビットの PCM 形式 (FMT-2 2.3.1.7.1)
  • PCM8 形式 (FMT-2 2.3.1.7.2)
  • IEEE_FLOAT形式 (FMT-2 2.3.1.7.3)

タイプ III 形式 (FMT-2 2.3.3 および A.2.3):

  • IEC61937_AC-3
  • IEC61937_MPEG-2_AAC_ADTS
  • IEC61937_DTS-I
  • IEC61937_DTS-II
  • IEC61937_DTS-III
  • TYPE_III_WMA

機能の説明

このセクションでは、USB Audio 2.0 ドライバーの機能について説明します。

オーディオ関数トポロジ

ドライバーは、ADC-2 3.13 で定義されているすべてのエンティティ型をサポートしています。

各ターミナル エンティティには、互換性のある USB Audio 2.0 ハードウェアで有効なクロック接続が必要です。 クロック パスには、必要に応じて、クロック乗算器とクロック セレクター ユニットを含め、クロック ソース エンティティで終わる必要があります。

ドライバーは、1 つの単一クロック ソースのみをサポートします。 デバイスが複数のクロック ソース エンティティとクロック セレクターを実装している場合、ドライバーは既定で選択されているクロック ソースを使用し、クロック セレクターの位置は変更しません。

複数の入力ピンを備えた処理装置 (ADC-2 3.13.9) はサポートされていません。

複数の入力ピンを備えた拡張ユニット (ADC-2 3.13.10) はサポートされていません。

トポロジ内の循環パスは許可されません。

オーディオ ストリーミング

ドライバーは、次のエンドポイント同期の種類 (USB-2 5.12.4.1) をサポートしています。

  • 非同期 IN と OUT
  • 同期 IN と OUT
  • アダプティブ IN と OUT

非同期 OUT の場合、ドライバーは明示的なフィードバックのみをサポートします。 フィードバック エンドポイントは、AS インターフェイスのそれぞれの代替設定に実装する必要があります。 ドライバーは暗黙的なフィードバックをサポートしていません。

現在、複数のエンドポイントで共有クロックを使用するデバイスのサポートは限られています。

アダプティブ IN の場合、ドライバーはフィード転送エンドポイントをサポートしていません。 このようなエンドポイントが代替設定に存在する場合は無視されます。 ドライバーは、非同期 IN ストリームと同じ方法でアダプティブ IN ストリームを処理します。

デバイスによって作成される等時パケットのサイズは、FMT-2.0 セクション 2.3.1.1 で指定されている制限内にある必要があります。 つまり、標準サイズからの実際のパケット サイズの偏差は、1 つのオーディオ スロット (オーディオ スロット = チャネル数サンプル) を超えてはなりません。

記述子

オーディオ関数は、1 つの AudioControl インターフェイス記述子 (ADC-2 4.7) と 1 つ以上の AudioStreaming インターフェイス記述子 (ADC-2 4.9) を実装する必要があります。 オーディオ コントロール インターフェイスを持つ関数ですが、ストリーミング インターフェイスはサポートされていません。

ドライバーは、ADC-2 セクション 4 で定義されているすべての記述子の種類をサポートしています。 次のサブセクションでは、いくつかの特定の記述子の種類に関するコメントを提供します。

AS インターフェイス記述子のClass-Specific

この仕様の詳細については、ADC-2 4.9.2 を参照してください。

AS インターフェイス記述子は、エンドポイントのない代替設定 0 (帯域幅消費なし) で開始する必要があります。また、互換性のある USB Audio 2.0 ハードウェアでは、それ以上の代替設定を昇順で指定する必要があります。

ドライバーでサポートされていない形式の代替設定は無視されます。

0 以外の各代替設定では、等時性データ エンドポイントと、必要に応じてフィードバック エンドポイントを指定する必要があります。 エンドポイントのない 0 以外の代替設定はサポートされていません。

bTerminalLink フィールドはトポロジ内のターミナル エンティティを参照する必要があり、その値は AS インターフェイスのすべての代替設定で同じである必要があります。

AS インターフェイス記述子の bFormatType フィールドは、Format Type Descriptor (FMT-2 2.3.1.6) で指定された bFormatType と同じである必要があります。

Type I 形式の場合、AS インターフェイス記述子の bmFormats フィールドに 1 ビットを設定する必要があります。 それ以外の場合、形式はドライバーによって無視されます。

バス帯域幅を節約するために、1 つの AS インターフェイスは、同じ形式 (bNrChannels と AS 形式型記述子の観点から) が異なる wMaxPacketSize 値を等時性データ エンドポイント記述子に複数の代替設定を実装できます。 特定のサンプル レートに対して、ドライバーは、データ レート要件を満たすことができる最小の wMaxPacketSize を使用して代替設定を選択します。

型 I 形式の型記述子

この仕様の詳細については、FMT-2 2.3.1.6 を参照してください。

次の制限事項が適用されます。

Format サブスロット のサイズ ビット解像度
「I PCM 形式」と入力します。 1 <= bSubslotSize <= 4 8 <= bBitResolution <= 32
「I PCM8 形式」と入力します。 bSubslotSize == 1 bBitResolution == 8
「I IEEE_FLOAT形式」と入力します。 bSubslotSize == 4 bBitResolution == 32
タイプ III IEC61937 形式: bSubslotSize == 2 bBitResolution == 16

as 等時性オーディオ データ エンドポイント記述子のClass-Specific

この仕様の詳細については、ADC-2 4.10.1.2 を参照してください。

bmAttributes フィールドの MaxPacketsOnly フラグはサポートされていないため、無視されます。

フィールド bmControls、bLockDelayUnits、wLockDelay は無視されます。

クラス要求と割り込みデータ メッセージ

ドライバーは、ADC-2 セクション 5.2 で定義されているコントロール要求のサブセットをサポートし、一部のコントロールの割り込みデータ メッセージ (ADC-2 6.1) をサポートします。 次の表は、ドライバーに実装されているサブセットを示しています。

Entity コントロール GET CUR SET CUR 範囲の取得 割り込み
クロック ソース サンプリング周波数制御 x x x
クロック セレクター クロック セレクター コントロール x
クロック乗数 分子コントロール x
分母コントロール x
ターミナル コネクタ コントロール x x
ミキサーユニット ミキサー コントロール x x x
セレクターユニット セレクター コントロール x x
機能ユニット ミュート コントロール x x x
ボリュームコントロール x x x x
自動ゲイン制御 x x
効果の単位
処理装置
拡張単位

コントロールと要求に関する追加情報については、次のサブセクションを参照してください。

クロック ソース エンティティ

この仕様の詳細については、ADC-2 5.2.5.1 を参照してください。

少なくとも、クロック ソース エンティティは、互換性のある USB Audio 2.0 ハードウェアにサンプリング周波数制御 GET RANGE 要求と GET CUR 要求 (ADC-2 5.2.5.1.1) を実装する必要があります。

サンプリング周波数制御 GET RANGE 要求は、サブ範囲のリスト (ADC-2 5.2.1) を返します。 各サブ範囲は、個別の周波数または周波数範囲を表します。 個別のサンプリング周波数を表すには、MIN フィールドと MAX フィールドをそれぞれの周波数に設定し、RES を 0 に設定する必要があります。 個々のサブ範囲は重複してはなりません。 サブ範囲が前の部分範囲と重なっている場合は、ドライバーによって無視されます。

1 つの固定周波数のみを実装するクロック ソース エンティティでは、サンプリング周波数制御 SET CUR を実装する必要はありません。 固定頻度を返す GET CUR を実装し、1 つの個別の頻度を報告する GET RANGE を実装します。

クロック セレクター エンティティ

この仕様の詳細については、ADC-2 5.2.5.2 を参照してください

USB Audio 2.0 ドライバーでは、クロックの選択はサポートされていません。 ドライバーは、既定で選択され、クロック セレクター コントロール SET CUR 要求を発行しないクロック ソース エンティティを使用します。 クロック セレクター コントロール GET CUR 要求 (ADC-2 5.2.5.2.1) は、互換性のある USB Audio 2.0 ハードウェアに実装する必要があります。

機能ユニット

この仕様の詳細については、ADC-2 5.2.5.7 を参照してください。

ドライバーは、1 つのボリューム範囲のみをサポートします。 ボリューム制御 GET RANGE 要求が複数の範囲を返す場合、後続の範囲は無視されます。

MIN フィールドと MAX フィールドで表されるボリューム間隔は、RES フィールドで指定されたステップ・サイズの倍数の整数でなければなりません。

機能ユニットがミュートまたはボリュームの単一チャネル コントロールとマスター コントロールを実装している場合、ドライバーは単一チャネル コントロールを使用し、マスター コントロールを無視します。

OEM および IHV の追加情報

OEM と IHV は、提供されたインボックス ドライバーに対して既存のデバイスと新しいデバイスをテストする必要があります。

インボックス USB Audio 2.0 ドライバーに関連付けられている特定のパートナーカスタマイズはありません。

この INF ファイル エントリ (Windows リリース 1703 の更新プログラムで提供) は、インボックス ドライバーが汎用デバイス ドライバーであることを識別するために使用されます。

GenericDriverInstalled,,,,1

インボックス ドライバーは、usbaudio2.inf と互換性のある次の ID に登録します。

USB\Class_01&SubClass_00&Prot_20
USB\Class_01&SubClass_01&Prot_20
USB\Class_01&SubClass_02&Prot_20
USB\Class_01&SubClass_03&Prot_20

サブクラスの型については、USB Audio 2.0 仕様を参照してください。

USB Audio 2.0 MIDI 搭載デバイス (上のサブクラス 0x03) は、usbaudio.sys (USB Audio 1.0 ドライバー) が読み込まれた個別の多機能デバイスとして MIDI 機能を列挙します。

USB Audio 1.0 クラス ドライバーは、この互換性のある ID を wdma_usb.inf に登録します。

USB\Class_01

また、次の除外があります。

USB\Class_01&SubClass_00&Prot_20
USB\Class_01&SubClass_01&Prot_20
USB\Class_01&SubClass_02&Prot_20
USB\Class_01&SubClass_03&Prot_20

Windows オーディオ スタックの制限により、共有モードでは任意の数のチャネル (8 を超える) はサポートされません。

IHV USB Audio 2.0 ドライバーと更新プログラム

IHV が提供するサード パーティ製ドライバー USB Audio 2.0 ドライバーの場合、これらのドライバーは、この動作を明示的にオーバーライドしてインボックス ドライバーを使用するようにドライバーを更新しない限り、インボックス ドライバーよりもデバイスに対して引き続き優先されます。

オーディオ ジャック レジストリの説明

Windows 10 リリース 1703 以降、1 つ以上のジャックを持つ USB Audio Class 2.0 デバイスを作成する IHV には、これらのジャックをインボックス オーディオ クラス 2.0 ドライバーに記述する機能があります。 インボックス ドライバーは、このデバイスのKSPROPERTY_JACK_DESCRIPTIONを処理するときに、指定されたジャック情報を使用します。

ジャック情報は、デバイス インスタンス キー (HW キー) のレジストリに格納されます。

レジストリのオーディオ ジャック情報の設定を次に示します。

REG_DWORD  T<tid>_NrJacks                 # of the jack on this device
REG_DWORD  T<tid>_J<n>_ChannelMapping     Channel mask. The value is defined in ksmedia.h. e.g. SPEAKER_FRONT_RIGHT or KSAUDIO_SPEAKER_5POINT1_SURROUND
REG_DWORD  T<tid>_J<n>_ConnectorType      The enum value is define in EPcxConnectionType.
REG_DWORD  T<tid>_J<n>_GeoLocation        The enum value is define in EPcxGeoLocation.
REG_DWORD  T<tid>_J<n>_GenLocation        The enum value is define in EPcxGenLocation.
REG_DWORD  T<tid>_J<n>_PortConnection     The enum value is define in EPxcPortConnection.
REG_DWORD  T<tid>_J<n>_Color              The color needs to be represent by RGB like this: 0x00RRGGBB (NOT a COLORREF).

<tid> = ターミナル ID (記述子で定義されているとおり)

<n> = ジャック番号 (1 ~ n)。

tid> と <n> の<規則は次のとおりです。

  • Base 10 (8、9、10 ではなく 8、9、a)
  • 先行ゼロなし
  • nは1基(第1ジャックはジャック0ではなくジャック1)

次に例を示します。

T1_NrJacks、T1_J2_ChannelMapping、T1_J2_ConnectorType

オーディオ ジャックの詳細については、「 KSJACK_DESCRIPTION構造」を参照してください。

これらのレジストリ値は、さまざまな方法で設定できます。

  • カスタム INF を使用して、これらの値を設定するためにインボックス INF をラップします。

  • USB デバイス用の Microsoft OS 記述子を介してハードウェア デバイスから直接 (以下の例を参照)。 これらの記述子の作成の詳細については、「 MICROSOFT OS Descriptors for USB Devices」を参照してください。

USB 用 Microsoft OS 記述子の例

次の USB 用 Microsoft OS 記述子の例には、1 つのジャックのチャネル マッピングと色が含まれています。 この例は、1 つの機能記述子を持つ非複合デバイスの場合です。

IHV ベンダーは、ジャックの説明に関するその他の情報を含むよう拡張する必要があります。

UCHAR Example2_MSOS20DescriptorSetForUAC2 [0x76] = {
    //
    // Microsoft OS 2.0 Descriptor Set Header
    //
    0x0A, 0x00,             // wLength - 10 bytes
    0x00, 0x00,             // MSOS20_SET_HEADER_DESCRIPTOR
    0x00, 0x00, 0x0?, 0x06, // dwWindowsVersion – 0x060?0000 for future Windows version
    0x76, 0x00,             // wTotalLength – 118 bytes // update later

    //
    // Microsoft OS 2.0 Registry Value Feature Descriptor
    //
    0x42, 0x00,             // bLength - 66 bytes
    0x04, 0x00,             // wDescriptorType – 5 for Registry Property
    0x04, 0x00,             // wPropertyDataType - 4 for REG_DWORD
    0x34, 0x00,             // wPropertyNameLength – 52 bytes
    0x54, 0x00, 0x30, 0x00, // Property Name - "T01_J01_ChannelMapping"
    0x31, 0x00, 0x5f, 0x00,
    0x4a, 0x00, 0x30, 0x00,
    0x31, 0x00, 0x5f, 0x00,
    0x43, 0x00, 0x68, 0x00,
    0x61, 0x00, 0x6e, 0x00,
    0x6e, 0x00, 0x65, 0x00,
    0x6c, 0x00, 0x4d, 0x00,
    0x61, 0x00, 0x70, 0x00,
    0x70, 0x00, 0x69, 0x00,
    0x6e, 0x00, 0x67, 0x00,
    0x00, 0x00
    0x04, 0x00,                       // wPropertyDataLength – 4 bytes
    0x02, 0x00, 0x00, 0x00  // PropertyData - SPEAKER_FRONT_RIGHT

    //
    // Microsoft OS 2.0 Registry Value Feature Descriptor
    //
    0x2A, 0x00,             // bLength - 42 bytes
    0x04, 0x00,             // wDescriptorType – 5 for Registry Property
    0x04, 0x00,             // wPropertyDataType - 4 for REG_DWORD
    0x1C, 0x00,             // wPropertyNameLength – 28 bytes
    0x54, 0x00, 0x30, 0x00, // Property Name - "T01_J01_Color"
    0x31, 0x00, 0x5f, 0x00,
    0x4a, 0x00, 0x30, 0x00,
    0x31, 0x00, 0x5f, 0x00,
    0x43, 0x00, 0x6f, 0x00,
    0x6c, 0x00, 0x6f, 0x00,
    0x72, 0x00, 0x00, 0x00,
    0x04, 0x00,             // wPropertyDataLength – 4 bytes
    0x00, 0x00, 0xff, 0x00  // PropertyData - 0xff0000 - RED }

トラブルシューティング

ドライバーが起動しない場合は、システム イベント ログを確認する必要があります。 ドライバーは、エラーの理由を示すイベントをログに記録します。 同様に、オーディオ ログは、Matthew van Eerde の Web ログに関する記事「古 風な方法でオーディオ ログを収集する」で説明されている手順に従って手動で収集できます。 エラーがドライバーの問題を示している可能性がある場合は、以下に説明するフィードバック ハブを使用して報告し、ログを含めてください。

補足 TMF ファイルを使用して USB Audio 2.0 クラス ドライバーのログを読み取る方法の詳細については、「問題とログの報告」を参照し、Matthew van Eerde の Web ログの フィードバック ハブを使用して機能を提案 します。 TMF ファイルの操作に関する一般的な情報については、「 TMF ファイルを使用したトレース ログの表示」を参照してください。

"オーディオ サービスが応答しない" エラーと USB オーディオ デバイスがバージョン 1703 Windows 10動作しない方法については、「USB Audio Not Playing」を参照してください。

フィードバック Hub

このドライバーで問題が発生した場合は、オーディオ ログを収集し、「問題を報告する」で説明されている手順に従い 、ログを使用して、フィードバック ハブで機能を提案し、 注意を引きます。

ドライバーの開発

この USB Audio 2.0 クラス ドライバーは Thesycon によって開発され、Microsoft によってサポートされています。

関連項目