[戻る]

ゲームのサウンド遅延問題とその対策

昨今のディスプレイおよびオーディオ環境では、 ゲームのサウンド出力タイミングが、映像出力タイミングと一致するとは限りません。 ゲーム機からサウンドと映像が同じタイミングで出力されていても、 機器の種類や接続経路によって、 最終的な出力タイミングにズレが生じます。

近年(2020 年現在)、各メーカーが 入力遅延問題 解消に向けて努力を重ねた結果、 ディスプレイで生じる映像の遅延はかなり解消されました。 しかしその一方でサウンド出力周りの遅延はあまりケアされていないようで、 遅延増大も発生しているようです。

ここでは、私が実際に遭遇したサウンド遅延の詳細と、 その測定方法、 およびどのようにして回避できたかについてまとめます。

この問題について、定まった呼称は存在しません。 「音声遅延」「発声遅延」「再生遅延」「音ズレ」「Sound lag」「オーディオ レイテンシ」など様々です。 ここでは、サウンド遅延という言葉を使っていきます。
注 1)この記事は、 手軽な電子工作を利用したサウンド遅延確認方法と、 遅延を回避する簡単な方法をまとめたものです。 ディスプレイの製品名を具体的に挙げたり比較することを目的としていませんのでご了承ください。

注 2)2020/08/29 時点の状況に基づいた内容となっています。 遅延をめぐる状況は流動的です。現状と合致しない可能性があります。

サウンド出力が遅延する様子

使用した機器と設定
  • 2020 年モデルの TV(国内メーカー製)
  • TV の設定は、工場出荷状態+ゲームモード
  • 接続経路は、ゲーム機 →(HDMI)→ TV

サウンド遅延発生状況
こちらは、PS4 のメニュー画面上でサウンド遅延が発生している様子を撮影した動画です。

サウンド遅延が発生している様子(60Hz で撮影)
音声と映像のズレが確認できる。
(注:後述しますが、遅延は TV 側で発生しています。PS4 側の問題ではありません。)

メニューのカーソル移動音が、 カーソル移動より若干遅れて発声されていることが確認できます。 しかし、遅れている感じがするものの、実際どの程度かがまだ不明です。 感覚量に頼っていては話が進まないので、測定してみます。

どの程度のサウンド遅延が発生しているのか計測

実際どの程度のサウンド遅延が発生しているのかを計測してみます。
音を可視化して高フレームレート動画撮影
ここでは、ローテクながら確実な方法を利用します。 音を何等かの方法で可視化し、 それをゲーム画面と一緒に高フレームレート動画撮影します。 そして、撮影結果をコマ送りで再生しながら遅延フレーム数をカウントし、それをもとに遅延時間を計算します。

音を可視化するため、共立プロダクツの 「音感知 LED 10 点タワー」 という電子工作キットを利用しました(予算 3000 円ほど)。 まずは動作テストのため、LED が音に反応する様子を高フレームレート動画撮影します。

共立プロダクツ「音感知 LED 10 点タワー」の動作テスト(240Hz で撮影、60Hz で再生)

コマ送りで確認したことろ、音 → LED 表示反映にかかる応答時間は 240Hz 換算で 1 フレーム未満でした。 応答時間はこの方法での計測限界以下であり、今回の目的での利用上問題ないことがわかりました。

ゲーム画面と音感知 LED を高フレームレート動画撮影
先ほどの PS4 メニュー画面を、音感知 LED と一緒に高フレームレート動画撮影します。

サウンド遅延を LED で可視化(240Hz で撮影、60Hz で再生)
無音動画ですが、右下の LED 列によりサウンド出力のタイミングが確認できます
(注:後述しますが、遅延は TV 側で発生しています。PS4 側の問題ではありません。)

この動画をコマ送りで再生し、 カーソル表示が更新されてからカーソル移動音による LED 点灯までの時間を計測します。 計測の結果、240FPS 換算で 28 フレーム、117ms のサウンド遅延でした。

映像の遅延をはるかに上回るサウンド遅延が発生していた

117ms!?
今回使用した TV は、 60Hz モードでの表示遅延は RTINGS によると ゲームモードで 15ms 程度の製品です。 一方、今回測定できたサウンド出力の遅延は 117ms でした。これはゲームモードでの測定値です。 表示遅延と比較して、はるかに大きなサウンド遅延が発生していることがわかります。

