ちょっと前の記事ですが、Windows標準のUSBドライバーでASIO対応という記事がありました。
なるほどそういうのもあるのか~。ちょうど公式ドライバーを使ってWindowsで動かすと微妙な挙動をしてたFocusrite Scarlett Solo Gen4 があったのでASIOならワンチャン?と思いビルドしてみることにしました。
ビルド前の準備
肝心のリポジトリはこちら。
適当なところにダウンロードしましょう。
ビルド環境としてはWindowsのドライバーがビルドできる環境が必要です。とりあえずWindows Driver Kitでドライバーのビルドに必要なファイルもろもろのインストールと、ツール類は一番手軽なのはEnterprise WDKのisoを使う感じかな、、と思ったんですが。
- サポートされているその他の WDK ダウンロード バージョン – Windows drivers | Microsoft Learn
- やたら面倒な環境の問題を踏む前にバージョンを揃えて 26100.6584 のWDKを使います。(USBAudioAcxDriver.vcxproj内で10.0.26100.0を指定してるので)
- EWDKでもできそうな気がするけどIncludeやLibのPathが抜けてるのかまともに動作しないので素直にVisual Studio 2022使うほうが楽そう。。。環境が壊れてるのかもしれないが。(Windows Driver KitやC++デスクトップ開発ワークロードなども追加しておきましょう)
もう1つ大事なのがSteinbergのASIO SDKです。こちらもSDK Downloadからダウンロードします。
ライセンスはGPLv3です。ロゴや名称の使用には注意しましょう。とりあえず公開しない個人利用ならあまり問題にはならないかな、、
ダウンロードして展開したASIOSDK\common フォルダーにあるファイルを、リポジトリの src\uac2-asio\asio フォルダーにコピーします。対象ファイルは readme.md に書いてる7つの .h / .cppです。readmeに書いてる通り、ASIO SDKのライセンスのものなので誤ってコミットしたりしないようにしましょう。
対象機器の追加
単にビルドするだけならスキップでいいのですが、自分の機器を対象にしたい場合は src\uac2-driver\USBAudio2-ACX.inf ファイルの [Standard.NT$ARCH$.10.0…16299] セクションに機器のベンダーID・プロダクトIDの情報を追加する必要があります。Windowsで公式対応したら不要らしいですが。
とりあえず他の行に倣って以下のように追加します。ベンダーIDなどは機器繋いでデバイスのプロパティみたら載ってると思います。
%USBAudio2-ACX.DeviceDesc%=USBAudio2-ACX_Device, USB\VID_1235&PID_8218&MI_00 ; Focusrite Scarlett Solo 4th Gen
ビルド
ビルドはVisual Studio 2022 のDeveloper Command Promptなどもろもろのツールのパスが通ったCmdからPowerShell起動して .\build\build.ps1 を実行すればOK。
build.ps1 ファイル内にある $repoRoot のパスの値は実際の環境にあわせて修正しておきます。(※ Arm64のビルドが結構面倒くさそうなので x64環境のが欲しくてx64上で実行してるなら arm64関連はビルドしないように消しておいたほうが無難)
あと src\installer\uac2-acx-installer.wxs ファイル内もフルパス固定で書かれてる箇所があるので修正しておきましょう。
※ パスの件と、コントロールパネルアプリの必要ファイルを追加した修正はこの辺を参考に:Fix: Remove absolute paths and include the files necessary for the in… · buchizo/low-latency-audio@3050793
ビルドが問題なければ最終的に build\release\x64\Release フォルダーに MicrosoftUAC2ASIODriver.msi が生成されます。
WIX見る限りドライバー関連のファイルも含めたいようですが、コメントアウトされてるのでそのままだとインストールしてもドライバーファイルがないです。 build\staging フォルダーにはあると思うのでそちらを使ってください。
インストール
まず肝心のデバイスドライバーのほうですが、未署名のカーネルドライバーなのでそのままだとインストールできません。bcdedit /set TESTSIGNING ON してからWindowsのトラブルシュートで再起動してドライバー署名の強制を無効化してOS起動後にドライバーインストールするという手順が必要になります。(細かい手順は割愛)
仰々しい警告と共にインストールできたらbcdeditでOFFに戻しておきましょう。
その後機器を繋いでインストールしたドライバー(USBAudio2-ACX)を参照させれば無事動作するはず。
とりあえずこの時点で機器がちゃんと動作してるはず、、、!
OS側のシステム設定からみても一応見えてる。サンプルレートも変更できます。![]()
一応ASIO専用のコントロールパネルアプリもあります。
さっき作ったMSIを実行してインストールします。![]()
![]()
アプリへのショートカットも何もできませんが、 C:\Program Files\Windows ASIO フォルダーに USBAsioControlPanel.exe があるのでそちらを実行するとこちらでいろいろASIOの設定とかできる感じです。現状バッファーサイズとサンプルレートの変更ぐらいですが。
※ 再生中にサンプルレート変えたりするとまだ挙動が怪しい気がする、、
まとめ
とりあえずビルドして使えるとこまではできたので満足です。手持ちのScarlettが長時間使ってると(サンプルレートによっては短時間)スピーカーやモニターへ音が出なくなる(PC上はでてるっぽいから配信には載る)という現象があって困ってたんですよね。しばらく使ってみて問題なかったらいいな!
肝心のWindows標準ASIOドライバーですが、今後も期待ということで!