Impacterプラグインのブログ、第3弾です。前回までは、主に、このプラグインの物理的パラメータや、あなたのゲームの物理システムにいかに効率的に統合できるかについて、説明しました。今回は、Impacterのもう1つの面であるクロスシンセシス性能について、話を進めます。
Impacterブログの初回で簡単に説明した通り、いくつかの音を集めた「コレクション」を元に、このプラグインで斬新な別バージョンをいくつもつくり出すには、それぞれの音のImpact(インパクト)コンポーネントとBody(ボディー)コンポーネントを自由に組み合わる方法があります。さらに、バリエーションの数々をデザイナーが簡単に活かせるように、ランダム再生の設定まで装備しています。
さて、クロスシンセシスでつくり出されるバリエーションは、様々な音のシンセシスモジュールから、BodyのSinusoids(正弦曲線)とFilter Banks(フィルターバンク)コンポーネントと、ImpactつまりExcitation(励起)コンポーネントを使って生成されることを思い出してください。
ただ、クロスシンセシスといっても範囲が広いので、先に、独特のフレーバーをもったImpacterのクロスシンセシスから期待されるバリエーションについて、もう少し詳しく見ていく必要があります。Impacterを使ってユーザーがつくり出すバリエーションはリアルかつ一貫性があり、どのバリエーションも重複することはなく、元のサウンドと意味ある関連性を維持していることを、皆さんに実証したいと思います。また、同じ音が何度も繰り返されたり、逆に全く関係のない音が立て続けに再生されると、ゲームプレイ中のプレイヤーの没入感が音の反復で途切れてしまいますが、その心配はないとデザイナーに伝えたいです。実は、Impacterのクロスシンセシスの概要を分かりやすく説明するのは、思ったより難しいのです。
バリエーションを、目と耳で確認
Impacterを使うと、このプラグインにロードしたファイルと、 同じくロードされたほかのサウンドを、クロスシンセシスで処理できます。例えば、ファイルが12個あれば、最大144の組み合わせが可能です(特定のImpactやBodyのコンポーネントを、ユーザーがソースエディタで除外することができます)。すぐに明らかになることですが、インパクトサウンドが144個ともなると、各サウンドの具体的な違いを探すのは、聞くのも、見ることさえも、大変な作業です。
ご覧ください:
せっかくなので指摘しますが、これらを1つ1つ順番に聞いて、87番目までたどり着いたときに、11番目はどんなサウンドだったっけ、などと思い出すのは明らかに無理です...。
では、大量の音を分析するには、どうすればいいのでしょう?
次元削減
広範囲に次元削減してオーディオ解析するテクニックを使い、多数のサウンドの集合体を、2D平面に広げてマッピングして可視化できます。Lamtharn “Hanoi” Hantrakulのブログ『Klustr』と、それに付随するツール [1] や、ml4a(Machine Learning for Artists ツールキット)のAudio t-SNEビュア― [2] などは、オーディオの次元削減の結果を表すぴったりの例です。
インパクト音の潜在的な特徴を比較する
2D空間で音を「比較」する方法はいくつかあります。インパクトt音には直観的に分かる特徴が潜在的に存在し、それは物理的な特徴(硬い、柔らかい、跳ね返る、ぶつかるなど)であったり、衝撃を受ける側の物体や面の種類(ガラス、砂、木製など)であったりします。私たちは具体的に(数学的に)求めている音の潜在的な特徴を定義することはできませんが、ある音の様々なオーディオ特徴を抽出することはできます。
オーディオの場合、上にある元の時間領域信号の比較は、異なる音を比較する場合、理想の方法ではありません。幸い、1つ1つのサウンドを比較しやすい形に変換してくれるオーディオ分析技術が多数あります。後述するように、どのオーディオ分析方法を使うかは、次元削減で行われるプロットに、直接影響します。
変換方式を詳しく説明する文献は色々とありますが、今回のブログ記事では単純に、衝突系の音を変換した結果を、可視化した例を使うことにします。これらの変換方式の多くは、1次元の音声信号を2次元に拡張するもので、値のレベルが、色で識別できます。
オーディオ特徴 |
|
次元削減とは、結局は音の視覚的な比較を可能にすることなので、2つの音のMFCCの差に対し、STFTがどのように違うのかを、直観的に予想することができます。ただし、これでは「ドラム」「トロンボーン」「砂利」の音の潜在的な側面を比較するときほど、分かりやすくありません。それでも音のオーディオ特徴の違いに基づいて、音と音の潜在的な違いがある程度予測できる2Dマップを、作成できるかもしれません。
次元削減で、何が行われるのか
オーディオの特徴が分かったので、次元削減を使えば、音の集合体にある各サウンドに関連する一連の数値を「削減」し、(下図の通り)1つの音に対して2つの数値、つまり一対の数値に短縮でき、さらに都合の良いことに、この2つの数値をXY座標ととらえて2次元の平面にマッピングできます。肝心なのは、2D平面に表示される音と音の距離が、音の類似性や相違性を反映することです。ある意味、これは先ほど視覚化したすべての音(または特徴)の差を、さらに単純化したものです。
サンプルレート48kで2秒間の長さ、つまり長さ96000サンプルの音の集合体を、2D座標の集合体に削減
次元削減のパイプラインを一通りまとめると、以下のようになります:
SOUND(音) | FEATURE EXTRACTION(特徴量の抽出) | DIMENSIONALITY REDUCTION(次元削減) | 2D PLOT(2次元プロット) |
Impacterクロスシンセシスの可視化
次元削減を使って意味ある結果を得るには、それなりに多くの音が入った集合体が必要です。幸運にも、『Impacter Unreal Demo』という、沢山のImpacterバリエーションを分析できるWwiseのライブプロジェクトがあります!(詳しくはこちらのブログで!)
Impacterデモプロジェクトでは、複数のImpacterインスタンスに対して合計 289個のサウンドがあり、それに対して計2295個のバリエーションの可能性を精査できます。今回の実験では、これらのバリエーションを生み出すのにImpacterアルゴリズムのオフライン版を実行しましたが、インプット用に複数のオーディオ特徴抽出方式を試し、プロットを生成するのに複数の次元削減アルゴリズムを使い、結果を比較しました。
私たちは、どのサウンドが、どのImpacterインスタンスから出たのかを知っているので、Impacter SFXを色分けし、さらに元のサウンドの印を決め、派生したバリエーションと区別しました。下図は、元の入力サウンドを「X」印、Impacterから出てきたバリエーションを「〇」印で示しています。色分けしたので、バリエーションが元サウンドの周辺に群がっていて一貫性があり、重なっていないので重複していないことなどが、分かります。
複数のオーディオ特徴量や次元削減アルゴリズムを試したので、全体の結果をブログ最後に掲載しますが、その中でも私たちが一番気に入った結果は、こちらです:
どの場合も、元のサウンドと、(同色の)Impacterインスタンスのバリエーションたちとの関係が、それなりに一定していることが分かります。また、Impacterは単にランダム性を生成しているのではなく、同じ色のサウンドは群がっていて、バリエーションとして出されたサウンドと元のサウンドとの間に一貫した関連性があります。
詳しくSTFT特徴に対するt-SNEの配置を調べると、Impacterサウンドに対するバリエーションの広がりが、何種類かに分かれています。理想的なのが右下にあるConcrete(コンクリート)、Wood(木製)、そしてMetal(金属)のサウンドで、元のサウンドからほぼ均一的にバリエーション音が群がっています。
一方でwineGlass(ワイングラス)やcannon(大砲)は「〇」印がほとんど「X」印に重なっているので、こちらはバリエーションのSTFTが元の音ととても近いのが分かります。
その中間にあるのが左上のGravel(砂利)で、明白なバリエーションはありますが、元ファイルまわりのバリエーションの位置は、ほかの元ファイル周りにあるバリエーションよりも散乱しています。
ただし「mfcc++」のプロットのように、細かい差分が強調されるオーディオ特徴もあります。1番目と2番目のdelta(「mfcc++」の「++」部分) [3] を含めることで、ワイングラス音のようにSTFTのプロットでは固まっていた集まりが分散されます。
このプロットは2次元空間で音と音の違いを展開し、すべてのバリエーションを同時に見たり、特定の音にズームインして一部のバリエーションを詳しく確認したりできるようになっています。すっきりと表示され、Impacterの仕組みを説明したいときにも便利です。
Impacterはインパクト音を モデル化 できる分析兼シンセシスシステムで、入力音次第で、アルゴリズムによるモデル化の良し悪しが決まります。プロット化すれば、Impacterによてモデル化しやすい音かどうかを感覚的に判断できます。ご覧の通り、ガラスのサウンドのバリエーションは、それほど豊かでなく、Impacterを使った金属や木製やコンクリートの音ほど理想的なモデリングではありません。これは当前のようですが、Impacterで処理する音を選ぶ際に考慮すべき重要なヒューリスティック要素であり、音によってクロスシンセシス機能の効果が異なります。要するに、音によってバリエーションが豊かなサウンドもあれば、そうでないサウンドもあるのです!
これはもちろん、Impacterの精度を正式に証明していませんが、大量のサウンドのグループで、個々のサウンドの違いを直観的に判断できる例え話のようなものであり、同時にデータ可視化のおもしろい手法を実験する理由にもなります。
その他の疑問
次元削減を利用してImpacterの能力を可視化できれば、ほかの比較も可能です。例えば、私たちはタイル貼りの床を歩く88個の足音サウンドから、バリエーションとして7744個のタイルサウンドを取得して可視化してみました。ここでも、UMAPによってプロットされた「MFCC++」の特徴から、Impacterの性能を確認することができ、バリエーションは、元のサウンドたちの間に発生しています。つまり、Impacterにインポートした88個のサウンドセットから、元の88個のサウンドに近い範囲のバリエーションを再現できることが分かりました。2つ目の画像は、元の音を22個に絞ったときのバリエーションと、元の音88個すべてを、重ねて表示したものです。
足音88個から得られたバリエーション | 全体の一部の足音22個から得られたバリエーション |
画像を右クリックし、「新しいタブで画像を開く」をクリックすると、拡大表示されます。
まとめ
Impacterのクロスシンセシス機能のアルゴリズムが、どういったバリエーションを派生させるのか、という疑問に、このブログでお答えできたでしょうか。先ほど言ったとおり、バリエーションの各サウンドが、それぞれ全く違うものだということを絶対的にも統計的にも証明するものではありませんが、このプラグインがつくり出す大量のサウンドの実態を直観的に把握する手段となり、仕組みを理解しながらImpacterを使う助けになればいいと思います。
さらに詳しく…
データフォーマットについて
次元削減のアルゴリズムは単純に、データリストつまりベクトルの集合体を受け入れます。次元削減アルゴリズムは、入力データに左右されることなく、STFTやMFCCなどの2次元入力データの次元も考慮しないので、2次元データを平坦化することができ、さらに、上記の複数の特徴をコンカチネートして1つのリストとしてアルゴリズムに提供できます。
次元削減アルゴリズム
既存の次元削減アルゴリズムで、単純にデータリストつまりベクトルの集合体を受け入れるものは多くあり、私たちが今回、最初の段階で抽出した各サウンドの特徴が、このデータリストに該当します。
Pythonの sklearn や umap-learn のパッケージ(pipで提供)に、役に立つ多くの次元削減アルゴリズムの実装があります。既に、アルゴリズムの仕組みに関する情報は豊富にあると言いましたが、せっかくなので、ここで参考になるリンクを紹介します。
t-distributed Stochastic Neighbor Embedding (t-SNE)
from sklearn.manifold import TSNE
tsne = TSNE(
n_components=tsne_dimensions,
learning_rate=200,
perplexity=tsne_perplexity,
verbose=2,
angle=0.1).fit_transform(data)
Uniform Manifold Approximation and Projection for Dimension Reduction (UMAP)
import umap
umap = umap.UMAP(
n_neighbors=50,
min_dist=0.5,
n_components=tsne_dimensions,
metric='correlation').fit_transform(data)
Principal Component Analysis (PCA)
from sklearn.decomposition import PCA
pca= PCA(n_components=tsne_dimensions).fit_transform(data)
Multidimensional Scaling (MDS)
from sklearn.manifold import MDS
mds = MDS(
n_components=tsne_dimensions,
verbose=2,
max_iter=10000).fit_transform(data)
一連の結果
Impacterをテストするにあたり、上記4つの次元削減アルゴリズムを比べました。入力用にオーディオ特徴量を複数セット用意して、各アルゴリズムを実行しました。入力したのは、STFT、MFCC、MFCCにdeltaとdelta-deltaを添付したもの(mfcc++)[3]、そして最後に、数種類のオーディオ特徴(rms、スペクトル中心、スペクトルクレスト、スペクトルフラックス、スペクトルロールオフ、ZCR(zero crossing rate))のコンカチネーションです。
STFT | mfcc | mfcc++ | “オーディオ特徴のリスト” | |
t-SNE | ||||
MDS | ||||
PCA | ||||
UMAP 50 0.5 |
画像を右クリックし、「新しいタブで画像を開く」をクリックすると、拡大表示されます。
上図の通り、私たちは、STFTとMFCC++(delta、delta-delta)で、UMAPとt-SNEのアルゴリズムを使ったときに、一番使えそうなプロットが出ることが分かりました。
参考文献:
[1] - Hantrakul, L. “H. (2017, December 31). klustr: a tool for dimensionality reduction and visualization of large audio datasets. Medium. https://medium.com/@hanoi7/klustr-a-tool-for-dimensionality-reduction-and-visualization-of-large-audio-datasets-c3e958c0856c
[2] - Audio t-SNE. https://ml4a.github.io/guides/AudioTSNEViewer/
[3] -Bäckström, T. (2019, April 16). Deltas and Delta-deltas. Aalto University Wiki. https://wiki.aalto.fi/display/ITSP/Deltas+and+Delta-deltas
コメント