藤本健のDigital Audio Laboratory

第817回

曲作りに重要な「レイテンシー」とは何なのか。小さければOK、じゃない?

PCのオーディオ性能の指標の一つである「レイテンシー(Latency)」。このDigital Audio Laboratoryにおいて、数多くのオーディオインターフェイスをテストしてきた際にも、レイテンシーを測定しており、それを比較材料の一つとしてきた。でも「レイテンシーが小さいと何がいいのか? 」といった疑問が寄せられることもあれば「レイテンシーを小さくしたら音が悪くなった」といった声が届くこともある。知っている人には当然の話かもしれないが、意外と理解できていない人も少なくないようなので、今回はこのレイテンシーについて考えてみることにする。

オーディオインターフェイスのレビューでは毎回、レイテンシーのテストを実施。写真はヤマハ/SteinbergのUR-RT2(上)、UR-RT4(下)

そもそもレイテンシーとは何か

Latencyという言葉を、30~40年前、筆者が学生時代だった頃の英和辞典、英英辞典で探しても載ってない。が、Webの辞書で引いてみると一般用語的には「潜在、潜伏」とある一方、IT用語的には「待ち時間、遅延時間」などとある。オーディオインターフェイスでいうレイテンシーも後者を指しており「音の遅れ」を意味するものだ。

「音の遅れ」などと言われてしまうと、悪いモノという印象があるし、一般的にレイテンシーは小さいほうがいいとされている。いかにこれを小さくするかに注力している人も多いと思うが、そもそもレイテンシーとは何なのか?

オーディオインターフェイスのレイテンシーは、DAWなどソフトウェアが音を出す命令を下してから、実際に音が出るまでの時間の遅れだ。正確にはこの音が出るまでの時間は出力レイテンシー、逆にマイクなどが捉えた音がソフトウェアまで届く時間の遅れを入力レイテンシーと呼んでおり、その大きさはmsecまたはms(ミリ秒)で表す。そして、このレイテンシーは「バッファサイズ」と密接な関係があり、バッファサイズを小さくするとレイテンシーは小さくなり、バッファサイズを大きくするとレイテンシーも大きくなるという相関関係がある。

バッファサイズの変更は、通常DAWなどのアプリケーションの環境設定画面で設定する形になっている。Macの場合はCoreAudioドライバーを通じて、Windowsの場合はASIOドライバーを通じて設定する形になり、一般的にはサンプル数で設定する。256サンプルとか512サンプルと大きい値を設定すればシステム的には安定するけれど、レイテンシーは大きくなる。一方、32サンプルさらには16サンプルなどとバッファサイズを小さくすれば、それに合わせてレイテンシーも小さくなるという形だ。

Macでのバッファサイズの設定画面(Studio One)
Windowsでのバッファサイズ設定画面(Cubase)

ちなみに、このバッファサイズとは、もちろんバッファの大きさのことなのだが、バッファというのはデータを一時的に保管する場所を意味しており、バッファメモリと呼ぶこともある。要するに、音のデータをごく一時的に貯めておくためのものなのだが、オーディオインターフェイスとDAWなどのソフトウェアとの関係を図に表してみた。

オーディオインターフェイスとDAWなどソフトウェアの関係

信号の流れを追っていくと分かると思うが、まずDAWから音の信号を出力した場合、いったんドライバー内の出力バッファを通じて、それがオーディオインターフェイスのD/A(デジタル/アナログ・コンバーター)を通り、音となって出力される。この音となるまでの時間を出力レイテンシーと呼んでいるわけだ。一方、音がA/D(アナログ/デジタル・コンバーター)を通じて、ドライバー内の入力バッファを通ってDAWにレコーディングされるまでの時間を入力レイテンシーと呼んでいるのだ。

このように、出力バッファ、入力バッファというものを通しているから、音が到達するまでの時間がかかり、そのバッファを大きくすればするほど、その時間も大きくなっていくわけだ。だったら、こんなバッファなんて無くせばいいだけのものにも思えるが、なぜバッファが必要なのだろうか?

実はコンピュータでオーディオを扱うというのは、簡単なことのようで、裏ではずいぶんいろいろ難しいことをしている。Windowsにせよ、Macにせよ、DAWが音を出す際に、その処理だけをしているわけではない。DAWの裏でブラウザが動いていたり、メールソフトが動いていたり、ワープロが動いていたりして、CPUは、ほかのソフトにも気を配りながら処理をしている。「DAW以外のアプリケーションは立ち上げていない」といったって、OS自体がいろいろな処理をしているから、DAWに専念することができないのだ。

