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+Rでmmsys.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
は共有モードを使うのでレイテンシーが明らかに増える。
参考資料