【出張ヒストリア2017】新しいUnreal Audio Engineでインタラクティブサウンドコンテンツはどこまでつくれるか!?

9K Views

October 16, 17

スライド概要

2017年8月6日に行われた「出張ヒストリア! UE4勉強会2017」にて発表させていただいたUE4.16のAudio機能についてのスライドです。

イベント詳細
https://historia.co.jp/archives/14244/

講演者:
加藤 優作(エンジニア)
ゲスト:株式会社ノイジークローク 加藤 浩義(執行役員 / コンポーザー)

以下、セッション概要より抜粋。

Unreal Engine 4.16 から利用可能になった新しい Audio Engine についてお話しします。
インタラクティブなデモンストレーションを行い、
それを実現するために使用した新機能について解説したいと思います。

profile-image

株式会社ヒストリアは、Unreal Engine専門のソフトウェア開発会社です。ゲーム事業とエンタープライズ事業、2 つの軸でソフトウェアの企画、開発を行っています。また、Unreal Engine の学習を目的とした作品制作コンテスト『UE5ぷちコン』や、『出張ヒストリア! ゲーム開発勉強会』を主催、技術ブログを毎週更新など、Unreal Engine コミュニティを盛り上げる活動も行っております。

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

新しい Unreal Audio Engine で インタラクティブサウンドコンテンツは どこまでつくれるか!? historia Inc. 加藤 優作 © historia Inc.

2.

自己紹介 ▪ 加藤 優作 (エンジニア) ▪ 開発実績 ◆ ▪ ハネチャリ (VR Zone Shinjuku にて稼働中) コミュニティ活動 ◆ Gray ちゃん 3D モデル制作 © historia Inc.

3.

新しいオーディオ機能 ▪ Unreal Engine 4.16 から 新しいオーディオ機能が多数追加されました! Unreal Audio Engine ◆ 新しいオーディオエンジン ▪ サウンドエフェクト機能の追加など ▪ Synthesis ◆ ▪ 音色を作成して鳴らすことができる Steam Audio ◆ ▪ 物理ベースオーディオ体験の実現 © historia Inc.

4.

発表概要 ▪ 新しいオーディオ機能の追加によって Unreal Engine の機能だけで どこまで面白いことができるようになったのか を デモを作成しながら検証 ▪ 使用した各オーディオ機能について ◆ ◆ それを使うとどんなことができるのか どのように使うか を解説 © historia Inc.

5.

諸注意 ▪ Unreal Audio Engine 及び Synthesis Plugin は Early Access Preview 扱いです (UE 4.16 現在) ◆ 今後機能や使い方が変更になる可能性があります ▪ なるべくわかりやすい解説にするために 内容の正確性・厳密性を犠牲にしています ▪ 新機能以外の解説もします ▪ 検証環境 ◆ ◆ Unreal Engine 4.16.3 Windows 10 © historia Inc.

6.

デモについて © historia Inc.

7.

https://youtu.be/8rHPPilj9VM?t=34s © historia Inc.

8.

デモの解説 ▪ インタラクティブなオーディオビジュアライザ ▪ キーボードを弾く “楽器演奏者” と マウスを操作する “ゲームプレイヤー” の 2 人が必要 © historia Inc.

9.

デモの解説 ① BGM に合わせて キーボードを弾く © historia Inc.

10.

デモの解説 ① BGM に合わせて キーボードを弾く ② 鍵盤エフェクトが出る © historia Inc.

11.

デモの解説 ① BGM に合わせて キーボードを弾く ③ 鍵盤エフェクトを ロックオン・破壊 ② 鍵盤エフェクトが出る © historia Inc.

12.

デモの解説 ④ 破片エフェクトがキーボードに当たって BGM に合った音が鳴る ① BGM に合わせて キーボードを弾く ③ 鍵盤エフェクトを ロックオン・破壊 ② 鍵盤エフェクトが出る © historia Inc.

13.

デモの解説 ④ 破片エフェクトがキーボードに当たって BGM に合った音が鳴る ゲームプレイが音に影響を与える ① BGM に合わせて キーボードを弾く ③ 鍵盤エフェクトを ロックオン・破壊 ② 鍵盤エフェクトが出る 楽器演奏がゲームに影響を与える © historia Inc.