もちろんDAW自体も、単に音を出しているだけでなく、ミキシング処理をしたり、エフェクト処理を行なったり、そもそもレベルメーターを動かすとか、画面表示をすることだって、CPUが処理するので、音を出すことの処理に専念することができない。そこで、DAWから音のデータを少しずつオーディオインターフェイスに運んでいくバケツリレーのようなことを行なう。その際、バケツの水、つまりオーディオデータを一時的に貯めておくところがバッファというわけだ。

DAWとオーディオインターフェイスの音楽データの流れのイメージ

一方で、オーディオインターフェイス側は音を出すことに専念できるので、一定速度、つまり44.1kHz/16bitとか96kHz/24bitという形で音を出し続ける。その際、バッファから吸い上げて音を出していくのである。

もしCPU処理能力が速く、バケツリレーの速度が速ければ、バッファのデータが枯れることがないのだが、ブラウザの処理をするなど、別の処理をしてバケツリレーが途絶えると、オーディオインターフェイスが吸い上げるためのデータが無くなってしまい、音が出せなくなる。これがバッファサイズを小さくした際に発生する音切れ。ブチブチとノイズが入ってしまうのはこのためなのだ。そこで、バッファサイズを大きくすると、いっぱいのデータが溜まる形になるので、ちょっとバケツリレーが止まっても、音が途切れることなく、出し続けることができる、というわけだ。

ここまではオーディオ出力だけに注目したが、オーディオ入力においても同じようなことが起こる。オーディオ入力の場合は、バッファに対して、まったく逆の流れとなり、音を貯めておくプールから、バケツリレーでどんどんデータを掻き出していかないと、データが溢れてしまい、DAWに書き込むべきデータが抜け落ちてしまう。これが録音時におけるノイズというか、音抜けとなるわけだ。

レイテンシーとバッファサイズの関係

通常はこの出力バッファと入力バッファは同じサイズに設定されるが、システムによっては別々に設定できるケースもある。

さて、ここでバッファサイズと、レイテンシーの関係を考えてみよう。バッファサイズはサンプル数で設定するのは、前述の通り。たとえば44.1kHz/24bitのフォーマットで128サンプルを設定した、としよう。すると1サンプル分の時間は、下のようになる。

1÷44.1kHz=0.0227msec

128サンプルのバッファサイズを設定したのであれば、レイテンシーは下のようになるわけだ。
0.0227×128=2.902msec

もし、サンプリングレートを96kHzにしたら、1サンプル分の時間は
1÷96kHz=0.01msec
(128サンプルで約1msec)

192kHzにしたら
1÷192kHz=0.0052msec

このように、同じ1サンプルであっても、高いサンプリングレートだと、レイテンシーは小さくなるというのも知っておくといいだろう。とはいえ、これはあくまでもバッファサイズだけを元にした理論値であって、実際にはそううまくはいかない。

たとえばここ最近チェックした、Native InstrumentsのKOMPLETE AUDIO 6 MK2の44.1kHzでバッファサイズ128サンプルの場合のレイテンシーは9.14msec、SteinbergのUR-RT4で16.37msec、PreSonusのQUANTUMで6.30msecといった具合で、理論値とはだいぶ開きがある。

【44.1kHz/バッファサイズ128サンプルの測定結果】

もっとも、このチェックに使っているCenTranceのASIO Latency Test Utilityでは、オーディオインターフェイスの出力と入力をつないでしまうループバック接続をしており、出力レイテンシーと入力レイテンシーの和を測定している。仮に出力レイテンシーと入力レイテンシーが同じであるとすれば、先ほどの2.902msecの倍、つまり5.804msecとなるはずなので、QUANTUMはかなり理論値に近いといえそうだが、それでも多少のズレがある。これはどういうことなのだろうか?

実はこのバッファはドライバー内にある1つだけではなく、DAW内にもプラグインの処理時間を調整するためのバッファがあったり、オーディオインターフェイス内にも一時的にデータを貯めるバッファがあり、ここでロスが生じる。測定に用いているASIO Latency Test Utilityの場合、ソフト内にバッファは存在しないと思うので、オーディオインターフェイス内のバッファであったり、その他の処理にかかる時間によって違いが出てくるのだと思うが、条件を揃えても製品によって結構差があるのが興味深いところではある。

様々な部分にバッファはある

小さければそれでOK、ではない?

