レイテンシーについて

レイテンシーは「遅延」という意味です。コンピュータを音楽に使う上で最も厄介で、デジタルでオーディオを扱う上で、避けては通れない基本的な特性です。

デジタルオーディオでのレイテンシーの定義は「音が作られてから音が聞こえるまでの時間」です。この差は、オンラインで音楽を演奏するときには可能な限りゼロに近いものであってほしいものです。例えば、ピアノを弾くとき、指が鍵盤に触れてから5秒後に音が聞こえてくるとします。自分の演奏と聞こえてくる音が大きくずれてしまっては、実際問題、楽器の演奏はできなくなってしまいますね。また、二重奏で演奏したい場合、相手が音を出してから5秒後にその音が聞こえてくる、あなたは相手のタイミングに合わせて演奏しますが、相手にはその音が遅れて聞こえるので、それに合わせて演奏し、あなたはそれが遅れて聞こえるのに合わせてさらに…と、これでは演奏できません。携帯電話でも、電話をかけるとエコーがかかると思いますが、自分の声が遅れて聞こえると、話を続けるのが大変ですよね。

人間の耳は非常に優れていて、驚くほど小さな遅れでも聞き分けることができます。通常、100ms(ミリ秒の略で1秒の1000分の1、つまり100msは10分の1)以上の遅れは、はっきり分かるといわれているので、オーディオを扱うソフトウェアは50ms以下のレイテンシーを目指して設計されています。それでも、キーを押してから50ms後に音が出るキーボードを演奏すれば、ほとんどの人がレイテンシーをはっきり感じますし。デジタルオーディオ関係のフォーラムで検索すれば、多くの人が、それよりはるかに小さいレイテンシーも分かると言っています。

ただ、リアルでも、演奏して出た音がすぐに相手に届くわけではありません。10m離れて演奏していれば、音波がその距離を移動する時間が必要なので、実は33msのレイテンシーが発生しています。でも、私たちは、これを補いながら楽しく演奏できていますよね。

Solocontuttiは、インターネットに接続されたミュージシャン間のレイテンシーを最小限にするように設計されていますが、正しく機能するためにはユーザーの皆さんの工夫も必要です。このセクションでは、レイテンシーとその原因、そしてレイテンシーを最小限に抑えるためにできることについて解説します。


サウンドカード

コンピュータのサウンドカードにはレイテンシーがつきものです。その理由は「バッファリング」と呼ばれるものです。サウンドカードは、マイクや他の音源から音を受信すると、これをデジタル情報に変換する必要があります。これを行うのが「サンプリング」と呼ばれる処理です。サンプリングは、映像をコマ撮りで撮るのに似ていて、一定時間に決まった回数、連続して音のサンプルをとることで連続した音を記録します。プロ用のサウンドカードは1秒間に96,000以上のサンプルをとりますが、一般的な高品質の録音製品は48,000で、Solocontuttiアプリはこれを使っています。(人間の耳で感知できる音は20Hz~20kHzと言われています。サンプリング理論では、最大周波数がサンプリングレートの半分とされているので、48.000サンプル/秒なら24kHzまで再現され、この範囲をカバーしているといえます)

サウンドカードは、個々のサンプルをその都度変換するのではなく、いくつかのサンプルを集めてこれを一度に変換します。この単位を「バッファ(またはフレーム)」と呼びます。つまり、バッファのサイズが240サンプルのサウンドカードは、デジタルデータへの変換を開始する前に240サンプルを収集することになります。つまり、処理を開始するまでに少なくとも240サンプル分のレイテンシーが発生します。時間的には 240/48.000 = 0.005 秒=5ms 。さまざまなバッファサイズで、サウンドカードのバッファリングによって生じるレイテンシーをまとめてみます。

バッファサイズレイテンシー(ms)
601.25
1202.5
2405
48010
96020
192040

この表を見ると、バッファを60サンプルにすればレイテンシーが最小になると思えますが、実は、そう簡単ではありません。単位が小さくなればなるほど、これを処理するための手間が増えるため、コンピュータとネットワークの仕事が増えてしまいます。60サンプルのバッファを処理することは、マシンによってはかなりの負荷がかかります。古いコンピュータなら240サンプルでも難しいかもしれません。コンピュータに負荷がかかると、音割れや音飛び、音のズレや歪みなどが目立ってきます。また、バッファを小さくすると、逆に余分なレイテンシーが発生する場合があります。適切なバッファサイズを見つけることは、コンピュータをセットアップする上で重要なステップです。

次のステップは、サウンドカードがフレームを処理するためにかかる時間です。この時間はフレームの長さより短くなければなりません。そうでなければカードがそれ自身に追いつくことができませんから。例えば、256サンプルのフレームはを処理するのに、4msかかるとします。それだけでなく、サウンドカードとドライバが余分なバッファリングを使用することがありと、さらにレイテンシーが増えます。一般に、優れたカードほどレイテンシが低く、PC内蔵のサウンドチップはレイテンシーが高い傾向があります。プロ用のサウンドカードはレイテンシーを1msまで抑え込んでいるものもあります。

サウンドカードは、データを処理して次の工程に渡します。これは「ドライバ」によって行われますが、古いWindowsのドライバとマルチメディアシステムは、ここで数百ミリ秒ものレイテンシーを生成する悪名高いものでした。ここで登場したのがスタインバーグ社によって開発された「ASIO」ドライバです。今では、音楽の世界ではデファクトスタンダードで、プロ用のサウンドカードメーカーだけでなく、民生機でも広くサポートされるようになっています。

