ASIOとWASAPIの音切れ、疑う順番はドライバ方式・バッファ・DPCの3段階
DAWで再生していると、ときどき「プチッ」と小さな音が混じる。録音したテイクを聴き返すと、一瞬だけ音が途切れている。Windowsの制作PCでこの症状が出たとき、手当たり次第に設定をいじると、何が効いたのか分からないまま時間だけが過ぎていく。以前の自分がまさにそうで、電源設定を変え、ドライバを入れ直し、バッファを上げ下げして、結局どれが原因だったのか覚えていなかった。 同じことを繰り返さないように、疑う順番を決めて手順にしておく。音切れの原因は、大きく分けて3つの層のどこかにある。アプリがどのドライバ方式で音を出しているか、そのドライバに渡しているバッファの大きさ、そしてWindowsの奥でほかのドライバが処理を長く占有していないか、の3つだ。上の層から順に確かめていけば、どこで詰まっているかはたいてい絞り込める。最後の層を見るには、Resplendence社の無料ツールLatencyMonを使う。 音切れは3つの層のどこかで起きている USB端子の向こうでは、ドライバが一定の間隔で音のデータを受け渡しているPhoto: Musicproducer / CC BY-SA 4.0 パソコンの音は、決まった量のデータをまとめて、決まった間隔で機器へ渡す仕組みで流れている。このひとまとまりがバッファで、次のバッファが渡されるまでに音のデータを作り終えていないと、その瞬間に音が欠ける。プチノイズや音切れの正体は、ほとんどがこの「間に合わなかった」という出来事だ。 間に合わない理由は、層ごとに違う。1つめはドライバ方式の層で、Windowsのミキサーを通る方式では、ほかのアプリの音と混ぜたり、サンプリング周波数を変換したりする処理が間に入る。2つめはバッファの層で、バッファを小さくすれば反応は速くなるが、1回あたりに使える時間が短くなり、少しの遅れで間に合わなくなる。3つめはDPCの層で、ネットワークやグラフィックス、電源管理などのドライバが割り込み処理を長く握ると、音を作る処理の順番が回ってこなくなる。 この3つは、上から順に確かめるのが近道だと思う。ドライバ方式とバッファはDAWの設定画面で数分あれば変えられるが、DPCの原因を探すにはドライバを1つずつ止めて測り直す必要があり、手間がかかる。手軽な層から片付けて、それでも残ったときに初めて奥の層に進む、という順番にしておくと、無駄な作業が減る。 MMEとWASAPIとASIO、音が通る道の違い 安価なUSB音声アダプターはWindows標準のドライバで動き、ASIOドライバを持たないことが多いPhoto: Itu / CC BY-SA 3.0 DAWのオーディオ設定には、MME、DirectSound、WASAPI、ASIOといった名前が並ぶ。どれを選ぶかで、音のデータがWindowsの中をどう通るかが変わる。最初に確かめるのは、いま自分のDAWがどれで動いているか、という点だ。意外と、インストール直後の既定のままMMEで動いていた、ということがある。 MMEはWindowsの最も古い方式で、Windowsのオーディオエンジンを通り、ほかのアプリの音と混ぜられてから機器へ届く。手軽で互換性は高いが、遅延は数十ミリ秒になることが多く、鍵盤を弾いてから音が出るまでのずれがはっきり分かる。DirectSoundも、いまのWindowsでは内部でオーディオエンジンを経由する古い方式で、制作用に選ぶ理由はほとんどない。 WASAPIはWindows Vista以降の標準の方式で、共有モードと排他モードの2つがある。共有モードはオーディオエンジンのミキサーを通るので、ブラウザやチャットの音と同時に鳴らせる。代わりに、混ぜる処理と、機器の形式に合わせるサンプリング周波数の変換が入る。Microsoftの資料では、Windows 10以降でオーディオエンジン自体の遅延は1.3ミリ秒まで縮み、標準の音声ドライバでもアプリが対応していれば48kHzで128サンプル(2.66ミリ秒)から480サンプル(10ミリ秒)までのバッファを選べるようになった。従来の既定はおよそ10ミリ秒のバッファだった。排他モードはミキサーを通らずに機器を1つのアプリが専有する方式で、遅延はさらに短くなるが、そのあいだはほかのアプリの音が出なくなる。 ASIOはSteinberg社が定めた方式で、機器のメーカーが配布するASIOドライバに、アプリが直接データを渡す。Windowsのミキサーを通らず、機器の側もこの方式に合わせて作られているので、小さなバッファでも安定しやすい。オーディオインターフェースを使っているなら、まずメーカー純正のASIOドライバを選ぶのが基本になる。 方式 Windowsのミキサー ほかのアプリの音 遅延の傾向 向いている場面 MME 通る 同時に鳴る 大きい(数十ミリ秒) 互換性の確認 DirectSound 通る 同時に鳴る MMEに近い 古いアプリ WASAPI 共有 通る 同時に鳴る 中くらい 内蔵音源で聴くだけのとき WASAPI 排他 通らない 止まる 小さい ASIOの無い機器での録音 ASIO(メーカー純正) 通らない 機器による 小さい 録音・打ち込みの本番 注意したいのは、ASIO4ALLやFlexASIOのような汎用のASIOドライバだ。これらはASIOの窓口を用意して、その裏でWindows側の仕組みを使って音を出す。ASIOの無い内蔵音源でもDAWを動かせるので便利だが、ASIO4ALLは基本的に1つのアプリからしか使えず、FlexASIOは入力と出力でサンプリング周波数が違うと開けない。さらに、汎用のASIOドライバを複数入れていると、起動のたびに機器の取り合いが起きて不安定になることがある。オーディオインターフェースの純正ASIOドライバがあるなら、汎用ドライバは使わないほうがいいし、使わないならアンインストールしておくほうが切り分けが楽になる。 この層の確かめ方は単純だ。DAWの設定でドライバをメーカー純正のASIOに切り替え、同じ曲を同じバッファで再生して、症状が変わるかを見る。MMEやWASAPI共有で鳴っていたなら、これだけで直ることも多い。純正ASIOでも症状が残るなら、次のバッファの層へ進む。 バッファサイズとレイテンシの計算 バッファの長さは、サンプル数をサンプリング周波数で割れば時間に直せる。48kHzで256サンプルなら、256を48,000で割って約5.33ミリ秒になる。DAWの設定画面に出る数字の意味が分かると、どこまで下げてよいかの見当がつく。 バッファ 44.1kHz 48kHz 96kHz 64サンプル 1.45ミリ秒 1.33ミリ秒 0.67ミリ秒 128サンプル 2.90ミリ秒 2.67ミリ秒 1.33ミリ秒 256サンプル 5.80ミリ秒 5.33ミリ秒 2.67ミリ秒 512サンプル 11.61ミリ秒 10.67ミリ秒 5.33ミリ秒 1024サンプル 23.22ミリ秒 21.33ミリ秒 10.67ミリ秒 表の値は片道ぶんだ。マイクで歌いながらDAWを通した音をヘッドホンで聴く場合は、入力のバッファと出力のバッファが両方かかるので、少なくとも2倍になる。さらにAD/DA変換や、ドライバが安全のために足す余裕の分が加わるので、DAWが表示する往復のレイテンシは、この表の2倍より数ミリ秒長くなるのが普通だ。 ...