14.

基礎知識 (MIDI と Audio) © historia Inc.

15.

MIDI ▪ 演奏データ (MIDI Event) を 機器間でやりとりするための世界共通規格 ◆ ▪ 楽譜のようなもの ◆ ▪ MIDI – Wikipedia 実際の音のデータではない MIDI Event の例 : Note On ◆ ◆ ◆ どのチャンネル (楽器パート) の どの高さの音を どれくらいの強さで弾いた? © historia Inc.

16.

Audio ▪ 音そのもののデータのこと ◆ .wav / .mp3 / .ogg © historia Inc.

17.

デモの機材構成 © historia Inc.

18.

デモの機材構成 Audio © historia Inc. MIDI

19.

デモの音データの流れ Audio Unreal Engine MIDI Device Support Plugin Modular Synth Component Modular Synth Component © historia Inc. MIDI

20.

Audio 新機能を使うための準備 © historia Inc.

21.

Audio 新機能を使うための準備 ▪ Unreal Audio Engine は 4.16 ではデフォルトで有効になっていない ▪ Unreal Audio Engine 開発チームの方が書いた Forum の Thread を参考にする 4.16 New Audio Engine: Early Access Quick-Start Guide ◆ https://forums.unrealengine.com/showthread.php?143974-4-16-NewAudio-Engine-Early-Access-Quick-Start-Guide&styleid=6 ▪ 新機能の使い方もここに載っています ▪ © historia Inc.

22.

手順 (Windows) 1. Config (.ini) を変更する 2. コマンドラインオプションを指定してプロジェクトを開く 3. プラグインを有効にする 4. (Editor Preferences を変更する) © historia Inc.

23.

手順 1. Config (.ini) を変更する ▪ 編集するファイル (どちらか一方) ◆ ◆ ▪ <エンジンディレクトリ>/Engine/Config/Windows/WindowsEngine.ini <プロジェクトディレクトリ>/Config/Windows/WindowsEngine.ini 以下を追記する [Audio] AudioDeviceModuleName=AudioMixerXAudio2 → これで、手順 2 で指定するコマンドラインオプションが有効に © historia Inc.

24.

手順 2. コマンドラインオプションを指定してプロジェクトを開く ▪ -audiomixer オプションを指定してプロジェクトを開く コマンドプロンプトで以下を実行する ◆ <UE4Editor.exe のパス> < .uproject のパス > –audiomixer 半角スペース ▪ 半角スペース 具体例 “C:¥Program Files¥Epic Games¥UE_4.16¥Engine¥Binaries¥Win64¥UE4Editor.exe” “C:¥Test_AudioEngine¥Test_AudioEngine.uproject” –audiomixer ◆ .bat ファイル化を推奨 © historia Inc.

25.

手順 3. プラグインを有効にする ▪ Audio -> Sound Utilities ▪ Audio -> Synthesis (Synth を使う場合) © historia Inc.

26.

(手順 4. Editor Preferences を変更する) ※ 必須ではありません ▪ Editor Preferences を開き、以下の設定を変更する Level Editor -> Miscellaneous -> Sound -> Allow Background Audio : ON ◆ ▪ エディタからフォーカスが外れてもオーディオが再生される Level Editor -> Miscellaneous -> Sound -> Enable Editor Sounds : OFF ◆ エディタのサウンドが再生されなくなる ▪ Level Editor -> Play -> Play in Editor -> Enable PIE Enter and Exit Sounds : OFF によって再生されなくなる Play / Stop / Eject / Possess の音に加えて Compile 時の音なども再生されなくなる ▪ © historia Inc.

27.

(手順 4. Editor Preferences を変更する) ※ 必須ではありません ▪ Editor Preferences を開き、以下の設定を変更する ◆ General -> Miscellaneous -> Performance -> Use Less CPU when in Background : OFF ▪ エディタからフォーカスが外れても CPU 消費が少なくならない © historia Inc.

28.

解説 © historia Inc.

29.

