USB-MIDI (5)

AudioControl インターフェース・サブクラスのディスクリプタのクラス固有 (Class Specific) 部分には、USB から制御可能な要素および要素間の接続の「トポロジー」を抽象化して記述することになっており、エレメントごとに記述方法が規格化されています。
ホスト側のソフトウェアは、この情報をもとに、どのエレメントにどんな操作をすればよいかを判断します。
この「USB から制御可能」というのがポイントで、たとえオーディオ/USB インターフェース機器 (この「インターフェース」は一般的な意味) にミキサやエフェクタの操作つまみやスイッチがたくさん付いていたとしても、それらが USB を経由してホストから操作可能でなければ、ディスクリプタに記述する必要はありません。
もし、ホスト側から操作可能なエレメントがひとつもなければ、クラス固有ディスクリプタ部分は実質的に「空」となり、AudioControl に関する記述は規約上必要なだけで、実際的な意味は持ちません。
私の所有している機器の中で、「KORG microKEY-37」では AudioControl インターフェース・ディスクリプタが全く省略されていますが Windows 上で問題なく動作しています。
MIDIStreaming インターフェース・サブクラス内では「MIDI 信号」の流れについてだけ記述するので、たとえばシンセサイザ内蔵で、そのオーディオ出力にはエフェクタやミキサが接続されており、それらを USB 経由で直接操作したい場合には AudioControl サブクラス部分に記述しておく必要があります。
AudioControl / AudioStream の抽象化と、MIDIStream の抽象化とでは共通する部分も多いので、一応 AudioContorl についても触れておきます。
TI (旧 BB) の USB-DAC PCM2704 を例にして示します。

破線で囲った部分が PCM2704 を表しており、その中でも、下の方に突き出しているオーディオ機能の本体である「AUDIO FUNCTION」と書いてある長方形の部分と、逆 U 字型に上からかぶさっている USB インターフェース部分に分けられます。
(USB 用語の) インターフェース番号 0 が AudioControl のためのインターフェースで、「機能ユニット」の「FEATURE UNIT」のコントロールにつながっています。
PCM2704 の場合、その「機能」は、ステレオ両チャネルの同時ミュートと、L / R チャネル独立のボリューム・コントロールだけに限られています。
インターフェース番号 1 が AudioStreaming インターフェースで、エンドポイント番号 2 のアイソクロナス・エンドポイントを通じてリニア PCM ディジタル・オーディオ・ストリームを受け取ります。
そのデータはエンドポイントから「入力ターミナル」(ID 番号は「1」) を経由してオーディオ・ファンクション内に導入されるものとして抽象化されています。
オーディオ・ファンクション内では入力ターミナルからのデータは、ID 番号 3 の「FEATURE UNIT」に流し込まれ、その出力は ID 番号 2 の「出力ターミナル」につながっています。
この出力ターミナルは、実際の外の世界への出口であり、IC の出力端子を抽象化するものです。
PCM2804 は DA コンバータですが、その機能は、上の図では表現されていません。
この図は「トポロジー」を表すものなので、エレメントどうしの接続を流れるオーディオ・データの実際の具体的な状態については表現されていません。
FEATURE UNIT ではディジタル・データのまま入出力しているので、それがアナログ・オーディオ信号に変換されるのは ID 番号 2 の出力ターミナルの部分ということになります。
この場合、暗黙のうちに DA 機能が出力ターミナルに含まれていることになります。
ホスト PC はインターフェース・ディスクリプタを読み取って、上の図のようなトポロジーを解釈します。
たとえば、ボリューム変更の要求があれば、それは ID 番号 3 の FEATURE UNIT にボリューム設定のコマンドを発行すれば良いのだということが分かります。