「117ms」はアップテンポな曲の「16 分音符」に相当する遅延
ゲームなどで使われるアップテンポな曲は 120BPM ぐらいのペースです。 120BPM とは、1 分間に 4 分音符が 120 拍の意味です。 これをもとに換算すると、16 分音符は (60s / 120 / 16) = 125ms です。 今回測定できたサウンド遅延は 117ms なので、16 分音符の長さと大体同じであることがわかります。

音ゲーで「16 分音符」遅延は許容できない
言及するまでもなく、ゲームの世界には「音ゲー」と呼ばれるジャンルが存在します。 音ゲーは、音楽のタイミングに合わせて操作を行うゲームです。 このようなゲームにおいて「16 分音符」の遅延は、とても大きな遅延であることは明らかです。

代表的な音ゲーである「太鼓の達人」(公式PV)
映像中のバチを両手で連打している時のペースが大体 16 分音符です

音ゲーはまだマシで、最悪なのは遅延キャリブレーションが不可能なジャンルのゲーム
音ゲーの世界では、映像やサウンドの遅延問題は以前から良く知られていました。 音ゲーには、大抵「遅延キャリブレーション」という機能が用意されており、 ゲームの初回起動時などに実行環境の遅延をユーザーの手で補正させています。 16 分音符などの遅延は違和感なくキャリブレーションできる限度を超えていますが、 救済措置があるだけマシと言えます。

問題は、音ゲー以外の一般のジャンルのゲームです。 サウンド遅延に対するキャリブレーションは、 サウンド遅延に合わせて映像やインタラクション側も遅延させることで行われますが、 映像やインタラクションの遅延は 入力遅延 と呼ばれ、 ゲームプレイに致命的な影響を与えることになります。 117ms のサウンド遅延を入力遅延も 117ms にすることで相殺する方法は、全く許容できません(ゲームにならない)。 このような事情から、サウンド遅延は補正することができず、 何のケアもされない素の遅延を受けたながらゲームプレイせざるをえない状態になっています。

サウンド遅延の回避方法

今回遭遇しているケースでは、 映像は遅延している様子は無く、 サウンド出力のみが遅延していました。 サウンド遅延は、TV 内部で生じている可能性が高いです。 したがってサウンドを TV に入力せず、 ダイレクトにスピーカーに出力できれば解決する可能性があります。 この方法で改善するか試みることにします。
音声のみ直接スピーカーに、映像のみを TV に出力する
マイコンソフト社の XDAC-1plus という製品を使うと、ゲーム機からの HDMI 出力を音声と映像に分離し、 音声のみをスピーカーへ、映像のみを TV に入力可能になります。

    ゲーム機
       ↓
    (HDMI)
       ↓
    XDAC-1plus →(HDMI 音声)→ スピーカー
       ↓
    (HDMI 映像)
       ↓
       TV

もしくは、サウンドバーを利用しても同じことが可能です。

    ゲーム機
       ↓
    (HDMI)
       ↓
    サウンドバー → サウンドバーのスピーカー
       ↓
    (HDMI 映像)
       ↓
       TV

こうすることで、TV 側に音声データが流れ込んでしまって TV 内部で遅延発生する前にサウンド出力させることが可能になり、 サウンド遅延問題を回避できます。

ここでは、サウンドバーを利用することにしました。 ただしサウンドバー内部でも 何らかのバッファリング処理が行われる可能性があるので、 完全な低遅延になるかどうかは製品次第です。
ここは補足が必要です。 サウンドバーを経由する際、 サウンドと音声のズレ補正に関わる EDID のリップシンク情報が書き換えられている可能性が否定しきれていません。 XDAC-1plus では、EDID 情報をスルーする機能を持っているため、 今回の実験での利用にはより適しています(残念ながら所持していないため試せていません。追試の必要があります)。
サウンドバー接続状態で、ゲーム画面と音感知 LED を高フレームレート動画撮影
サウンドバー接続状態で、先ほどの PS4 メニュー画面を音感知 LED と一緒に高フレームレート動画撮影します。

サウンドバー利用でサウンド遅延が解消した様子(240Hz で撮影、60Hz で再生)
無音動画ですが、右下の LED 列によりサウンド出力のタイミングが確認できます

