Impacterクロスシンセシスのバリエーションを可視化

インタラクティブオーディオ / Wwiseの使い方やツール

Impacterプラグインのブログ、第3弾です。前回までは、主に、このプラグインの物理的パラメータや、あなたのゲームの物理システムにいかに効率的に統合できるかについて、説明しました。今回は、Impacterのもう1つの面であるクロスシンセシス性能について、話を進めます。

Impacterブログの初回で簡単に説明した通り、いくつかの音を集めた「コレクション」を元に、このプラグインで斬新な別バージョンをいくつもつくり出すには、それぞれの音のImpact(インパクト)コンポーネントとBody(ボディー)コンポーネントを自由に組み合わる方法があります。さらに、バリエーションの数々をデザイナーが簡単に活かせるように、ランダム再生の設定まで装備しています。


さて、クロスシンセシスでつくり出されるバリエーションは、様々な音のシンセシスモジュールから、BodyのSinusoids(正弦曲線)とFilter Banks(フィルターバンク)コンポーネントと、ImpactつまりExcitation(励起)コンポーネントを使って生成されることを思い出してください。

ImpactSystem1

ただ、クロスシンセシスといっても範囲が広いので、先に、独特のフレーバーをもったImpacterのクロスシンセシスから期待されるバリエーションについて、もう少し詳しく見ていく必要があります。Impacterを使ってユーザーがつくり出すバリエーションはリアルかつ一貫性があり、どのバリエーションも重複することはなく、元のサウンドと意味ある関連性を維持していることを、皆さんに実証したいと思います。また、同じ音が何度も繰り返されたり、逆に全く関係のない音が立て続けに再生されると、ゲームプレイ中のプレイヤーの没入感が音の反復で途切れてしまいますが、その心配はないとデザイナーに伝えたいです。実は、Impacterのクロスシンセシスの概要を分かりやすく説明するのは、思ったより難しいのです。

バリエーションを、目と耳で確認

Impacterを使うと、このプラグインにロードしたファイルと、 同じくロードされたほかのサウンドを、クロスシンセシスで処理できます。例えば、ファイルが12個あれば、最大144の組み合わせが可能です(特定のImpactやBodyのコンポーネントを、ユーザーがソースエディタで除外することができます)。すぐに明らかになることですが、インパクトサウンドが144個ともなると、各サウンドの具体的な違いを探すのは、聞くのも、見ることさえも、大変な作業です。

ご覧ください:

ImpacterVariations

せっかくなので指摘しますが、これらを1つ1つ順番に聞いて、87番目までたどり着いたときに、11番目はどんなサウンドだったっけ、などと思い出すのは明らかに無理です...。

では、大量の音を分析するには、どうすればいいのでしょう?

次元削減

広範囲に次元削減してオーディオ解析するテクニックを使い、多数のサウンドの集合体を、2D平面に広げてマッピングして可視化できます。Lamtharn “Hanoi” Hantrakulのブログ『Klustr』と、それに付随するツール [1] や、ml4a(Machine Learning for Artists ツールキット)のAudio t-SNEビュア― [2] などは、オーディオの次元削減の結果を表すぴったりの例です。

ImpacterDimensionality

SpatiallyEmbeddedSamples

インパクト音の潜在的な特徴を比較する

2D空間で音を「比較」する方法はいくつかあります。インパクトt音には直観的に分かる特徴が潜在的に存在し、それは物理的な特徴(硬い、柔らかい、跳ね返る、ぶつかるなど)であったり、衝撃を受ける側の物体や面の種類(ガラス、砂、木製など)であったりします。私たちは具体的に(数学的に)求めている音の潜在的な特徴を定義することはできませんが、ある音の様々なオーディオ特徴を抽出することはできます。

オーディオの場合、上にある元の時間領域信号の比較は、異なる音を比較する場合、理想の方法ではありません。幸い、1つ1つのサウンドを比較しやすい形に変換してくれるオーディオ分析技術が多数あります。後述するように、どのオーディオ分析方法を使うかは、次元削減で行われるプロットに、直接影響します。

変換方式を詳しく説明する文献は色々とありますが、今回のブログ記事では単純に、衝突系の音を変換した結果を、可視化した例を使うことにします。これらの変換方式の多くは、1次元の音声信号を2次元に拡張するもので、値のレベルが、色で識別できます。

Time_Domain_Waveform

オーディオ特徴


STFT
MFCC
MFCC delta MFCC_DeltaDelta

 

次元削減とは、結局は音の視覚的な比較を可能にすることなので、2つの音のMFCCの差に対し、STFTがどのように違うのかを、直観的に予想することができます。ただし、これでは「ドラム」「トロンボーン」「砂利」の音の潜在的な側面を比較するときほど、分かりやすくありません。それでも音のオーディオ特徴の違いに基づいて、音と音の潜在的な違いがある程度予測できる2Dマップを、作成できるかもしれません。 

次元削減で、何が行われるのか