目次 ▪ [旧] キーボードからの MIDI Event を受信する ▪ [新] シンセサイザーで音を鳴らす ▪ [旧] 曲の拍のタイミングを取得する ▪ [新] 音にエフェクトをかける ▪ [新] 現在の音の大きさを取得する ▪ [新] 音の高さ毎の音の大きさを取得する © historia Inc.

30.

[旧] キーボードからの MIDI Event を受信する © historia Inc.

31.

デモでは… ▪ (機材の) キーボードを弾くと (画面の) キーボードの対応するキーが光ったり Particle が出たりする © historia Inc.

32.

デモの構成図上では… Audio Unreal Engine ビジュアライズ MIDI Device Support Plugin Modular Synth Component Modular Synth Component © historia Inc. MIDI

33.

MIDI Device Support Plugin ▪ MIDI Event の受信を行うための Plugin ◆ Plugin の説明には “send and receive MIDI events” と書かれているが、送信処理が見当たらない… © historia Inc.

34.

MIDI Device Support Plugin の使い方 ▪ FindMIDIDevices 関数 で 接続中の MIDI Device を列挙する FoundMIDIDevice 構造体 のリストから使いたい Device を判断 ◆ Device の名前 ▪ Device が既に使用されているかどうか ▪ etc... ▪ © historia Inc.

35.

MIDI Device Support Plugin の使い方 ▪ CreateMIDIDeviceController 関数 で MIDIDeviceController を作成 ▪ MIDI Event 受信時に呼ばれる OnMIDIEvent に Event を Bind © historia Inc.

36.

MIDI Device Support Plugin の使い方 ▪ 作成した MIDIDeviceController は 変数に Set しないと GC に回収されてしまうので注意 © historia Inc.

37.

MIDI Device Support Plugin の使い方 ▪ Event Type で MIDI Event の種類がわかる © historia Inc.

38.

MIDI Device Support Plugin の使い方 ▪ 受信した MIDI Event が Note On の場合 ◆ ◆ Controll ID = ノート番号 (中央 C = 60) Velocity = 音の強さ (数字が大きいほど音が強い、範囲 [0, 127]) © historia Inc.

39.

MIDI Device Support Plugin の使い方 ▪ 受信した MIDI Event が Note Off の場合 ◆ Controll ID = ノート番号 (中央 C = 60) © historia Inc.

40.

[新] シンセサイザーで音を鳴らす © historia Inc.

41.

デモでは… ▪ 破片エフェクトがキーボードに当たった時の音を生成 © historia Inc.

42.

シンセサイザー (Synthesizer / Synth) とは? ▪ 電気的に音を合成する機器 のこと ◆ ▪ 色々な合成方式がある ◆ ◆ ◆ ◆ ▪ パラメータ変更で色々な音を作ることができる 減算合成 加算合成 グラニュラー etc... シンセ ≠ キーボード ◆ 鍵盤付きシンセが多いが 音の合成機能があれば鍵盤がなくてもシンセ © historia Inc. The Future of Audio in Unreal Engine | GDC 2017 | Unreal Engine – YouTube より https://www.youtube.com/watch?v=ErejaBCicds

43.

Unreal Engine の Synth の種類と日本語情報 Modular Synth (減算合成) ▪ UE4 4.16のPreview版の新Audio機能の所感など | 株式会社プラスシグナル ◆ https://www.plus-signal.com/single-post/2017/05/15/UE4416%E3%81%AEPreview%E7%89%88%E3%81%AEAudio%E6%A9%9F%E8%83%BD%E3%81%AE%E6%89 %80%E6%84%9F%E3%81%AA%E3%81%A9 ▪ UE4 Modular Synthを触ってみる。 - UE4初心者が頑張ってるブログ ◆ ▪ ▪ Granular Synth 【UE4】Unreal Engine 4.16 PreviewのGranular Synthを触ってみる - 大福未来研究所 ◆ ▪ ▪ http://mozpaca.hatenablog.com/entry/20170514/1494754900 http://dfkfuturelab.hatenablog.com/entry/2017/05/16/081659 Synth Sample Player (?) © historia Inc.

44.

Modular Synth (減算合成) フィルタをかける 音量変化をコントロールする 波の形を決める (音としては使わない) 波などで パラメータをコントロールする The Future of Audio in Unreal Engine | GDC 2017 | Unreal Engine – YouTube より https://www.youtube.com/watch?v=ErejaBCicds © historia Inc.