サウンド遅延は解消した
計測の結果、240Hz 換算で 2 フレーム遅延、つまり 8.3ms のサウンド遅延となりました。 サウンド遅延は無事ほぼ解消しました。

残りの 8.3ms 遅延がどこから来るのかについては不明ですが、ここではこれ以上追求しません。 (サウンドバー内部での遅延が考えられますが、 そもそも計測で使用したカーソル音自体の冒頭に数ms の無音部がある疑惑があり、遅延発生源が切り分けしきれていません。)

サウンド遅延が TV 側の問題であることを確認

サウンド遅延が存在することはわかりましたが、 それが設定ミスなど他の原因によるものでないことを、 念のため(可能な限り)確認する必要があります。
TV の設定をすべて見直す
TV の設定により、サウンド遅延が増大する可能性が考えられます。 TV 内部で余計な処理が行われないよう、適切に設定する必要があります。 具体的には、ゲームモード ON、オーディオ圧縮系・フィルタ系完全 OFF 等々です。 これを踏まえて、TV の設定を完全に見直しましたが、遅延を改善することはできませんでした。

ゲームモード ON/OFF の比較
念のため、ゲームモード ON/OFF 時の動作の差異も観察しました。 ゲームモード OFF の状態では、 さらに大きなサウンド遅延を生じており、 映像側もそれに合わせて遅延し、 正確なリップシンクが成立することが観察されました。

ゲームモード ON にすることでリップシンクは失われ、 このモニタなりの低遅延動作の状態になり、 それがサウンド 117ms 遅延の動作ということのように見受けられました。

個体差やバグでないことを確認
個体差の可能性も考え、同発の同モデルの TV(シリーズ型番違い)でも計測しましたが、同じ結果を得ました。 また、ゲーム機も PS4 だけでなく複数種類を試し同様の結果を得ました。 何か見落としがあるかもしれないと思い、 試行錯誤した内容や測定値をまとめ、TV 製造元の製品サポートに問い合わせてみたところ「仕様です」との回答でした。

TV 内部でサウンド遅延が発生することを確認
比較実験として、
ゲーム機 →(HDMI)→ TV →(HDMI)→ サウンドバー

ゲーム機 →(光デジタル)→ TV
という接続順序も試しましたが、 いずれもサウンド遅延が発生した状態(240Hz で 28 フレーム相当 = 117ms 遅延)になりました。

接続経路とサウンド遅延発生状況についてまとめると、
  • ゲーム機 →(HDMI)→ サウンドバー →(HDMI)→ TV : サウンド遅延なし
  • ゲーム機 →(HDMI)→ TV →(HDMI)→ サウンドバー : サウンド遅延あり
  • ゲーム機 →(HDMI)→ TV : サウンド遅延あり
  • ゲーム機 →(光デジタル)→ TV : サウンド遅延あり
となります。 このことから、サウンド遅延発生位置が TV を経由する時点であることが確認できます。

サウンド出力が遅延する理由を考える

ここまでで、 サウンド遅延が存在することと、 それが TV 内部で起きていることを確認しました。

以上をふまえて、そもそもなぜこのようなサウンド遅延が発生するのかを考えてみます。 サウンド遅延が TV 側のバグによるものでないという前提かつ、 セオリー通りに考えたらこうだろうという推測に基づく内容になります。 正しいという保証はありませんので、ご了承ください。
TV 内部で何が起きているのか?(推測)
サウンドのバッファリング
サウンド出力などのストリーミング処理には、 大抵何らかのバッファリング処理が存在します。 バッファの構造は、リングバッファやダブルバッファなどの方式が考えられます。 ここではイメージしやすいリングバッファで考えることにします。 バッファ上には、サウンドのサンプル値が並べられています。

バッファ上には「サウンド書き込み位置」と「サウンド読み取り位置」という概念が存在します。 サウンド読み取り位置は、48KHz モードなら秒間 48000 サンプルの正確なタイミングで移動していきながら、その位置のサンプル値をスピーカーに出力していきます。 一方サウンド書き込み位置には、サウンド読み取り位置に追いつかれないように、 次々と新しいサンプルデータ(ゲームなどから入力されたサウンド)を書き込んでいきます。

