#007 ボイスのダッキング処理について
こんにちは。ノイジークロークの金井です。
わかりやすく書けるような内容がさっぱり思いつかなく困り果てたため、最近気になっているダッキング処理について書いていきたいと思います。
ほぼ自分の思考整理のための記事になってしまっていますが、何らかのお役に立てば幸いです。
ダッキングとはなにか
g200kgさんの偏ったDTM用語辞典によると、ダッキングとは「『身をかがめる』という意味で、メインの音声が鳴る際に他の音を絞って目立たせる事」とのことで、例えばボイスが再生されるときにBGMが下がるような処理をダッキングと言います。ラジオでパーソナリティーが喋るとき、それまで流れている音楽が小さくなりますが、この処理もまさしくダッキングといいます。
この処理はゲームオーディオの分野では広く使われていますが、音楽制作でも、特にダンスミュージックの分野で広く使われています。
音楽制作ではサイドチェイン入力にキックなどの信号を送り、その入力を使ってコンプレッサーを動作させるというやり方が一般的なやり方ではないかと思います。ゲームオーディオの場合は、このダッキングシステムが一機能として存在することが多く、サイドチェインのルーティングなどせずとも、もっと直感的に実装を行うことができます。
ダッキングは比較的ポピュラーな処理で、まず実装を要望されることが多い機能だと感じています。またゲームエンジンの標準オーディオでも実装可能なため、プログラマーの方が実装してしまうケースもあるのではないかなとも思います。
処理の流れ
次にボイスが再生されるときにBGMの音量が下がる場合の、処理の流れについて見ていきましょう。番号をつけて順番に書いていくと下のようになります。
1. ボイスが再生される(トリガー)
2. BGMの音量が下がる
3. ボイスが停止する
4. BGMの音量が元に戻る
見てお分かりの通り非常にシンプルです。ボイスが鳴ったらBGMが下がる、それだけです。
でもちょっとまってください。ボイスが再生されるといっても、セリフの途中に無言の部分があるボイスはどうなるのでしょうか?またBGMの音量が下がると言ってもどれくらい下がるのでしょうか。また聞こえやすくすると言っても、単純に音量を下げるだけで本当にいいのでしょうか。
この事について考えるために、ダッキング処理を上から順に見ていき、ダッキングについての理解を深めていきましょう。
1.ボイスが再生される(トリガーがONになる)
ボイスが再生されるという工程について見ていきましょう。(以後は便宜上、ボイスの再生/停止をトリガーのON/OFFと記載していきます。)
楽曲制作でサイドチェインコンプでのダッキングを行ってきた人には意外かもしれませんが、大体ゲームのダッキング機能にはThresholdは存在しません。そこでまずゲームで使われる通常のダッキングについて触れていき、次にThresholdを設定するダッキングについて触れていきます。
ダッキング機能を使う場合
まずダッキングの設定にThresholdが存在しない、通常のダッキング処理についてみていきます。
この場合には大まかに言うと、ボイスファイルが再生されているかどうかによって、トリガーのON/OFFが切り替えられます。そして、トリガーがONになることによって、予め指定した値まで音量を下げるというような処理が行われることが多いです。
ただこの場合、台詞の間に無音が含まれている場合にもダッキングが発生してしまい、結果的に何も流れていないのに音楽が小さいという現象が発生してしまいます。
このような側面がありますが、なによりも手軽にダッキングを設定することが出来ます。
音量を取得しダッキングする場合
次に音量を取得しダッキングする場合についてみていきます。この場合はThresholdが存在します。ただ存在するとは書きましたが、この実装を行う場合は自分でバスの音量を取得し、その値を元に処理を行うように実装する必要があることが大半です。
この場合、無音時にはダッキング処理を行わないというような挙動にすることが出来ます。また処理部分も自分で設定できるため、音量によってダッキングする音量を変化させることも出来ます。つまり、サイドチェインコンプでのダッキング処理に酷似していきます。
ただこのようにミドルウェア内で値を取得し処理を行う場合、下の注意点に気を付けつつ実装を行う必要があります。
・コンフィグ設定によってボイスのボリュームが変動した場合にも意図した挙動となるか
・位置情報による減衰が行われる場合、意図した挙動となるか
・ボイスをミュートした場合にダッキングが発生しないようになるか
ボイスの音量が動的に変わったりユーザーの設定によって変わるため、この側面を考慮に入れた実装を行う必要があります。
2.ダッキング処理について
次にトリガーがONになった時、BGMに対して行われる処理について見ていきたいと思います。
これまでに上げた例では、ボイスを聞こえやすくするためにBGMの音量を下げると書いてきましたが、実際にはBGMの音量を下げる以外のことも行われていることがあります。
行われる処理について、今思いつく限りでまとめると下の通りになります。
1. 音量を下げる
2. Dynamic EQ
3. Dynamic EQ with MS Processing
4. その他
そもそもなぜ音量を下げる以外の方法が採られるのかというと、BGM全体の音量が下がると今度はBGMが聞こえづらくなったり、BGMの音量が波打ってあまり良い印象を与えないためです。
ボイスが聞こえづらいということはユーザーにストレスを与え、集中が切れてしまいますが、ボイスが聞こえやすくなったがBGMが小さいというのも、それはそれで集中が切れる要因となります。目標はあくまでも自然にボイスが聞こえ、かつBGMも自然に聞こえるという状態です。
音量を下げる
まず音量を下げるという処理についてです。この音量を下げる処理が、ダッキングで広く採用される処理だと思います。
通常のダッキング機能を使う場合は、予め任意の音量値を設定し、どんなに大きいボイスであろうと小さいボイスであろうと、その音量だけ下げるという実装となります。音量を取得したダッキングの場合は、トリガーの音量によってBGMの下げ幅を変更することが出来ます。
音量を変化させるとBGMの全体音量が丸々小さくなります。ただこれは下げ幅を慎重に調整しないとボイスは聞こえるが音楽がよく聞こえないということになったり、音楽が波打って気持ち悪いという印象に繋がります。また慎重にやりすぎて、ボイスが聞こえづらいままになるというのも、やりがちな失敗の1つだと思います。
Dynamic EQ
次にDynamic EQです。歌付きの楽曲をミックスダウンするときに、ボーカルが他の楽器に埋もれてしまわないよう、バッキングの中域をEQで下げる処理を行うことがあります。その手法をゲームのダッキングでもそのままやるというのが、この方法です。具体的にはトリガーに対して音量を変化させるのではなく、EQを使って特定の帯域の音量のみ下げます。
この方法であれば、音楽が小さくなったとあまり感じないが、ボイスは聞き取りやすいという結果をもたらすことが出来ます。ただEQで加工するわけなので、そもそもミックスに関する造詣がないと、効果があまり無い上に曲のバランスが悪くなるという結果になったりします。
音量の場合はBGM全体のバランスは変わりませんが、EQだと一部のバランスが崩れるわけですから、慎重に調整を行う必要があります。
また注意しなくてはいけないのは、音楽と違ってボイスは話者が一人ということがかなり珍しいということです。
そのため細かく考えるなら、話者によって音量を下げる帯域は変化させる対応が必要かもしれません。もしくは対処するボイスを男女の2つのタイプに分けて、それぞれで汎用的に対応をするためにQ幅を広めに取った処理を実装するなどが考えられます。
Dynamic EQ with MS Processing
上記のDynamic EQからの派生として、 BGMをMS処理した上でMid成分のみにEQで処理を行うという方法も考えられると思います。この方法だと、EQによる変化を隠しつつも、ボイスの聞き取りやすさを確保することが出来ます。
ただミドルウェアやゲームエンジンの機能でMS処理を行うための機能が備わっているのを見たことがありません。そのため自分でプラグインを自作するか、WAVの段階でMid/Sideの2つの波形を用意しておき、同時に再生するという方法を取る必要があるかと思います。
その他
上記の方法以外にも、CEDEC 2020でベイシスケイプの金子昌晃さんが触れていた、BGMを予め高域と低域カテゴリに分けてステムデータを出力し、ダッキング時に片方は音量を下げ、片方はEQを行うというような方法もあります。
この講演では爆発音などの、低域が充実した効果音に対するアプローチとして紹介されていましたが、ダッキングにより音量の揺れの影響が一部の楽器に限定されるので、違う目的にも発展させることができるのではないかなと感じています。
以上でトリガーとダッキングの処理について話し終えました。ただ、この2つを設定だけでは満足行くダッキング処理を行うことは難しいです。
ダンスミュージックを制作したことがある場合は理解してもらえると思うのですが、ダッキングはなんといっても音量の下げ幅とリリースタイムによって、処理が自然かどうかであったり、ダッキング処理の気持ちよさが大きく変わります。
そこで次はダッキング時のアタックタイムとリリースタイムについて触れていきます。
3.アタックタイムとリリースタイム
アタックタイムとリリースタイムの設定項目は、大抵のダッキング機能に存在すると思います。この値を変えることで、トリガーがONになった場合、どのくらいの時間をかけてダッキング処理を行うか、もしくは無加工の状態に戻すかということを調整することが出来ます。
アタックタイムに関しては、比較的早めの値に設定すれば問題ないかと思います。しかしリリースタイムに関してはダッキングの種類(付属のダッキング機能か、音量を取得しダッキングする場合か)によって、調整方針が変わってきます。
通常のダッキング機能の場合
通常のダッキング機能の場合、リリースタイムはボイスデータが終わってからどれくらいで元の音量に戻るかというところに影響します。あまり早すぎるとBGMの音量が急激に変化し、違和感を生じさせることが有り、遅すぎると台詞が終わってもBGMの音量が小さいままとなってしまいます。ただこの適切な値は、実際のBGMとボイスによっても変わるため、トライ&エラーで調整をしていくしかないのではないかと思います。
また通常のダッキング機能の場合、ボイスデータの終わりまで再生しきらないとBGMが元に戻らないということがあります。そのため、例えばボイスデータにリバーブがかかっており、そのリバーブがセリフが終わっても長く続く場合に、セリフが終わったけれどもBGMは小さいままという状態になってしまうことがあります。
この場合は実装を工夫するか、レベルメーターを使ったダッキングに変更する必要があります。
音量を取得しダッキングする場合
次にレベルメーターなどから音量値を取得し、ダッキング機能を自分で実装する場合です。この場合リリースタイムは、通常のダッキング機能に比べるとよりシビアに設定する必要が出てきます。
あまりに短い場合、セリフの息継ぎでBGMの音量が一度復帰してしまうため、所謂ポンピングエフェクトが発生してしまい、違和感のある音になってしまいます。また長すぎる場合は、通常のダッキング同様にセリフが終わってもBGMが復帰しないということが起こります。
そのためこちらに関しても実際に検証をしながら調整をしていく必要があります。また場合によっては、取得した音量の値自体も加工することも視野に入れる必要があるかもしれません。
ダッキング処理が始まるタイミング
これまでの記述では触れておりませんでしたが、Attackを0msにしようと、標準機能では基本的にボイスが始まるよりも前にダッキング処理を行うことは出来ません。常にボイスが再生→ダッキングという順番で処理が行われます。
ボイスが再生されるよりも前にダッキングを行いたい場合は、やはり自分で実装を行う必要があります。具体的には音声を2つのバスへとルーティングし、片方のバスで音量を計測するのみとし、もう片方でDelayをインサートし、BGMを先行して下げたいとおもう時間分、再生を遅らせるという処理に鳴るかと思います。
ただその場合ボイス再生にレイテンシーが発生するため、演出が意図したタイミングで再生されなかったり、口パクがずれてしまったりなど他セクションでの思わぬ不具合等に繋がる可能性があるため、そのレイテンシーの補償をどうするかなど、セクションを越えて事前計画が必要なのではないかなと思います。
おわり
以上でダッキング処理の各工程についての説明は終わりとなります。
シンプルな処理ながら、実際にどう実装していくかを考えていくと意外と考えるところがたくさんありました。どんなにシンプルに実装をするといっても、例えばリリースタイムをどうするかによって処理の自然さには大きく違いが生まれてきますので、もしチームにサウンドの人がいる場合は値の調整だけでも投げてみると良い結果になることが多いのではないかな、と思います。
また実装する側としても、複雑にやったからといって、結果が良くなるとは限らず、むしろ挙動の制御が大変だし調整しきれないのであればシンプルなやり方のほうが結果は良くなるという点は常に肝に銘じておく必要があるなと、今回強く感じました。
というところで今月の記事はここで終わりです。最後までお読みいただいた方ありがとうございました。それではまた来月。
この記事が気に入ったらサポートをしてみませんか?