🔊

WindowsでDAWを使う上でできるだけクリーンなオーディオを出力する

に公開

DAW (FL Studio) で音楽制作を行う上で、オーディオの遅延はあってはならない。また、何か出力されるオーディオにWindows側で勝手に手を加えられることもあってはならない。
そこでいろいろ対策を取る。

WindowsのAPIについて熟知しているわけではないのでご留意いただきたい。

執筆時点での自環境

おそらくOS以外 (特にGPU) はあまり関係ないと思うが一応

  • Microsoft Windows 11 Pro 25H2 (10.0.26200.5722)
    • Insider Preview (ベータ版) のDevチャネルを使っているが、ベータ版ではない通常の24H2でも問題はない
    • Windows 10民? 素直にアプデしようね
  • Intel Core i7 12700H CPU (12C 20T)
  • 32GB DDR5 RAM
  • NVIDIA GeForce RTX 3070 Ti Laptop GPU

デバイスに対応するWindows APOを無効化する

Audio Processing Objectは、Microsoftが構築したAPIで、Windows オーディオエンジンによって使われるVSTみたいなものらしい。
Windowsに最初から入っている悪名高いハードリミッターとかもAPO。
まあこちらとしては余計なお世話なので抹消していく。

オーディオデバイスのGUIDの取得

Windowsにオーディオデバイスが接続されると、オーディオエンドポイントデバイスとして固有のGUIDが振られる。これを確認していく。
コマンドプロンプトで以下を叩く。管理者権限はいらない。

powershell "Get-PnpDevice -Class AudioEndpoint | ft InstanceId,Present,FriendlyName"

こんな感じに出力される。

InstanceId                                                           Present FriendlyName
----------                                                           ------- ------------
SWD\MMDEVAPI\{0.0.1.00000000}.{2828EC7A-CA19-4D10-867E-8B40A1C76A4B}    True マイク配列 (デジタルマイク向けインテル...
SWD\MMDEVAPI\{0.0.1.00000000}.{716F1F74-0F8E-4E14-9AE7-C01F9ED07C08}    True マイク (MIPI SoundWire* オーディオ向け...
SWD\MMDEVAPI\{0.0.0.00000000}.{DDE0FE0C-6A64-4F68-B9A9-922605113846}    True ヘッドホン (MIPI SoundWire* オーディオ...

InstanceIdの中身の0.0.x.00000000は、デバイスが入力か出力かを示す。(1=入力, 0=出力)
その後に続くxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxがGUID。これをメモる。

ちなみにオーディオドライバーが再インストールされたり、大型のWindows Updateを行ったりするとGUIDは変更される。

レジストリのアクセス許可設定を変更する

レジストリエディタでHKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\MMDevices\Audioのアクセス許可を変更する。
これをやらないと次の手順でエラーが起きる。

左側のツリーでAudioを探して右クリックしてアクセス許可...から変更する。
Audio のアクセス許可ウィンドウが開くので詳細設定をクリック。セキュリティの詳細設定ウィンドウが開く。

所有者がSYSTEMになっているはずなので変更をクリックして変更する。
ユーザーまたはグループの選択ウィンドウのテキストボックスにAdministratorsと入力して名前の確認をクリックしてからOK。
サブコンテナーとオブジェクトの所有者を置き換える子オブジェクトのアクセス許可エントリすべてを~~~置き換えるにチェックを入れてOK。

あとは全部OKしてアクセス許可ウィンドウを閉じる。

デバイスに対応するFxPropertiesキーを抹消する

抹消する前にFxPropertiesのバックアップを取っておくといいかもしれない。

レジストリエディタで、左側のツリーからHKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\MMDevices\Audio\Render\{先ほどメモしたGUID}\FxPropertiesを探して、削除する。

各種サービスの再起動

先ほどレジストリに施した変更を適用させるために、サービスの再起動を行う。
コマンドプロンプトで以下を実行。管理者権限が必須。

net stop audiosrv && net stop AudioEndpointBuilder && net start audiosrv && net start AudioEndpointBuilder

Windowsのサウンドの設定を変更する

念の為。これはやらなくていい場合もある。

Win+Rmmsys.cplを開く。
再生デバイスの中から該当のデバイスをダブルクリックして、詳細からこのデバイスでオーディオのハードウェア アクセラレータを許可するのチェックを外す。

バッファーの長さを短くする

これはやり方が色々ある。

REALというオープンソースのアプリケーションを使う手もあるが、あまり解決にならなかった。
FL Studio ASIOは排他モードを使わないので他のサウンドとDAWを共存できるが遅延がかなりあるので却下。
CubaseについてくるGeneric Low Latency ASIO Driverは体感不安定で遅延も多いのでこれも却下。

FlexASIOというオープンソースのASIOドライバーを使う。
GitHubのReleasesページからexeをダウンロードしてインストールする。

FlexASIOの構成設定

FlexASIOは、FL Studio ASIOなどにあるようなGUIウィンドウではなく、TOMLファイルで設定を行う。
詳しい設定項目はCONFIGURATION.mdに記述がある。

C:\Users\username\FlexASIO.tomlに以下のようなファイルを作る。

backend = "Windows WASAPI"
bufferSizeSamples = 96

[input]
suggestedLatencySeconds = 0.0
wasapiExclusiveMode = true

[output]
suggestedLatencySeconds = 0.0
wasapiExclusiveMode = true

backendは以下の4つから選択できる。
Windows WASAPI, Windows DirectSound, Windows WDM-KS, MME

bufferSizeSamplesはバッファーサイズをサンプル単位で指定する。例の場合は48kHzで2msになる。

wasapiExclusiveModeはいわゆる排他モードを使用するかを設定する。trueにすると排他モードを使用してレイテンシーが減る。falseは共有モードを使うのでレイテンシーが明らかに増える。


参考資料

Discussion