Windowsを使用している場合、ASIOドライバを搭載したサウンドデバイスは、サウンドカードとドライバの両方で非常に低いレイテンシーを実現しています。SolocontuttiはASIOとWDMドライバで動作しますが、たいていの場合は、ASIOがベストです。ASIO対応のハードを持っていない場合は、ASIO4ALLという代替手段もあります。新しいバージョンのWindowsではレイテンシーは大幅に改善されましたが、ASIOは標準としてすっかり定着しています。

一方、MacOSとiOSは、標準で低レイテンシーを実現しています。また、Androidは最近になって低遅延オーディオの機能が追加されたばかりで、多くのデバイスはまだ対応できていません。また、Macでは、外部オーディオ・インターフェイスを使用するとさらに良くなります。これらはiOSやAndroidでも使えるものが多いです。

Solocontuttiは、データを変換、圧縮し、ネットワークに送信します。同時に、Solocontuttiは受信したストリームを解凍し、ミキシングしてサウンドカードに送ります。最新のコンピューターであれば、この作業は数ミリ秒で完了し、バッファサイズが240以下でも問題なく動作します。

こうして、データがネットワークに出ると、次のステップに進みます。


ネットワークのレイテンシー

コンピュータからネットワーク上の他のコンピュータに情報を送信するときにも、レイテンシーが発生しますが、信号が1000キロメートル移動するのにかかる時間は、楽器からマイクまで音が50センチ移動するのにかかる時間よりも短いのです。また、ネットワーク接続の速度は、実は関係ありません。日常的に快適にインターネットを使える程度の速度があれば、これを高速なものに変えてもレイテンシーを減らすことにはつながらないのです。

水道管に例えて考えてみましょう。細い水道管の場合、一度に流せる水の量は少ないですが、流れる速度は速い、一方、水がゆっくり流れる太いパイプでは、一度に流せる水の量は多くなりますが、同じ時間で流れる距離はゆっくりになります。一般的に「ネットの速さ」と言われているものは、実は「ネットワークの『帯域幅』」であり、これはパイプの太さにあたります。水の速さではありません。

ネットワークの中でレイテンシーが生まれる主な原因は、データが最終目的地に到着するまでに、いくつかの中間地点を通過することです。その「停留所」ではデータを受け取り、渡す前に何らかの処理を行うため、停留所が多ければ多いほど待ち時間が長くなります。中継地点の数は、距離にも依ります。ヨーロッパとアメリカの間には大西洋横断ケーブルがあり、高速なリンクが提供されているため、停留所は、たいてい1つで済みます。一般的に近距離(3000km以下)であれば、20-30msのネットワークによるレイテンシーが妥当なところですが、実際は、国やインターネットサービスプロバイダによってかなり大きく異なります。

Solocontuttiは、UDPと呼ばれる非常に初歩的なプロトコルを使用することで、ネットワーク遅延の原因を回避しています。一方、ウェブブラウザは、HTMLとTCP/IPを使いますが、Solocontuttiアプリを使うには、これはあまりにも非効率です。HTMLやそれに類するものを避け、独自の高効率プロトコルを使い、TCPではなくUDPを使うことで、オーバーヘッドと待ち時間を大幅に減らしています。

しかし、そこには落とし穴があります。なぜ、TCPが多く使用されているのか。それは、TCPがデータの配信が確実に送信された順番に到着することを保証するプロトコルだからです。UDPは、速さを優先するあまり、この点が犠牲になっています。つまり、データが損失したり間違った順番で届いたり、あるいは元通りの音にして届けるには遅すぎるデータを、Solocontuttiが補わなくてはなりません。

Solocontuttiアプリが使用しているコーデック(音声圧縮や展開の方式)は、データの欠落を補うのに非常に優れていますが、これも限界があります。ネットワークの品質が一定以上低下すると、時折クリック音や極端な場合は音質の低下やドロップアウトが発生することがあります。これを補うには、ビットレートを下げて帯域を少なくするか、バッファサイズを大きくしてパケットを長くするしかありません。この場合、音質が低下したり、遅延が大きくなったりするので、これらの値を最適に調整することが、Solocontuttiアプリのセットアップで非常に重要な部分となります。


パートナーのPCに到着

いよいよ相手側のコンピュータに情報が届きます。デコード、ミキシング、サウンドカードへの送信、ヘッドフォンからの出力と、コンピュータは、音を送信するときと逆のプロセスを繰り返すため、ここでもレイテンシーが発生します。ただ、受信と送信とではバッファサイズの影響が異なります。例えば送信側のフレームサイズが240で、受信側のフレームサイズが120の場合、双方のバッファによって発生するレイテンシーは 240 + 120 = 360(7.5ms)になります。こちらは120だからといって相手も120で、120 + 120 = 240(5ms)…とは限らないということです。


まとめ

ここまで見てきた工程はとても複雑です。説明のためにここで、例を挙げて整理してみましょう例えば…

  • あなたは音楽用のインターフェイスを持っています。バッファは120、ハードウェアのレイテンシは2msです。
  • コンピュータは情報を処理し、ネットワークに送信するために1.5msを必要とします
  • ネットワークのレイテンシーは15msです。
  • もう一方では、あなたの友人がASIO4ALLを搭載した標準的なサウンドカードを持っており、バッファサイズは240、コンピュータはデータの処理に3ms必要で、サウンドカードとドライバのレイテンシは6msです。

サウンドカード内のバッファ = 120/48.000 = 2.5ms [合計 2.5ms]
→ ドライバとカードのレイテンシ = 2ms [合計 4.5ms]
→ PCでの処理=1.5ms[合計 6ms]
→ インターネット待ち時間=15ms[合計 21ms]
→ 他のPCでの処理=3ms [合計 24ms]
→ ドライバ&カードのレイテンシ=6ms [合計 30ms]
→ サウンドカード内バッファ=240/48.000=5ms   [合計 35ms] 


※この記事はこのページを元に作成しています。