USB Audio 2.0 のドライバー

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

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

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

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

Architecture

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

Stack diagram illustrating the Windows USB Audio architecture with ks.sys at the top and USB Audio devices at the bottom.

次の 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 オーディオ 2.0 ドライバーの機能について説明します。

オーディオ機能トポロジー

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

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

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

複数の入力ピンを持つプロセッシングユニット(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 インターフェイス記述子

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

AS インターフェイス記述子は、エンドポイントなし (帯域幅の消費なし) の代替設定 0 で始まり、互換性のある USB オーディオ 2.0 ハードウェアでさらに代替設定を昇順で指定する必要があります。

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

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

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

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

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

バス帯域幅を節約するために、一つの AS インターフェイスで、同じ形式 (bNrChannels と AS 形式型記述子に関して) で複数の代替設定を実装できますが、アイソクロナス データ エンドポイント記述子の wMaxPacketSize 値は異なります。 特定のサンプル レートに対して、ドライバーは、データ レート要件を満たすことができる最小の wMaxPacketSize を持つ代替設定を選択します。

タイプ I フォーマットのタイプ記述子

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

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

形式 サブスロットのサイズ ビット分解能
タイプ I PCM フォーマット: 1 <= bBitResolution <= 4 8 <= bBitResolution <= 32
タイプ I PCM8 フォーマット: bSubslotSize == 1 bBitResolution== 8
タイプ I IEEE_FLOATフォーマット: bSubslotSize == 4 bBitResolution== 32
タイプ III IEC61937 フォーマット: bSubslotSize== 2 bBitResolution== 16

クラス固有の AS アイソクロナス オーディオ データ エンドポイント記述子

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

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

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

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

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

エンティティ コントロール カールを入手する カールを設定する 範囲を取得 割り込み
クロックソース サンプリング周波数制御 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 オーディオ 2.0 ハードウェアでサンプリング周波数制御の GET RANGE 要求と GET CUR 要求 (ADC-2 5.2.5.1.1) を実装する必要があります。

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

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

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

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

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

フィーチャーユニット

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

ドライバーは、一つのボリューム範囲のみをサポートします。 ボリューム・コントロールの GET RANGE 要求が複数の範囲を戻した場合、後続の範囲は無視されます。

MIN および MAX フィールドで表されるボリューム間隔は、RES フィールドで指定されたステップ サイズの整数倍である必要があります。

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

OEM と IHV の追加情報

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

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

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

GenericDriverInstalled,,,,1

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

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 オーディオ 2.0 の仕様を参照してください。

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

USB オーディオ 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

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

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

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

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

Windows 10 リリース 1703 以降、1 つ以上のジャックを持つ USB オーディオ クラス 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> の規則は次のとおりです:

  • 基数 10 (8, 9, a ではなく 8, 9, 10)
  • 先行ゼロなし
  • n は 1 ベースです (最初のジャックはジャック 0 ではなくジャック 1 です)。

次に例を示します。

T1_NrJacks、T1_J2_ChannelMapping、T1_J2_ConnectorType

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

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

  • これらの値を設定する目的でインボックス INF をラップするカスタム INF を使用する。

  • USB デバイスの Microsoft OS 記述子を介してハードウェア デバイスによって直接行われます (以下の例を参照)。 これらの記述子の作成の詳細については、「USB デバイスの Microsoft OS 記述子を参照してください。

USB 用の Microsoft OS 記述子の例

次の USB の Microsoft OS 記述子の例には、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 ログ記事 昔ながらの方法で音声ログを収集するで説明されている手順に従って手動で収集できます。 エラーがドライバーの問題を示している可能性がある場合は、以下で説明するフィードバック Hub を使用して報告し、ログを含めてください。

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

Windows 10 バージョン 1703 で "オーディオ サービスが応答していません" エラーと USB オーディオ デバイスが機能しない方法については、USB オーディオが再生されないを参照してください。

フィードバック Hub

このドライバーで問題が発生した場合は、オーディオ ログを収集し、フィードバック Hub でログを使用して問題を報告し、機能を提案して、注意を喚起する手順に従います。

ドライバーの開発

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

関連項目