45.

Modular Synth の使い方 ▪ ModularSynthComponent を追加 ▪ NoteOn 関数 で音を再生 ◆ 引数 Duration で音が鳴る長さを指定 ▪ ▪ 負の値を入れると NoteOff までずっと鳴る NoteOff 関数 で音を停止 © historia Inc.

46.

Modular Synth の使い方 ▪ 引数 Note / Velocity には MIDI Event と同じルールで ノート番号 / 音の強さ を与える ◆ MIDI Event の値をそのまま Synth に渡せば 「キーボードを弾くと Unreal で音が鳴る」 ロジックが完成 © historia Inc.

47.

Modular Synth の使い方 ▪ 音のパラメータを変更するには Set Synth Preset 関数 を使う ◆ ModularSynthPreset 構造体 を作って渡せばよいが… © historia Inc.

48.

Modular Synth の使い方 ▪ ▪ メンバ変数が多い! Preset を Asset として定義して呼び出す → ModularSynthPresetBank を使う © historia Inc.

49.

ModularSynthPresetBank を使う ▪ Add New -> Sounds -> Modular Synth Preset Bank を選択 ▪ Preset を編集 ◆ 複数の Preset を作成できる © historia Inc.

50.

ModularSynthPresetBank を使う ▪ ModularSynthPresetBank の参照変数を作成し、 そこから使用する Preset を取得する © historia Inc.

51.

Preset Q&A ▪ Q. 複数の Note を NoteOn しているのに 1 つしか鳴らない ▪ A. Enable Polyphony を true にしてください ▪ Q. 音痴になった ▪ A. ◆ ◆ Osc 1 or 2 の Semitones と Cents を 0 にしてください Chorus Enabled を false にしてください © historia Inc.

52.

[旧] 曲の拍のタイミングを取得する © historia Inc.

53.

デモでは… ▪ 各小節の 1 拍目に リング状の Mesh を Spawn ▪ 破片エフェクトが リズムに合うタイミング で BGM のコードに合う鍵盤 に当たるように調整 © historia Inc.

54.

OnAudioPlaybackPercent ▪ AudioComponent の Event ▪ PlaybackPercent は現在の再生率を返す ◆ ◆ ▪ 0.0 から始まり 1.0 で Audio の最後に到達 ループ再生すると 1 を超える PlayingSoundWave は現在再生中の SoundWave を返す ◆ SoundWave の Duration (Audio の長さ (秒)) x Playback Percent = 現在の再生位置 (秒) © historia Inc.

55.

現在の小節数・拍数の求め方 ▪ BPM = Beats Per Minite ◆ ◆ 1 分間における拍の数 BPM 60 = 1 分間に 60 拍 = 1 秒で 1 拍 ▪ 60 ÷ BPM = 1 拍にかかる秒数 ▪ 現在の再生位置 ÷ 1 拍にかかる秒数 = 現在の累計拍数 (0 始まり) ▪ 現在の累計拍数 ÷ 1 小節における拍の数 + 1 = 現在の小節数 ▪ 現在の累計拍数 % 1 小節における拍の数 + 1 = © historia Inc. 現在の拍数

56.

現在の小節数・拍数の求め方 © historia Inc.

57.

現在の小節数・拍数の求め方 © historia Inc.

58.

BGM のコードに合った音の選択 ▪ 何小節目の何拍目に 何のコードになるかを DataTable で管理 ▪ 計算で求めた現在の小節数・拍数から コードに合った音を選定する ▪ 例 : 21 小節目の 1 拍目に F minor 7th のコードになる → コードに合った音は F / A♭ / C / E♭ © historia Inc.

59.

[新] 音にエフェクトをかける © historia Inc.

60.

デモでは… ▪ キーボード (文字を打つ方) の操作で BGM に Low Pass Filter がかかり、音がこもった感じに ◆ ◆ Filter のかかり具合を実行時に調整 Filter が強くかかるほど彩度が落ちるように © historia Inc.

61.

