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
この記事が気に入ったらサポートをしてみませんか?