サウンド書き込み位置がサウンド読み取り位置に追いつかれてはいけない
もし、サウンド読み取り位置がサウンド書き込み位置に追いついてしまったら、 未完成のバッファ上のデータをサウンド出力することになってしまいます。 その結果、無音状態になったり、ひどい場合はバッファ上の未初期化データを出力することになり、 耳障りなノイズが出力されることになります。

グラフィクスの場合は、レンダリング結果の生成が間に合わない場合、 せいぜいフレーム落ちなどが発生する程度で済むのですが、 サウンドの場合は生成が間に合わないと酷いノイズが出力されることになります。 このような理由から、サウンド処理はグラフィクス処理以上にタイミングにシビアです。

サウンド書き込み位置は安定的に更新できるとは限らない
サウンド読み取り位置は阻害要因が無いので安定したタイミングで更新できるのに対して、 サウンド書き込み位置は様々な要因により、安定したタイミングでの更新を行うことが難しいです。 昨今の TV は OS も動作していて、 たとえゲームモードで動作中であっても、 OS からのシステム音等をミキシング出力しなければならないなど、 ハードウェア化が難しい面倒な処理を沢山こなさないといけなくなっており、 サウンドに関わる内部処理の多くがソフトウェア実装になっていると推測されます。 そしてソフトウェア処理は、OS 側の介入などによりタイミングが乱される可能性があります。

安全性を高めるとサウンド遅延が増える
サウンド書き込み位置の更新速度が不安定であるにも関わらず、 サウンド読み取り位置に追いつかれないようにするには、 書き込み位置と読み取り位置の距離を大きくとる必要があります。 そして両者の距離は、サウンド遅延になります。

バッファリング処理が複数存在する場合、総遅延量はそれらの合算値になる
サウンド出力経路上には、バッファリング処理が複数存在する可能性があります。 例えば、フィルタ A の出力をフィルタ B に入力するというような処理が行われる場合です。 この場合、もし各フィルタ毎にバッファリング処理が存在すると、 各フィルタ処理毎に遅延が発生し、 総遅延量はそれらの合算値になるという事態が発生し得ます。

ただしこれは、教科書的に実装した場合の話です。 遅延を最小化しつつ複数のフィルタ処理を統合することは可能です。 ここでの問題は、遅延に無自覚に実装すると、簡単に遅延が増大しまくるので注意が必要ということです。

つまり遅延の増大は、昨今の TV モニタの仕様の複雑化が原因?
旧来の TV モニタは、TV 放送を受信して再生するだけの装置でしたが、 昨今は動画配信サービスに対応したり、インターネット閲覧に対応したりと、 複雑な処理をこなす必要があります。 各メーカーは、このような仕組みを自力で実装するコストを削減したいと考えていて、 Android などの既存 OS を搭載した機種も増えてきています。

既存 OS は、元々ゲームなどの応答速度が重要な用途を想定したものとは限りません。 このことが、今回の計測されたようなサウンド遅延の原因の一つになっていると考えられます。

根本的に解決するには

サウンド遅延の主な原因が昨今の TV の複雑化だとすると、 これは避けようが無い問題に思えます。

このような状況のなか、ゲームモードの音声入力を低遅延で出力するには、 TV が内部に持っているサウンド処理系とは独立した、 ゲームモード専用のサウンド出力経路を、 TV 側で用意する必要があると考えられます。 例えば 「ゲーム機 → サウンドバー → TV」相当の迂回経路を TV 内部に持たせ、 ゲームモードの場合はそちらが利用されるようにするというものです。

もはやユーザーレベルで手を出せる領域ではないので、 TV メーカー側での対応が必要になります。 というわけで対応お願いします。 (すでに対応されている製品があるなら知りたいです。買います。)

最後に

サウンド遅延のような評価が難しい問題が改善されるには、 かつて 入力遅延問題 がたどったように、 まず消費者間で広くこの問題が認識される必要があります。

そのとっかかりとして、 消費者側は、感覚に頼った曖昧な情報共有をしている状況から一歩先に進む必要があると考えます。 今回ここで紹介した方法(簡単な電子工作と一般的な機器でサウンド遅延計測)が、 何かの役に立つことを期待しています。


2020/08/29 初出
2021/04/30 最終更新
文責: よっしん

[戻る]