サウンドエフェクト ▪ サウンドエフェクトとは? ◆ 音に対して何らかの加工を行うもの エフェクター (エフェクトをかける機材) ▪ エフェクター 種類 ◆ ◆ ◆ Delay : やまびこ効果 (やっほー やっほー) Low Pass Filter : 低音 (Low) を通す (Pass) → 高音をカットする etc... © historia Inc.

62.

デモの構成図上では… Audio Unreal Engine MIDI Device Support Plugin Modular Synth Component Modular Synth Component © historia Inc. MIDI

63.

新機能 : SourceEffect ▪ SourceEffect ◆ ▪ Delay エフェクトです エフェクトそのもの SourceEffectPreset ◆ ◆ A SourceEffect にプリセット値を与えたもの 同種の SourceEffect に対して複数作成できる 1 秒遅らせる Delay エフェクトです B ▪ SourceEffectPresetChain ◆ 2 秒遅らせる Delay エフェクトです Chain SourceEffectPreset を数珠繋ぎにしたもの C © historia Inc. A D

64.

SourceEffect の “Source” って何? ▪ Source とは以下のものを指す ◆ ◆ ◆ SoundWave SoundCue Synth (ModularSynth など) ▪ Audio Component は Source ではない ▪ つまり、SourceEffect = 上記の要素に対してかけることができるエフェクト ◆ 他のエフェクトとして、 SoundSubmix に対してかけることができる SubmixEffect がある © historia Inc.

65.

SourceEffect の使い方 1. SourceEffect を作成する (C++) (解説後回し) Delay エフェクトです 2. SourceEffectPreset を作成して プリセット値を設定する 1 秒遅らせる Delay エフェクトです 3. SourceEffectPresetChain を作成して SourceEffectPreset をセットする A Chain C 4. Source に SourceEffectChain をセットする A Chain © historia Inc. D

66.

手順 2. SourceEffectPreset を作成して プリセット値を設定する ▪ Content Browser -> Add New -> Sounds -> Source Effect Preset を選択 © historia Inc.

67.

手順 2. SourceEffectPreset を作成して プリセット値を設定する ▪ SourceEffect を選択 ◆ デフォルトで 11 種類 © historia Inc.

68.

手順 2. SourceEffectPreset を作成して プリセット値を設定する ▪ 作成した SourceEffectPreset を開き、 Details パネル -> Audio -> Effects -> Settings の値を設定する © historia Inc.

69.

手順 3. SourceEffectPresetChain を作成して SourceEffectPreset をセットする ▪ Content Browser -> Add New -> Sounds -> Source Effect Preset Chain を選択 © historia Inc.

70.

手順 3. SourceEffectPresetChain を作成して SourceEffectPreset をセットする ▪ 作成した SourceEffectPresetChain を開き、 Details パネル -> Source Effect -> Chain に SourceEffectPreset をセットする © historia Inc.

71.

手順 3. SourceEffectPresetChain を作成して SourceEffectPreset をセットする ▪ エフェクトは index 0 から順番にかかります ◆ ▪ Chain 順番が異なると結果も異なるので注意 Chain Bypass (迂回) で エフェクトがかからないようにできる Chain © historia Inc.

72.

手順 4. Source に SourceEffectChain をセットする ▪ SoundWave / SoundCue / Synth Component を開き、 Details パネル -> Effects-> Source Effect Chain に SourceEffectChain をセットする © historia Inc.

73.

確認方法 ▪ SoundWave / SoundCue の場合は Content Browser 上で再生すれば エフェクトがかかった状態で確認できる © historia Inc.

74.

Blueprint でできること ▪ SourceEffectPresetChain に対する SourceEffectPreset の追加・削除 ▪ SourceEffectPresetChain 内の SourceEffectPreset の Bypass 設定 © historia Inc.

75.

Blueprint でできること ▪ SourceEffectPreset の Settings の変更 (エフェクトの実行時設定調整) © historia Inc.

76.

手順 1. SourceEffect を作成する (C++) ▪ Add New -> New C++ Class を選択する ▪ Show All Classes のチェックをオンにして SoundEffectSourcePreset を検索・選択し、Next を選択 © historia Inc.

77.

手順 1. SourceEffect を作成する (C++) ▪ Name に “SourceEffect<エフェクト名>” と入力 ◆ ▪ このように命名すると、デフォルトの SourceEffect 関連クラスと命名規則が合います Create Class を選択 © historia Inc.

