Time Synth Live Streaming Demo メモ

Epic Games テクニカルサウンドデザイナー DAN REYNOLDS氏によるライブストリーミングデモンストレーションのノート。こちらから視聴できます。また、フォーラムからサンプルプロジェクトなどDLできます。スライドは一読することをお勧めします!(長くないです)

(^-^)はDAN氏によるコメントの意訳です。
翻訳や内容が間違っていたら教えてください、、

TimeSynthコンポーネントとは

✓オーディオのタイミング合わせが必要な場面で使えます(MusicStitching(後述)とか、音を使ったアクションゲームとか?)
✓オーディオの時間の正確な管理(Quantization Clock
✓オーディオクリップの、ジャストタイミングのプレイバックキュー(Audio Scheduler
✓ランタイム中に複数のクリップをミキシング(VolumeGrouping
✓ビルトインFX(フィルターとかコンプレッサーとか)←最後まで特に説明がなかった、、どれのことだろう。
✓アーリーアクセスです

■Music Stitchingとは

複数のミュージッククリップを連続的に繋げることで、あたかも一続きの楽曲のように聴かせるメソッドのことです。

もういちどいいます。

複数のミュージッククリップを連続的に繋げることで、あたかも一続きの楽曲のように聴かせるメソッドのことです。

(^-^)< インタラクティブミュージックにとって、重要&重要 
(^-^)< Game stateによってダイナミックに楽曲の構成も変えたいよね?Music Stitchingによって実現していきたいよね?

■むずかしさ

(^-^)<フレームとフレームの間でClipAが終わってしまった...!


(^-^)<今までは、MusicClipAのあとにリバーブをつけたり、音楽的に遅れてもOKなもの(ホラー音楽などリズム感の薄い音楽)にしたり、そういうアプローチをしていましたね、、

(^-^;)<あとは、、あらかじめAにBを繋げておいて、何秒の時差があるか取得して、適切なタイミングからループBをプレイ、クロスフェードさせる、、、

MusicClipA から MusicClipBにしか行けないのでは、、?

(^-^)< 上の図で、Music ClipBは、青い▼の地点から始めるのが理想的ですよね。結局のところ、オーディオ用にはゲームスレッドより高精度のクロックが必要なんです。
(^-^)< あるんです(we DO have a much higher resolution clock)
(^-^)<オーディオを44,000レンダー/秒 48,000レンダー/秒 で処理するっていうクロックが、、、、ね!

■TimeSynth:Scheduling Ahead of Time


✓TimeSynthはオーディオサンプルレートと同じレート(一般的には44,100サンプリングレートが標準ですね)で動き、ゲームスレッドに依存しない。ということは、、
✓あらかじめ(あらかじめ!)次に再生するクリップのタイミングさえ取得できていれば、ゲームスレッドに依存せず、オーディオ的に完璧に正しい時間に再生するようにスケジューリングできる!

(^-^)< つまり!TimeSynthはゲームスレッド(60fpsなら60処理/s)とオーディオ再生(44100処理/s)を橋渡ししてくれるコンポーネントなんです


先にゲームロジック側から命令したことが、のちほどオーディオ側で正しく実行されるということですね

■使い方概要


[準備]
①UE4.22でTime Synth Pluginをアクティベートしましょう(氏はSound Utilities, Synth Presets and DSP EffectsもONにしている。)
②the new Audio MixerをEnabledしましょう(推奨)
→ プロジェクトフォルダの /Config/DefaultEngine.iniに以下を追記する。 

[Audio]
UseAudioMixer=true

UE4のバージョンによって方法が違うので、最新の方法は、オーディオスタートガイドでチェックしてください。

[アセット追加]
✓コンテンツブラウザ右クリック>Sound>TimeSynthClipアセットを作成
オーディオソースを設定する。Detailsから各種プロパティを設定する。
(プロパティ:フェード、ピッチ、ボリューム、ランダム再生、リスナーからの距離設定など)
✓コンテンツブラウザ右クリック>Sound>TimeSynthAudioGroupアセットを作成
[ブループリント]
✓ +Add ComponentでTime Synthコンポーネントを追加(通常のオーディオと同じように、Sound Submix, Source Effectの追加, 3D空間に置くなどできる 🙂 )
✓ 各種プロパティをBPから設定、またはランタイムから設定もできる
(プロパティ:BPM, 小節ごとの拍数、拍の長さ、イベント遅延時間, イベントクオンタイズなど)

↓こんなノードがあります。


PlayClip: 再生する。返り値のハンドルを利用して、あとからそのクリップを止めたりできる
StopClipWithFadeOverride: クオンタイズされたタイミングから、時間(何小節、何拍かけて?)を指定してフェードアウト
SetVolumeGroup: 音量を一括で操作するグループ(=複数クリップ)の設定
StopSoundOnVolumeGroup: 指定したVolumeGroupの再生を止める 
AddQuantizationEventDelegate: 指定したビートのタイミングでイベントをデリゲート  ←TimeSynthの推しポイント

■サンプルの説明

41分20秒~簡単なデモ
50分25秒あたりから始まるデモは見ごたえあり!

■注意点

✓音の再生命令を出すタイミングが予定再生時間の直前すぎると、予想外の結果になるかも。
✓メインのゲームスレッドの速度が落ちた場合、オーディオの再生命令~予定再生時間に十分な時間が取れない恐れ
✓(特に同じクリップをだとおもいますが)2重、3重に同時再生するのは避ける。これらは完全に同じ時間に再生されるので、音量が純粋に2倍、3倍になって、、耳が、、、

(^-^) < ビートディテクションとか、ネットワークを介した音の同期などができるといいなあ、、(希望的観測)

そうですね、、


視聴者 < オーディオマーカーを読み込めると良いですよね 

わかる

DAN REYNOLDS氏とEpicの中の人たち、ありがとうございました!!!

■コミュニティ/連絡先 


Unreal Engine Audio Development Forum: https://forums.unrealengine.com/development-discussion/audio
Game Audio Implementation Book: http://www.gameaudioimplementation.com/
Twitter: @dannthr

この記事が気に入ったらサポートをしてみませんか?