では、ユーザーはどこまでこのレイテンシーに気を使う必要があるのだろうか? まず、オーディオインターフェイスを使った音楽リスニングだけが目的であれば、レイテンシーはまったく気にする必要がない。レイテンシーとはプレイボタンを押してから、実際に音が出るまでのタイムラグなので、それが0.01秒だろうが0.2秒だろうが、ほとんど関係ないだろう。バッファが足りなくなるリスクを考えれば、バッファサイズは最大にし、レイテンシーを最大にするのが一番安定して聴けるのだから、バッファサイズを小さくするのは、ナンセンスと言っていいだろう。

このレイテンシーを小さくするのに大きな意味を持つのがソフトウェア音源をリアルタイムに演奏する場合だ。MIDIキーボードを弾いて鳴らす場合、もしレイテンシーが大きいと鍵盤を押してから音が発生するまでにタイムラグが生じ、かなり気持ち悪く、うまく演奏ができない、という問題が生じる。そのためできる限り、バッファサイズを小さくする必要があるのだ。

また、オーディオのレコーディング時のモニタリングにおいてもレイテンシーが大きな意味を持つ。たとえばギターを弾いてアンプシミュレーターを掛けた歪んだ音をモニターする場合、レイテンシーが大きいと弾いてから音が出るまでタイムラグが生じて、気持ち悪く、うまく演奏できなくなってしまう。その意味でできるだけバッファサイズを小さくしたいところだ。でも、それでも厳しい場合は、レイテンシーは気にせずに、モニターだけはハードウェアのエフェクトを使い、DAWには生の音を録ってしまうというのも手。再生時に、プラグインのエフェクトを使えば、再生だからレイテンシーは気にしなくていいのだ。同様にボーカルをレコーディングする際のリバーブも、DAWから返すのではなく、オーディオインターフェイス搭載のDSPによるリバーブなどを返せば、レイテンシーを気にせずに録っていくことが可能になる。

では、そのレイテンシーをゼロにできれば、それが理想なのかというと、実はそうでもないのも面白いところ。これについても、少し解説しておこう。そもそも空気中を伝搬する音は距離によってレイテンシーが生じる。実際スピーカーを前に音をモニターする場合、そのスピーカーからの距離によって、結構なレイテンシーが生じるのだ。

スピーカーからの距離によってもレイテンシーが変わる

そのレイテンシーは小学校の算数で習った下の公式によって求められる。

時間=距離÷速さ

ここでいう速さとは音速のことで、約340m/sec。したがって、もしモニタースピーカーまでの距離が1mあったとしたら、レイテンシーは下のようになる。

1m÷340m/sec=2.94msec

もし、3mも離れていたら約9msecもの遅れとなるのだ。通常の世界でこれくらのレイテンシーがあるのだから、あまりレイテンシーに神経質になりすぎなくてもいいだろう。

ここでちょっと面白い事例を紹介しよう。例えばスネアドラムにマイクを取り付けて、これをオーディオインターフェイス経由でヘッドフォンからモニタリングしたとする。スネアとドラマーの耳は通常60cm程度あるので2msec程度のレイテンシーが生じる。しかし、サンプリングレートを上げて、バッファサイズを32サンプルなどと小さくして2msec以下のレイテンシーまで縮めてしまうと、これは本来、空気を通じて伝搬される音よりも先にヘッドフォンから聴こえてしまう、タイムマシンのような珍現象が起こるのだ。これは極端な例ではあるけれど、レイテンシーというのはそのようなものだ。

回りくどい面もあったとは思うが、オーディオインターフェイスのレイテンシーとバッファサイズの関係を、理解いただけただろうか? これらをある程度分かった上で、バッファサイズの設定を行なうと、効率的で正しいオーディオインターフェイスの活用ができるようになるはずだ。

藤本健

 リクルートに15年勤務した後、2004年に有限会社フラクタル・デザインを設立。リクルート在籍時代からMIDI、オーディオ、レコーディング関連の記事を中心に執筆している。以前にはシーケンスソフトの開発やMIDIインターフェイス、パソコン用音源の開発に携わったこともあるため、現在でも、システム周りの知識は深い。  著書に「コンプリートDTMガイドブック」(リットーミュージック)、「できる初音ミク&鏡音リン・レン 」(インプレスジャパン)、「MASTER OF SONAR」(BNN新社)などがある。またブログ型ニュースサイトDTMステーションを運営するほか、All AboutではDTM・デジタルレコーディング担当ガイドも務めている。Twitterは@kenfujimoto