78.

手順 1. SourceEffect を作成する (C++) ▪ 3 つのクラス・構造体が 自動的に作成される FSourceEffect~Settings ◆ ▪ エフェクト設定の構造体 FSourceEffect~ ◆ ▪ 音データの処理を担当するクラス FSourceEffect~Preset ◆ ▪ 上記 2 つを Editor に公開するためのクラス © historia Inc.

79.

手順 1. SourceEffect を作成する (C++) ▪ 作成した時点で “Volume を変更するエフェクト” として機能する © historia Inc.

80.

手順 1. SourceEffect を作成する (C++) ▪ ソースに手を加える部分 FSourceEffect~Settings ◆ ▪ 設定項目をメンバ変数として追加 FSourceEffect~ ◆ メンバ関数 Init を override ◆ Audio 処理前に呼び出される初期化用関数 ▪ メンバ関数 OnPresetChanged を override ◆ Preset (Settings) の設定が変更されたときに呼び出される関数 ▪ メンバ関数 ProcessAudio を override ◆ Audio 処理を行う関数 ▪ © historia Inc.

81.

手順 1. SourceEffect を作成する (C++) ▪ 関数 ProcessAudio 引数 InData.AudioFrame として渡される音の波の変位を元に計算を行い、 引数 OutData.AudioFrame に新しい変位を代入することで出力を行う ◆ InData, OutData 共に値の範囲は [-1.0, 1.0) ▪ InData はその瞬間の波の変位なので、 ある期間内の波の変位が欲しい場合は バッファリングする必要がある ▪ ▪ 変位 0.5 波の変位とは? ◆ ある時点での波の高さの値のこと ある時点 © historia Inc.

82.

手順 1. SourceEffect を作成する (C++) ▪ “Volume を変更するエフェクト” のコード例 InData.AudioFrame[Channel] = 0.5 × VolumeScale (例 : 0.5) © historia Inc. OutData.AudioFrame[Channel] = 0.25

83.

[新] 現在の音の大きさを取得する © historia Inc.

84.

デモでは… ▪ キーボードとスペクトラムビジュアライザが BGM の音の大きさに合わせて拡大・縮小する © historia Inc.

85.

音波 ▪ 空気の圧力変化の波 ▪ 振幅が大きい方が音が大きい ▪ 周波数が高い (波長が短い) 方が音が高い 音が大きくて低い 比較 © historia Inc. 音が小さくて高い

86.

音の大きさを取得する ▪ 今の音の大きさを知りたい → 振幅を取ればよい ▪ ある時点での変位を見るだけでは振幅はわからない (振幅は大きいのに) この時点での変位は0 © historia Inc.

87.

音の大きさを取得する ▪ 欲しいのは変位の包絡線 → これを取得するために EnvelopeFollower を使う ◆ Envelope = 包絡線、Follower = 追跡者 © historia Inc.

88.

新機能 : EnvelopeFollower ▪ EnvelopeFollower は 以下の組み合わせで動作する ◆ ◆ 通知送信側となる SourceEffect 通知受信側となる ActorComponent © historia Inc.

89.

SourceEffectEnvelopeFollower ▪ 通常の SourceEffect 入力 ▪ 計算 → 結果を出力に反映 出力 (音が変わる) EnvelopeFollower 入力 計算 → 結果を外部に通知 振幅 © historia Inc. 出力 (音は変わらない) 受信側

90.

デモの構成図上では… Audio Source Effect Envelope Follower Preset Unreal Engine Envelope Follower Listener Component MIDI MIDI Device Support Plugin ビジュアライズ Modular Synth Component 振幅 Modular Synth Component © historia Inc.

91.

EnvelopeFollower の使い方 ▪ 他の SourceEffect と同じように以下の手順を行う ◆ ◆ ◆ SourceEffectPreset を作成して プリセット値を設定する SourceEffectPresetChain を作成して SourceEffectPreset をセットする Source に SourceEffectChain をセットする © historia Inc.

92.