オーディオの特徴が分かったので、次元削減を使えば、音の集合体にある各サウンドに関連する一連の数値を「削減」し、(下図の通り)1つの音に対して2つの数値、つまり一対の数値に短縮でき、さらに都合の良いことに、この2つの数値をXY座標ととらえて2次元の平面にマッピングできます。肝心なのは、2D平面に表示される音と音の距離が、音の類似性や相違性を反映することです。ある意味、これは先ほど視覚化したすべての音(または特徴)の差を、さらに単純化したものです。 

DimensionalityReduction
サンプルレート48kで2秒間の長さ、つまり長さ96000サンプルの音の集合体を、2D座標の集合体に削減

次元削減のパイプラインを一通りまとめると、以下のようになります:

SOUND(音) FEATURE EXTRACTION(特徴量の抽出) DIMENSIONALITY REDUCTION(次元削減) 2D PLOT(2次元プロット)
Time_Domain_Waveform STFT DimensionalityReduction umap 50 0.5 - mfcc++

Impacterクロスシンセシスの可視化

次元削減を使って意味ある結果を得るには、それなりに多くの音が入った集合体が必要です。幸運にも、『Impacter Unreal Demo』という、沢山のImpacterバリエーションを分析できるWwiseのライブプロジェクトがあります!(詳しくはこちらのブログで!)

Impacterデモプロジェクトでは、複数のImpacterインスタンスに対して合計 289個のサウンドがあり、それに対して計2295個のバリエーションの可能性を精査できます。今回の実験では、これらのバリエーションを生み出すのにImpacterアルゴリズムのオフライン版を実行しましたが、インプット用に複数のオーディオ特徴抽出方式を試し、プロットを生成するのに複数の次元削減アルゴリズムを使い、結果を比較しました。

ImpacterSourceEditor

私たちは、どのサウンドが、どのImpacterインスタンスから出たのかを知っているので、Impacter SFXを色分けし、さらに元のサウンドの印を決め、派生したバリエーションと区別しました。下図は、元の入力サウンドを「X」印、Impacterから出てきたバリエーションを「〇」印で示しています。色分けしたので、バリエーションが元サウンドの周辺に群がっていて一貫性があり、重なっていないので重複していないことなどが、分かります。

複数のオーディオ特徴量や次元削減アルゴリズムを試したので、全体の結果をブログ最後に掲載しますが、その中でも私たちが一番気に入った結果は、こちらです:

tsne - stft

どの場合も、元のサウンドと、(同色の)Impacterインスタンスのバリエーションたちとの関係が、それなりに一定していることが分かります。また、Impacterは単にランダム性を生成しているのではなく、同じ色のサウンドは群がっていて、バリエーションとして出されたサウンドと元のサウンドとの間に一貫した関連性があります。

詳しくSTFT特徴に対するt-SNEの配置を調べると、Impacterサウンドに対するバリエーションの広がりが、何種類かに分かれています。理想的なのが右下にあるConcrete(コンクリート)、Wood(木製)、そしてMetal(金属)のサウンドで、元のサウンドからほぼ均一的にバリエーション音が群がっています。

2021-05-10 22_46_09-tsne - stft.png _- Photos

一方でwineGlass(ワイングラス)やcannon(大砲)は「〇」印がほとんど「X」印に重なっているので、こちらはバリエーションのSTFTが元の音ととても近いのが分かります。

wineglassimpact

その中間にあるのが左上のGravel(砂利)で、明白なバリエーションはありますが、元ファイルまわりのバリエーションの位置は、ほかの元ファイル周りにあるバリエーションよりも散乱しています。

GravelImpact

ただし「mfcc++」のプロットのように、細かい差分が強調されるオーディオ特徴もあります。1番目と2番目のdelta(「mfcc++」の「++」部分) [3] を含めることで、ワイングラス音のようにSTFTのプロットでは固まっていた集まりが分散されます。

umap 50 0.5 - mfcc++ (1)

 

このプロットは2次元空間で音と音の違いを展開し、すべてのバリエーションを同時に見たり、特定の音にズームインして一部のバリエーションを詳しく確認したりできるようになっています。すっきりと表示され、Impacterの仕組みを説明したいときにも便利です。

Impacterはインパクト音を モデル化 できる分析兼シンセシスシステムで、入力音次第で、アルゴリズムによるモデル化の良し悪しが決まります。プロット化すれば、Impacterによてモデル化しやすい音かどうかを感覚的に判断できます。ご覧の通り、ガラスのサウンドのバリエーションは、それほど豊かでなく、Impacterを使った金属や木製やコンクリートの音ほど理想的なモデリングではありません。これは当前のようですが、Impacterで処理する音を選ぶ際に考慮すべき重要なヒューリスティック要素であり、音によってクロスシンセシス機能の効果が異なります。要するに、音によってバリエーションが豊かなサウンドもあれば、そうでないサウンドもあるのです!

これはもちろん、Impacterの精度を正式に証明していませんが、大量のサウンドのグループで、個々のサウンドの違いを直観的に判断できる例え話のようなものであり、同時にデータ可視化のおもしろい手法を実験する理由にもなります。

その他の疑問

