#003 ループオーディオ その3
こんにちは。ノイジークロークの金井です。
ループその3です。今月もループについてまとめていきたいと思います。
過去記事はこちらからどうぞ。
#001 ループオーディオ その1
#002 ループオーディオ その2
前回までの振り返り
さて先月までの2回の連載で、ループについて解説を加え、イントロ付きループの解説とその作り方について説明を行ってきました。そこまでで一通りの内容は話したのですが、この第3回目の記事ではメタデータを使わないデータのループについて話していきたいと思います。
メタデータを使えないのでまるまるループ
まず何らかの事情でメタデータを読み込めない、イントロ付きループも出来ないから、まるまるループしたいという場合です。稀にあります。この場合、データの最後に到達したら先頭に戻るループに鳴りますが、もちろんイントロありの曲を流したらループ後にもう一度イントロが流れてしまいます。またデータの途中に戻るということができないため、ループ時の質感を整えるのも難しくなってきます。
最後から最初へのループ波形
データ冒頭を残響込みにした場合は、初めて聞いた際に残響が聞こえるという違和感を覚えますし、冒頭に残響がない場合は、ループした際に残響のつながりがないため違和感を覚えます。この実装仕様で満足行くループBGMにしたい場合、コンポーザーが構成を工夫するなどで曲自体に手を加える以外の有効な手段がないのではないかと感じます。ただ労力の割にどうしても上手く行かない場合も起こりうるため、そもそもの実装がなんとか出来ないかを考えたほうが良いんじゃないかなと感じます。
メタデータを使わないイントロ付きループ
メタデータを使わないイントロ付きループの実装でよく紹介されるのは、イントロ部分とループ部分を時間差で再生し、ループしたい時間にループ部分が再生されるようにするという方法です。
イントロとループ部分を分け、プログラム側でイントロが終わるタイミングでループ部分を再生することで、メタデータ無しでイントロ付きループのBGMを実装することが出来ます。ただこの実装では、イントロが終わるタイミングを計測する時間の精度によっては2つのオーディオデータが綺麗に繋がらず、無音がループ時に一瞬発生し、クリックノイズが発生してしまう恐れがあります。
一般的な48kHzのデータの場合、1サンプルは約21μsecなのですが、そのためフレーム単位での更新では全く精度が足りないですし、ms単位の経過時間を取得できてもループする秒数によってはノイズが発生する可能性があるのではないかなと感じます。
この問題をデータ側で避けるために、リバーブテイルを含んだ状態のデータを使ってループを実装する方法が取られることが多いでのはないかと思います。
リバーブテイル込みデータでのループ - 概要 -
再生時間計測の精度によってループ時に一瞬無音が発生してしまうと前の項で触れましたが、この問題をデータ側で回避するにはリバーブテイル込でデータを書き出すという方法があります。リバーブテイルとはDAWでループ再生をせず最後の小節まで再生した際に聞こえる最後のリバーブ成分のことです。またこのリバーブ成分の有無こそ、ループ処理を行った際にループ前後の違和感を発生させる主な原因でした。
前の項目でのループ実装は、イントロが再生開始してから経過時間を計測し、ループを再生する時間になったらループ部分を再生するという実装でした。そして、時間の精度によってはイントロ部分とループ部分に無音が生まれ、クリックノイズが発生する恐れがあるという話でした。
しかしリバーブテイルがあるとその無音部分にイントロ部分のリバーブが残り、ある意味フェードアウトともに再生が終わるようなデータとなるためクリックノイズを避けることが出来ます。更にいうと、このリバーブテイルがあるおかげでループ時に前のセクションのリバーブが残ることとなり、ループ時の質感もほぼDAWで聞いているときのようなものとなります。
言葉だけではイメージが掴みづらいと思いますので、ここからは動画を交えて実装イメージについて説明していきます。
リバーブテイル込みデータでのループ - 実例 -
まずイントロ部分とループ部分をリバーブテイル有りで、それぞれレンダリングします。サンプルではそれぞれ4秒のテイルを設けています。
そのレンダリングデータを単体で聞くと、上記の動画のようになります。
ループ情報を埋め込まないので、データとしてはこれで完成です。
次に実装イメージについて、DAW でシミュレーションしていきます。まず、イントロを再生し、ループが再生される2.4秒後にループ部分を再生します。
次にループが再生されたタイミングから、9.6秒後にもう一度ループデータを再生します。
こうすることによって、リバーブテイルがループ冒頭にミックスされることとなるので、音色のループ前後の質感も極めて自然なものとなります。以降はループが終了するまでこの処理をひたすら繰り返すことで、ループを実現することができます。
前述の通り、この方法であればループを再生するタイミングが遅れた場合でも、ノイズを防ぐことができます。ただ再生が遅れる以上、ループ時のテンポのゆらぎはどうしても発生するので、曲の性質によって向き不向きがあるかもしれません。またWwiseを使用し、インタラクティブな遷移を実現するために、Interactive Music Hierarchyで実装をする場合には、波形のループ情報が読み込まれないため、同じ考え方で実装を行う必要があります。
なぜWwiseのInteractive Music Hierarchyだとこのような作り方をするかというと、曲のセクションを状況に合わせて切り替えるというようなインタラクティブな実装を行う際には遷移先が複数個あることが当たり前だということが関わってきます。遷移先が幾つもある場合、曲の冒頭に鳴っているべきリバーブ成分がその遷移分必要となるのですが、そのことと、予めリバーブ成分をミックスしてデータを書き出すメタデータのループ波形との相性が非常に悪いのです。
ループ情報ありデータとの比較
メタデータでのループと比較したときにこの作り方の問題点は2点ほどあります。
まず、リバーブテイル込みデータの実装では、プログラム側の計測時間の精度によっては、ループするタイミングに意図しない揺れが発生する可能性が常に存在するということです。この問題に関してはプログラムの領域となるため、サウンド制作側で解決することは難しく、プログラマーの力が無ければどうすることもできません。出来ることがあるとしたらミドルウェアを導入してもらうということだけかと思います。
次に、レンダリングするのがメタデータのものに比べると若干手間がかかるということです。リバーブテイル込みの場合には、単純にレンダリングするわけにはいかず、どの音をイントロに入れ、ループに入れないのかというセクションの音の持ち方について、実装時の最終形を想定しながら判断を行う必要が出てきます。またループ情報から自動的にループ設定を行うことができないため、実装の手間も基本的には増える傾向にあります。
まとめ
これまで見てきたように、実装方法によってベストなデータの書き出し方が存在します。そして実装方法とデータの作り方が食い違うと、不要な作業が発生するだけでなく、意図しないノイズが発生する可能性も高まります。
そのためゲームに音楽をつける際には、イントロ付きループができる/できないだけでなく、実現したい楽曲の遷移はあるのかということや、その遷移を踏まえるとどの方法で実装を行うとベストなのかという、曲に関する仕様を事前に擦り合わせていく必要が大いにあるのではないかと感じています。
以上で今回の記事は終わりです。ループだけでかなり長くなってしまいましたが、一旦ループの話題はここまでにしたいと思います。より実装に踏み込んだ話は内容がまとまり書ける気がしたら書きたいと思います。
次回は未定ですが、効果音に関する記事がかけたらなと思います。
それではまた来月。
#ノイズなアカデミー #ゲーム #ゲーム業界 #音楽 #ゲーム音楽 #ゲームBGM #効果音 #サウンドデザイン #DAW #Reaper #ループ音楽 #作曲