EnvelopeFollower の使い方 ▪ 振幅情報を利用したい Actor の Blueprint にて EnvelopeFollowerListenerComponent (受信側) を追加する ▪ SourceEffectEnvelopeFollowerPreset 型の変数を追加し、 Default 値として Preset (送信側) を設定する © historia Inc.

93.

EnvelopeFollower の使い方 ▪ RegisterEnvelopeFollowerListener 関数 を使い、 受信側と送信側を結びつける 送信側 受信側 © historia Inc.

94.

EnvelopeFollower の使い方 ▪ EnvelopeFollowerListenerComponent の Event OnEnvelopeFollowerUpdate を Event Graph に追加する ◆ この Event の Envelope Value から振幅情報を取得できる © historia Inc.

95.

[新] 音の高さ毎の 音の大きさを取得する © historia Inc.

96.

デモでは… ▪ スペクトル解析結果をビジュアライズ (スペクトラムビジュアライザ) © historia Inc.

97.

波の分解 ▪ 複雑な波は 単純な波 (正弦波・余弦波) の足し算で 表すことができる 正弦波 (sin) 余弦波 (cos) © historia Inc.

98.

スペクトル解析 ▪ 複雑な波を単純な波に分解すると 各周波数における振幅がわかる → 音の高さ毎に音の大きさがわかる (スペクトル解析) + 低くて大きい音 高くて小さい音 周波数 (音の高さ) © historia Inc.

99.

Sound Visualizations Plugin を使う? ▪ 関数 CalculateFrequencySpectrum で スペクトル解析を行うことができる © historia Inc.

100.

Sound Visualizations Plugin の問題点 ▪ エフェクトがかかる前の SoundWave の解析にしか対応していない ◆ ▪ Packaging に対応していない ◆ ▪ .wav のヘッダ情報を読んで解析を行っているため .wav のヘッダ情報を読む部分のコードが Editor only のため Epic の内部イベントで作られた実験的ツールであり、 開発者は今後フォローアップするつもりがない ◆ https://answers.unrealengine.com/questions/144483/packaginggame-fails-with-audio-visualization-plug.html © historia Inc.

101.

スペクトル解析結果を通知する Source Effect の自作 ▪ EnvelopeFollower と同じ仕組みで 振幅の代わりに スペクトル解析結果 を外部に通知する SourceEffect を実装すれば スペクトラムビジュアライザが作れる 外部に通知 音はそのまま スペクトル © historia Inc. 受信側

102.

スペクトル解析結果を通知する Source Effect の自作 ▪ ▪ 通知の送信方法や 受信側となる ActorComponent の実装は EnvelopeFollower のソースコードを参考にする ▪ /Engine/Plugins/Runtime/Synthesis/Source/Synthesis/Classes/SourceEffects/SourceEffectEnvel opeFollower.h ▪ 一定期間の変位値が必要なため、バッファリングを行う スペクトル解析処理は Sound Visualizations Plugin のロジックを流用 ▪ 高速フーリエ変換ライブラリ Kiss FFT が使用されている © historia Inc.

103.

デモの構成図上では… Audio Source Effect Spec Analizer Preset Unreal Engine Spec Analizer Listener Component MIDI MIDI Device Support Plugin ビジュアライズ Modular Synth Component スペクトル解析結果 Modular Synth Component © historia Inc.

104.

スペクトル解析結果を通知する Source Effect の自作 ▪ SourceEffect の効果が反映されるスペクトラムビジュアライザが完成 ◆ Low Pass Filter をかけると 高音のスペクトル値が小さくなることが確認できる © historia Inc.

105.

まとめ © historia Inc.

106.

まとめ ▪ Unreal Engine の標準オーディオ機能だけでも 多くのことができるようになりそう! ◆ ◆ ▪ オーディオミドルウェアを採用しないプロジェクトにおいて 音による表現を諦めずに済むケースが多くなるかと思います とはいえまだ Early Access Preview なので、安定性に不安が残ります 標準オーディオ機能の他にも、オーディオミドルウェア、 Market Place の Plugin など、いろいろな選択肢があります ◆ 機能だけでなく、ワークフロー、過去の資産、予算などを考慮した上で 適切なものを選択しましょう © historia Inc.

107.

ご清聴ありがとうございました! © historia Inc.