Linux USB Gadget UAC2 の現状覚え書きです.
いつもの通り結論から書くと,Linux USB Gadget の UAC2 ですが,
- Windows もデフォルトでサポートするようになったみたい
- 複数のサンプリングレートの設定にも対応したみたい
です.
Linux USB Gadget UAC2 の設定
本記事で Linux USB Gadget UAC2 の細かな設定の仕方については取り扱いません.これについては以前の記事
をご覧ください.
Windows サポート
Linux USB Gadget 機能とは,Raspberry pi などの SBC をUSBメモリとか,キーボードなどの USB 機器として使えるって機能です.
この中でも特に UAC2 (Universal Audio Class 2)とは,Raspberry pi などの SBC を USB 2.0 対応の USB-DAC として使えるという機能なのですが,残念ながらつい最近まで Windows からは使えませんでした(Windows 以外の macOS などだと問題なく使える).
このため,Windows でも使えるよう個人的に Linux カーネルのパッチを作成して対応していたのですが,これだとカーネルをコンパイルし直すなどの手間がかかり,カーネルのアップデートに追従するのがかなり面倒でした(だから放置したままだった).
しかし,どうも
最新の Raspberry pi OS だと,きちんと Windows からも UAC2 の USB-DAC として使えるようになったっぽい
です.記事執筆時点の Raspberry pi OS の最新安定版は,6.1.54-2 ですが,6.1 のどこかで修正が取り込まれたっぽいです.「ぽい」って書いたのは,どの時点でサポートされたのかがはっきりわからないからです.しかし実際に試してみると(私の持っている機器だと)きちんと動作します.
なお,6.1 系列にカーネルをアップデートしたい場合は,まず,現在実行中の Raspberry pi OS が bullseye 以降である必要があります.前バージョンの buster なら,
辺りを参考にアップデートしてください.また,アップデートするだけだと,kernel のバージョンは 5.19 系列のままなので,bullseye にしたあとに,
$ sudo rpi-update
しないといけません.
複数サンプリングレートサポート
複数サンプリングレートの同時有効化もサポートされたっぽいです.
サンプリングレートとは,1秒間をどの程度に分割するのかという値で,一般的には,
- 44100 (CD音質)
- 48000 (DVD音質)
- 88000
- 96000
- 176000
- 192000
- 384000
などの値が使われているみたい(96000 以上だとハイレゾって言うっぽい)ですが,以前の UAC2 だとこのうちの1つしか同時に有効化できなかったのが,最新のカーネルだと,複数同時に有効化できます.
実際に有効化するには,Linux USB Gadget の UAC2 を有効化するときに定義する値のうち,サンプリングレートを表す c_srate を
c_srate = 44100,48000,96000
のように定義すれば良いだけみたいです(上記は入力の場合,出力は p_srate)
この複数サンプリングレートのサポートもカーネル 6.1 系列のどこかの段階で取り込まれたことみたいですが,実際にどこで取り込まれたまでかは調べていません.
なお,複数サンプリングレートには対応しましたが,複数サンプリングサイズにはまだ未対応のようです.なお,サンプリングサイズは(入力の場合,出力は p_ssize),
- 16bit の場合: c_ssize = 2
- 24bit の場合: c_ssize = 3
- 32bit の場合: c_ssize = 4
のように設定すればよいはずです.
以上!