次元削減を利用してImpacterの能力を可視化できれば、ほかの比較も可能です。例えば、私たちはタイル貼りの床を歩く88個の足音サウンドから、バリエーションとして7744個のタイルサウンドを取得して可視化してみました。ここでも、UMAPによってプロットされた「MFCC++」の特徴から、Impacterの性能を確認することができ、バリエーションは、元のサウンドたちの間に発生しています。つまり、Impacterにインポートした88個のサウンドセットから、元の88個のサウンドに近い範囲のバリエーションを再現できることが分かりました。2つ目の画像は、元の音を22個に絞ったときのバリエーションと、元の音88個すべてを、重ねて表示したものです。

足音88個から得られたバリエーション 全体の一部の足音22個から得られたバリエーション
impacterVariations_88Footsteps

impacterVariations_22FootstepsSubset

画像を右クリックし、「新しいタブで画像を開く」をクリックすると、拡大表示されます。

まとめ

Impacterのクロスシンセシス機能のアルゴリズムが、どういったバリエーションを派生させるのか、という疑問に、このブログでお答えできたでしょうか。先ほど言ったとおり、バリエーションの各サウンドが、それぞれ全く違うものだということを絶対的にも統計的にも証明するものではありませんが、このプラグインがつくり出す大量のサウンドの実態を直観的に把握する手段となり、仕組みを理解しながらImpacterを使う助けになればいいと思います。

さらに詳しく…

データフォーマットについて

次元削減のアルゴリズムは単純に、データリストつまりベクトルの集合体を受け入れます。次元削減アルゴリズムは、入力データに左右されることなく、STFTやMFCCなどの2次元入力データの次元も考慮しないので、2次元データを平坦化することができ、さらに、上記の複数の特徴をコンカチネートして1つのリストとしてアルゴリズムに提供できます。

ImpacterFormatting

次元削減アルゴリズム

既存の次元削減アルゴリズムで、単純にデータリストつまりベクトルの集合体を受け入れるものは多くあり、私たちが今回、最初の段階で抽出した各サウンドの特徴が、このデータリストに該当します。

Pythonの sklearnumap-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 tsne - stft-1 tsne - mfcc tsne - mfcc++ tsne - MIR
MDS mds - stft mds - mfcc mds - mfcc++ mds - MIR
PCA pca - mfcc pca - mfcc++ pca - MIR
UMAP 50 0.5 umap 50 0.5 - stft umap 50 0.5 - mfcc umap 50 0.5 - mfcc++ (2) umap 50 0.5 - MIR

画像を右クリックし、「新しいタブで画像を開く」をクリックすると、拡大表示されます。

上図の通り、私たちは、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

ライアン・ダン(RYAN DONE)

ソフトウェアデベロッパ

Valve corporation

ライアン・ダン(RYAN DONE)

ソフトウェアデベロッパ

Valve corporation

2017年、Audiokineticで働くために、西海岸からモントリオールに移住。コンピューターミュージック研究やオーディオソフトウェア開発の経験を活かし、R&Dチームにすぐに溶け込み、新プラグインやWwiseのDSP機能に携わる。あらゆる実験音楽や「変わった」音楽を絶えず求め、また、自転車に乗るための新たな珍しい理由を常に探しまわる。

コメント

Replyを残す

メールアドレスが公開されることはありません。

ほかの記事

WwiseのState機能から多数のパラメータにアクセスして、ミキシングできるように!

Wwise...

22.3.2018 - 作者 ブラッドリー・メイヤー(BRADLEY MEYER)

Wwiseプラグイン作成パイプラインが、シンプルに

13.8.2019 - 作者 ジョエル・ロビショー(Joel Robichaud)

ImpacterとUnreal ゲームの物理でプラグインImpacterを動かす

はじめに Impacterはインパクト(衝突)をモデル化したWwise向けの新しいプラグインのプロトタイプで、紹介は こちら にあります。今回の記事は、 Unreal...

20.5.2021 - 作者 ショーン・ソラハン(SEAN SORAGHAN)

ゲームにおけるオーディオGameObjectの管理

I. はじめに GameObjectはWwiseでオーディオデザインを行う際の基礎となる概念です。Wwiseの基本機能(特にProfiling機能)からWwise...

16.1.2024 - 作者 徐巍

Wwise Spatial Audio 2023.1の新機能 | 位相ずれの軽減

25.1.2024 - 作者 アレン・リー

Wwiseを使ったゲームのマスタリング | パート1:ゲームオーディオのマスタリングの考え方

7.8.2024 - 作者 ロイク・クーティエ&ダニエリ・シェンブリ

ほかの記事

WwiseのState機能から多数のパラメータにアクセスして、ミキシングできるように!

Wwise...

Wwiseプラグイン作成パイプラインが、シンプルに

ImpacterとUnreal ゲームの物理でプラグインImpacterを動かす

はじめに Impacterはインパクト(衝突)をモデル化したWwise向けの新しいプラグインのプロトタイプで、紹介は こちら にあります。今回の記事は、 Unreal...