SlideShare a Scribd company logo
© historia Inc.
新しい Unreal Audio Engine で
インタラクティブサウンドコンテンツは
どこまでつくれるか!?
historia Inc.
加藤 優作
© historia Inc.
自己紹介
 加藤 優作 (エンジニア)
 開発実績
 ハネチャリ (VR Zone Shinjuku にて稼働中)
 コミュニティ活動
 Gray ちゃん 3D モデル制作
© historia Inc.
新しいオーディオ機能
 Unreal Engine 4.16 から
新しいオーディオ機能が多数追加されました!
 Unreal Audio Engine
 新しいオーディオエンジン
 サウンドエフェクト機能の追加など
 Synthesis
 音色を作成して鳴らすことができる
 Steam Audio
 物理ベースオーディオ体験の実現
© historia Inc.
発表概要
 新しいオーディオ機能の追加によって
Unreal Engine の機能だけで
どこまで面白いことができるようになったのか を
デモを作成しながら検証
 使用した各オーディオ機能について
 それを使うとどんなことができるのか
 どのように使うか
を解説
© historia Inc.
諸注意
 Unreal Audio Engine 及び Synthesis Plugin は
Early Access Preview 扱いです (UE 4.16 現在)
 今後機能や使い方が変更になる可能性があります
 なるべくわかりやすい解説にするために
内容の正確性・厳密性を犠牲にしています
 新機能以外の解説もします
 検証環境
 Unreal Engine 4.16.3
 Windows 10
© historia Inc.
デモについて
© historia Inc.
https://youtu.be/8rHPPilj9VM?t=34s
© historia Inc.
デモの解説
 インタラクティブなオーディオビジュアライザ
 キーボードを弾く “楽器演奏者” と
マウスを操作する “ゲームプレイヤー” の
2 人が必要
© historia Inc.
デモの解説
① BGM に合わせて
キーボードを弾く
© historia Inc.
デモの解説
① BGM に合わせて
キーボードを弾く
② 鍵盤エフェクトが出る
© historia Inc.
デモの解説
① BGM に合わせて
キーボードを弾く
③ 鍵盤エフェクトを
ロックオン・破壊
② 鍵盤エフェクトが出る
© historia Inc.
デモの解説
① BGM に合わせて
キーボードを弾く
④ 破片エフェクトがキーボードに当たって
BGM に合った音が鳴る
③ 鍵盤エフェクトを
ロックオン・破壊
② 鍵盤エフェクトが出る
© historia Inc.
デモの解説
① BGM に合わせて
キーボードを弾く
④ 破片エフェクトがキーボードに当たって
BGM に合った音が鳴る
③ 鍵盤エフェクトを
ロックオン・破壊
② 鍵盤エフェクトが出る
ゲームプレイが音に影響を与える
楽器演奏がゲームに影響を与える
© historia Inc.
基礎知識
(MIDI と Audio)
© historia Inc.
MIDI
 演奏データ (MIDI Event) を
機器間でやりとりするための世界共通規格
 MIDI – Wikipedia
 楽譜のようなもの
 実際の音のデータではない
 MIDI Event の例 : Note On
 どのチャンネル (楽器パート) の
 どの高さの音を
 どれくらいの強さで弾いた?
© historia Inc.
Audio
 音そのもののデータのこと
 .wav / .mp3 / .ogg
© historia Inc.
デモの機材構成
© historia Inc.
デモの機材構成 Audio MIDI
© historia Inc.
Modular Synth
Component
デモの音データの流れ Audio MIDI
MIDI Device
Support Plugin
Unreal Engine
Modular Synth
Component
© historia Inc.
Audio 新機能を使うための準備
© historia Inc.
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-New-
Audio-Engine-Early-Access-Quick-Start-Guide&styleid=6
 新機能の使い方もここに載っています
© historia Inc.
手順 (Windows)
1. Config (.ini) を変更する
2. コマンドラインオプションを指定してプロジェクトを開く
3. プラグインを有効にする
4. (Editor Preferences を変更する)
© historia Inc.
手順 1. Config (.ini) を変更する
 編集するファイル (どちらか一方)
 <エンジンディレクトリ>/Engine/Config/Windows/WindowsEngine.ini
 <プロジェクトディレクトリ>/Config/Windows/WindowsEngine.ini
 以下を追記する
→ これで、手順 2 で指定するコマンドラインオプションが有効に
[Audio]
AudioDeviceModuleName=AudioMixerXAudio2
© historia Inc.
手順 2. コマンドラインオプションを指定してプロジェクトを開く
 -audiomixer オプションを指定してプロジェクトを開く
 コマンドプロンプトで以下を実行する
 具体例
 .bat ファイル化を推奨
<UE4Editor.exe のパス> < .uproject のパス > –audiomixer
“C:Program FilesEpic
GamesUE_4.16EngineBinariesWin64UE4Editor.exe”
“C:Test_AudioEngineTest_AudioEngine.uproject” –audiomixer
半角スペース 半角スペース
© historia Inc.
手順 3. プラグインを有効にする
 Audio -> Sound Utilities
 Audio -> Synthesis (Synth を使う場合)
© historia Inc.
(手順 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.
(手順 4. Editor Preferences を変更する)
※ 必須ではありません
 Editor Preferences を開き、以下の設定を変更する
 General -> Miscellaneous
-> Performance -> Use Less CPU when in Background : OFF
 エディタからフォーカスが外れても CPU 消費が少なくならない
© historia Inc.
解説
© historia Inc.
目次
 [旧] キーボードからの MIDI Event を受信する
 [新] シンセサイザーで音を鳴らす
 [旧] 曲の拍のタイミングを取得する
 [新] 音にエフェクトをかける
 [新] 現在の音の大きさを取得する
 [新] 音の高さ毎の音の大きさを取得する
© historia Inc.
[旧] キーボードからの
MIDI Event を受信する
© historia Inc.
デモでは…
 (機材の) キーボードを弾くと
(画面の) キーボードの対応するキーが光ったり
Particle が出たりする
© historia Inc.
Modular Synth
Component
Audio MIDI
Unreal Engine
Modular Synth
Component
デモの構成図上では…
ビジュアライズ
MIDI Device
Support Plugin
© historia Inc.
MIDI Device Support Plugin
 MIDI Event の受信を行うための Plugin
 Plugin の説明には
“send and receive MIDI events”
と書かれているが、送信処理が見当たらない…
© historia Inc.
MIDI Device Support Plugin の使い方
 FindMIDIDevices 関数 で 接続中の MIDI Device を列挙する
 FoundMIDIDevice 構造体 のリストから使いたい Device を判断
 Device の名前
 Device が既に使用されているかどうか
 etc...
© historia Inc.
MIDI Device Support Plugin の使い方
 CreateMIDIDeviceController 関数 で
MIDIDeviceController を作成
 MIDI Event 受信時に呼ばれる OnMIDIEvent に Event を Bind
© historia Inc.
MIDI Device Support Plugin の使い方
 作成した MIDIDeviceController は
変数に Set しないと GC に回収されてしまうので注意
© historia Inc.
MIDI Device Support Plugin の使い方
 Event Type で MIDI Event の種類がわかる
© historia Inc.
MIDI Device Support Plugin の使い方
 受信した MIDI Event が Note On の場合
 Controll ID = ノート番号 (中央 C = 60)
 Velocity = 音の強さ (数字が大きいほど音が強い、範囲 [0, 127])
© historia Inc.
MIDI Device Support Plugin の使い方
 受信した MIDI Event が Note Off の場合
 Controll ID = ノート番号 (中央 C = 60)
© historia Inc.
[新] シンセサイザーで音を鳴らす
© historia Inc.
デモでは…
 破片エフェクトがキーボードに当たった時の音を生成
© historia Inc.
シンセサイザー (Synthesizer / Synth) とは?
 電気的に音を合成する機器 のこと
 パラメータ変更で色々な音を作ることができる
 色々な合成方式がある
 減算合成
 加算合成
 グラニュラー
 etc...
 シンセ ≠ キーボード
 鍵盤付きシンセが多いが
音の合成機能があれば鍵盤がなくてもシンセ
The Future of Audio in Unreal Engine | GDC 2017 | Unreal Engine – YouTube より
https://www.youtube.com/watch?v=ErejaBCicds
© historia Inc.
Unreal Engine の Synth の種類と日本語情報
 Modular Synth (減算合成)
 UE4 4.16のPreview版の新Audio機能の所感など | 株式会社プラスシグナル
 https://www.plus-signal.com/single-post/2017/05/15/UE4-
416%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初心者が頑張ってるブログ
 http://mozpaca.hatenablog.com/entry/20170514/1494754900
 Granular Synth
 【UE4】Unreal Engine 4.16 PreviewのGranular Synthを触ってみる - 大福未来研究所
 http://dfkfuturelab.hatenablog.com/entry/2017/05/16/081659
 Synth Sample Player (?)
© historia Inc.
Modular Synth (減算合成)
The Future of Audio in Unreal Engine | GDC 2017 | Unreal Engine – YouTube より
https://www.youtube.com/watch?v=ErejaBCicds
波の形を決める
フィルタをかける 音量変化をコントロールする
(音としては使わない) 波などで
パラメータをコントロールする
© historia Inc.
Modular Synth の使い方
 ModularSynthComponent を追加
 NoteOn 関数 で音を再生
 引数 Duration で音が鳴る長さを指定
 負の値を入れると NoteOff までずっと鳴る
 NoteOff 関数 で音を停止
© historia Inc.
Modular Synth の使い方
 引数 Note / Velocity には
MIDI Event と同じルールで ノート番号 / 音の強さ を与える
 MIDI Event の値をそのまま Synth に渡せば
「キーボードを弾くと Unreal で音が鳴る」 ロジックが完成
© historia Inc.
Modular Synth の使い方
 音のパラメータを変更するには
Set Synth Preset 関数 を使う
 ModularSynthPreset 構造体 を作って渡せばよいが…
© historia Inc.
Modular Synth の使い方
 メンバ変数が多い!
 Preset を Asset として定義して呼び出す
→ ModularSynthPresetBank を使う
© historia Inc.
ModularSynthPresetBank を使う
 Add New -> Sounds
-> Modular Synth Preset Bank を選択
 Preset を編集
 複数の Preset を作成できる
© historia Inc.
ModularSynthPresetBank を使う
 ModularSynthPresetBank の参照変数を作成し、
そこから使用する Preset を取得する
© historia Inc.
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.
[旧] 曲の拍のタイミングを取得する
© historia Inc.
デモでは…
 各小節の 1 拍目に リング状の Mesh を Spawn
 破片エフェクトが リズムに合うタイミング で
BGM のコードに合う鍵盤 に当たるように調整
© historia Inc.
OnAudioPlaybackPercent
 AudioComponent の Event
 PlaybackPercent は現在の再生率を返す
 0.0 から始まり 1.0 で Audio の最後に到達
 ループ再生すると 1 を超える
 PlayingSoundWave は現在再生中の SoundWave を返す
 SoundWave の Duration (Audio の長さ (秒)) x Playback Percent
= 現在の再生位置 (秒)
© historia Inc.
 BPM = Beats Per Minite
 1 分間における拍の数
 BPM 60 = 1 分間に 60 拍 = 1 秒で 1 拍
 60 ÷ BPM = 1 拍にかかる秒数
 現在の再生位置 ÷ 1 拍にかかる秒数 = 現在の累計拍数 (0 始まり)
 現在の累計拍数 ÷ 1 小節における拍の数 + 1 =
 現在の累計拍数 % 1 小節における拍の数 + 1 =
現在の小節数
現在の小節数・拍数の求め方
現在の拍数
© historia Inc.
現在の小節数・拍数の求め方
© historia Inc.
現在の小節数・拍数の求め方
© historia Inc.
BGM のコードに合った音の選択
 何小節目の何拍目に
何のコードになるかを
DataTable で管理
 計算で求めた現在の小節数・拍数から
コードに合った音を選定する
 例 : 21 小節目の 1 拍目に
F minor 7th のコードになる
→ コードに合った音は
F / A♭ / C / E♭
© historia Inc.
[新] 音にエフェクトをかける
© historia Inc.
デモでは…
 キーボード (文字を打つ方) の操作で
BGM に Low Pass Filter がかかり、音がこもった感じに
 Filter のかかり具合を実行時に調整
 Filter が強くかかるほど彩度が落ちるように
© historia Inc.
 サウンドエフェクトとは?
 音に対して何らかの加工を行うもの
 種類
 Delay : やまびこ効果 (やっほー やっほー)
 Low Pass Filter : 低音 (Low) を通す (Pass) → 高音をカットする
 etc...
サウンドエフェクト
エフェクター
(エフェクトをかける機材)
エフェクター
© historia Inc.
Modular Synth
Component
Audio MIDI
MIDI Device
Support Plugin
Unreal Engine
デモの構成図上では…
Modular Synth
Component
© historia Inc.
新機能 : SourceEffect
 SourceEffect
 エフェクトそのもの
 SourceEffectPreset
 SourceEffect にプリセット値を与えたもの
 同種の SourceEffect に対して複数作成できる
 SourceEffectPresetChain
 SourceEffectPreset を数珠繋ぎにしたもの
Chain
Delay エフェクトです
1 秒遅らせる
Delay エフェクトです
2 秒遅らせる
Delay エフェクトです
A
B
AC D
© historia Inc.
SourceEffect の “Source” って何?
 Source とは以下のものを指す
 SoundWave
 SoundCue
 Synth (ModularSynth など)
 Audio Component は Source ではない
 つまり、SourceEffect = 上記の要素に対してかけることができるエフェクト
 他のエフェクトとして、
SoundSubmix に対してかけることができる SubmixEffect がある
© historia Inc.
SourceEffect の使い方
1. SourceEffect を作成する (C++)
(解説後回し)
2. SourceEffectPreset を作成して
プリセット値を設定する
3. SourceEffectPresetChain を作成して
SourceEffectPreset をセットする
4. Source に
SourceEffectChain をセットする
Chain
Delay エフェクトです
1 秒遅らせる
Delay エフェクトですA
AC D
Chain
© historia Inc.
手順 2. SourceEffectPreset を作成して
プリセット値を設定する
 Content Browser
-> Add New -> Sounds
-> Source Effect Preset を選択
© historia Inc.
手順 2. SourceEffectPreset を作成して
プリセット値を設定する
 SourceEffect を選択
 デフォルトで 11 種類
© historia Inc.
手順 2. SourceEffectPreset を作成して
プリセット値を設定する
 作成した SourceEffectPreset を開き、
Details パネル
-> Audio -> Effects
-> Settings の値を設定する
© historia Inc.
手順 3. SourceEffectPresetChain を作成して
SourceEffectPreset をセットする
 Content Browser
-> Add New -> Sounds
-> Source Effect Preset Chain を選択
© historia Inc.
手順 3. SourceEffectPresetChain を作成して
SourceEffectPreset をセットする
 作成した SourceEffectPresetChain を開き、
Details パネル
-> Source Effect -> Chain に
SourceEffectPreset をセットする
© historia Inc.
手順 3. SourceEffectPresetChain を作成して
SourceEffectPreset をセットする
 エフェクトは
index 0 から順番にかかります
 順番が異なると結果も異なるので注意
 Bypass (迂回) で
エフェクトがかからないようにできる
Chain
Chain
Chain
© historia Inc.
手順 4. Source に
SourceEffectChain をセットする
 SoundWave / SoundCue / Synth Component を開き、
Details パネル -> Effects-> Source Effect Chain に
SourceEffectChain をセットする
© historia Inc.
確認方法
 SoundWave / SoundCue の場合は
Content Browser 上で再生すれば
エフェクトがかかった状態で確認できる
© historia Inc.
Blueprint でできること
 SourceEffectPresetChain に対する SourceEffectPreset の追加・削除
 SourceEffectPresetChain 内の SourceEffectPreset の Bypass 設定
© historia Inc.
Blueprint でできること
 SourceEffectPreset の Settings の変更 (エフェクトの実行時設定調整)
© historia Inc.
手順 1. SourceEffect を作成する (C++)
 Add New -> New C++ Class を選択する
 Show All Classes のチェックをオンにして
SoundEffectSourcePreset を検索・選択し、Next を選択
© historia Inc.
手順 1. SourceEffect を作成する (C++)
 Name に “SourceEffect<エフェクト名>” と入力
 このように命名すると、デフォルトの SourceEffect 関連クラスと命名規則が合います
 Create Class を選択
© historia Inc.
手順 1. SourceEffect を作成する (C++)
 3 つのクラス・構造体が
自動的に作成される
 FSourceEffect~Settings
 エフェクト設定の構造体
 FSourceEffect~
 音データの処理を担当するクラス
 FSourceEffect~Preset
 上記 2 つを
Editor に公開するためのクラス
© historia Inc.
手順 1. SourceEffect を作成する (C++)
 作成した時点で
“Volume を変更するエフェクト”
として機能する
© historia Inc.
手順 1. SourceEffect を作成する (C++)
 ソースに手を加える部分
 FSourceEffect~Settings
 設定項目をメンバ変数として追加
 FSourceEffect~
 メンバ関数 Init を override
 Audio 処理前に呼び出される初期化用関数
 メンバ関数 OnPresetChanged を override
 Preset (Settings) の設定が変更されたときに呼び出される関数
 メンバ関数 ProcessAudio を override
 Audio 処理を行う関数
© historia Inc.
手順 1. SourceEffect を作成する (C++)
 関数 ProcessAudio
 引数 InData.AudioFrame として渡される音の波の変位を元に計算を行い、
引数 OutData.AudioFrame に新しい変位を代入することで出力を行う
 InData, OutData 共に値の範囲は [-1.0, 1.0)
 InData はその瞬間の波の変位なので、
ある期間内の波の変位が欲しい場合は
バッファリングする必要がある
 波の変位とは?
 ある時点での波の高さの値のこと
変位 0.5
ある時点
© historia Inc.
手順 1. SourceEffect を作成する (C++)
 “Volume を変更するエフェクト” のコード例
InData.AudioFrame[Channel] = 0.5 OutData.AudioFrame[Channel] = 0.25
×
VolumeScale (例 : 0.5)
© historia Inc.
[新] 現在の音の大きさを取得する
© historia Inc.
デモでは…
 キーボードとスペクトラムビジュアライザが
BGM の音の大きさに合わせて拡大・縮小する
© historia Inc.
音波
 空気の圧力変化の波
 振幅が大きい方が音が大きい
 周波数が高い (波長が短い) 方が音が高い
音が大きくて低い 音が小さくて高い比較
© historia Inc.
音の大きさを取得する
 今の音の大きさを知りたい → 振幅を取ればよい
 ある時点での変位を見るだけでは振幅はわからない
(振幅は大きいのに)
この時点での変位は0
© historia Inc.
音の大きさを取得する
 欲しいのは変位の包絡線
→ これを取得するために EnvelopeFollower を使う
 Envelope = 包絡線、Follower = 追跡者
© historia Inc.
新機能 : EnvelopeFollower
 EnvelopeFollower は
以下の組み合わせで動作する
 通知送信側となる
SourceEffect
 通知受信側となる
ActorComponent
© historia Inc.
SourceEffectEnvelopeFollower
 通常の SourceEffect
 EnvelopeFollower
計算
→ 結果を出力に反映
入力
出力
(音が変わる)
計算
→ 結果を外部に通知
入力
出力
(音は変わらない)
受信側振幅
© historia Inc.
Modular Synth
Component
Audio MIDI
MIDI Device
Support Plugin
Unreal Engine
Modular Synth
Component
デモの構成図上では…
振幅
ビジュアライズ
Envelope
Follower
Listener
Component
Source Effect
Envelope Follower
Preset
© historia Inc.
EnvelopeFollower の使い方
 他の SourceEffect と同じように以下の手順を行う
 SourceEffectPreset を作成して
プリセット値を設定する
 SourceEffectPresetChain を作成して
SourceEffectPreset をセットする
 Source に
SourceEffectChain をセットする
© historia Inc.
EnvelopeFollower の使い方
 振幅情報を利用したい Actor の Blueprint にて
EnvelopeFollowerListenerComponent (受信側) を追加する
 SourceEffectEnvelopeFollowerPreset
型の変数を追加し、
Default 値として Preset (送信側) を設定する
© historia Inc.
EnvelopeFollower の使い方
 RegisterEnvelopeFollowerListener 関数 を使い、
受信側と送信側を結びつける
送信側
受信側
© historia Inc.
EnvelopeFollower の使い方
 EnvelopeFollowerListenerComponent の Event
OnEnvelopeFollowerUpdate を Event Graph に追加する
 この Event の Envelope Value から振幅情報を取得できる
© historia Inc.
[新] 音の高さ毎の
音の大きさを取得する
© historia Inc.
デモでは…
 スペクトル解析結果をビジュアライズ
(スペクトラムビジュアライザ)
© historia Inc.
波の分解
 複雑な波は
単純な波 (正弦波・余弦波) の足し算で
表すことができる
正弦波 (sin)
余弦波 (cos)
© historia Inc.
スペクトル解析
 複雑な波を単純な波に分解すると
各周波数における振幅がわかる
→ 音の高さ毎に音の大きさがわかる
(スペクトル解析)
低くて大きい音 高くて小さい音
+
周波数 (音の高さ)
© historia Inc.
Sound Visualizations Plugin を使う?
 関数 CalculateFrequencySpectrum で
スペクトル解析を行うことができる
© historia Inc.
Sound Visualizations Plugin の問題点
 エフェクトがかかる前の SoundWave の解析にしか対応していない
 .wav のヘッダ情報を読んで解析を行っているため
 Packaging に対応していない
 .wav のヘッダ情報を読む部分のコードが Editor only のため
 Epic の内部イベントで作られた実験的ツールであり、
開発者は今後フォローアップするつもりがない
 https://answers.unrealengine.com/questions/144483/packaging-
game-fails-with-audio-visualization-plug.html
© historia Inc.
スペクトル解析結果を通知する Source Effect の自作
 EnvelopeFollower と同じ仕組みで
振幅の代わりに スペクトル解析結果 を外部に通知する
SourceEffect を実装すれば
スペクトラムビジュアライザが作れる
受信側スペクトル
外部に通知
音はそのまま
© historia Inc.
スペクトル解析結果を通知する Source Effect の自作
 通知の送信方法や
受信側となる ActorComponent の実装は
EnvelopeFollower のソースコードを参考にする
 /Engine/Plugins/Runtime/Synthesis/Source/Synthesis/Classes/SourceEffects/SourceEffectEnvel
opeFollower.h
 一定期間の変位値が必要なため、バッファリングを行う
 スペクトル解析処理は
Sound Visualizations Plugin のロジックを流用
 高速フーリエ変換ライブラリ Kiss FFT が使用されている
© historia Inc.
Modular Synth
Component
Audio MIDI
MIDI Device
Support Plugin
Unreal Engine
Modular Synth
Component
デモの構成図上では…
スペクトル解析結果
ビジュアライズ
Spec
Analizer
Listener
Component
Source Effect
Spec Analizer
Preset
© historia Inc.
スペクトル解析結果を通知する Source Effect の自作
 SourceEffect の効果が反映されるスペクトラムビジュアライザが完成
 Low Pass Filter をかけると
高音のスペクトル値が小さくなることが確認できる
© historia Inc.
まとめ
© historia Inc.
まとめ
 Unreal Engine の標準オーディオ機能だけでも
多くのことができるようになりそう!
 オーディオミドルウェアを採用しないプロジェクトにおいて
音による表現を諦めずに済むケースが多くなるかと思います
 とはいえまだ Early Access Preview なので、安定性に不安が残ります
 標準オーディオ機能の他にも、オーディオミドルウェア、
Market Place の Plugin など、いろいろな選択肢があります
 機能だけでなく、ワークフロー、過去の資産、予算などを考慮した上で
適切なものを選択しましょう
© historia Inc.
ご清聴ありがとうございました!

More Related Content

PDF
UE4でTranslucencyやUnlitに影を落としたい!
PDF
そう、UE4ならね。あなたのモバイルゲームをより快適にする沢山の冴えたやり方について Part 2 <Texture Streaming, メモリプロ...
PDF
猫でも分かるUE4.22から入ったSubsystem
PPTX
UE4のライティング解体新書~効果的なNPRのためにライティングの仕組みを理解しよう~
PPTX
[IGF2018] UE4でAndroidアプリを開発する際に知っておきたいパフォーマンス改善テクニック + INDIE GAMES FESTIVAL 2...
PDF
UE4プログラマー勉強会 in 大阪 -エンジンの内部挙動について
PDF
UE4 Volumetric Fogで 空間を演出する!
PDF
Unreal Engine 4を使って地球を衛る方法
UE4でTranslucencyやUnlitに影を落としたい!
そう、UE4ならね。あなたのモバイルゲームをより快適にする沢山の冴えたやり方について Part 2 <Texture Streaming, メモリプロ...
猫でも分かるUE4.22から入ったSubsystem
UE4のライティング解体新書~効果的なNPRのためにライティングの仕組みを理解しよう~
[IGF2018] UE4でAndroidアプリを開発する際に知っておきたいパフォーマンス改善テクニック + INDIE GAMES FESTIVAL 2...
UE4プログラマー勉強会 in 大阪 -エンジンの内部挙動について
UE4 Volumetric Fogで 空間を演出する!
Unreal Engine 4を使って地球を衛る方法

What's hot (20)

PDF
UE4 Performance and Profiling | Unreal Dev Day Montreal 2017 (日本語訳)
PDF
PDF
ヒストリア HelixCore(Perforce) 運用レギュレーションドキュメント
PDF
猫でも分かるUE4のポストプロセスを使った演出・絵作り
PPTX
マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD
PDF
60fpsアクションを実現する秘訣を伝授 基礎編
PDF
Unreal Engine 5 早期アクセスの注目機能総おさらい Part 2
PPTX
UE4アセットリダクション手法紹介
PDF
60fpsアクションを実現する秘訣を伝授 解析編
PDF
UE4で学ぶ水中表現(UE4 Environment Art Dive)
PDF
Nintendo Switch『OCTOPATH TRAVELER』はこうして作られた
PDF
ファンタジー背景グラフィック制作事例(UE4 Environment Art Dive)
PDF
UE4における大規模背景制作事例 最適化ワークフロー編
DOCX
UE4でPerforceと連携するための手順
PPTX
ゆるゆるUE4ネットワーク入門
PDF
なぜなにFProperty - 対応方法と改善点 -
PPTX
UE4 MultiPlayer Online Deep Dive 基礎編2 -Traveling- (historia様ご講演) #ue4dd
PDF
UE4のシーケンサーをもっともっと使いこなそう!最新情報・Tipsをご紹介!
PPTX
UE4のスレッドの流れと Input Latency改善の仕組み
UE4 Performance and Profiling | Unreal Dev Day Montreal 2017 (日本語訳)
ヒストリア HelixCore(Perforce) 運用レギュレーションドキュメント
猫でも分かるUE4のポストプロセスを使った演出・絵作り
マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD
60fpsアクションを実現する秘訣を伝授 基礎編
Unreal Engine 5 早期アクセスの注目機能総おさらい Part 2
UE4アセットリダクション手法紹介
60fpsアクションを実現する秘訣を伝授 解析編
UE4で学ぶ水中表現(UE4 Environment Art Dive)
Nintendo Switch『OCTOPATH TRAVELER』はこうして作られた
ファンタジー背景グラフィック制作事例(UE4 Environment Art Dive)
UE4における大規模背景制作事例 最適化ワークフロー編
UE4でPerforceと連携するための手順
ゆるゆるUE4ネットワーク入門
なぜなにFProperty - 対応方法と改善点 -
UE4 MultiPlayer Online Deep Dive 基礎編2 -Traveling- (historia様ご講演) #ue4dd
UE4のシーケンサーをもっともっと使いこなそう!最新情報・Tipsをご紹介!
UE4のスレッドの流れと Input Latency改善の仕組み
Ad

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

PDF
ソフトシンセを作りながら学ぶPythonプログラミング
PPTX
【Unity道場スペシャル 2017札幌】超初心者向け!Unityのオーディオ機能を使ってみよう
PDF
SIG-Audio#9 FINAL FANTASY XIII シリーズの音響制作から考える多様化ニーズへの対応
PDF
プログラミング講座
PDF
SimpleAudioEngine のカスタマイズ
PDF
「Adx2 LE」Unity活用編 初~中級編
PDF
【Unite Tokyo 2018】Audio機能の基礎と実装テクニック
PDF
Unreal Engine 4 Education 3 シーケンサーでリアルタイム映像作成
PDF
iOSサウンドTIPS〜作成から再生まで
PDF
重い音楽と軽い音楽 欧米と日本のゲーム音楽の違いについて
PPTX
モバイル×VRにおける3Dサウンド実践
PDF
Unity サウンドTips 2019
PDF
SIG-AUDIO 2025 Vol.02 オンラインセミナー SIG-Audioプレゼン資料_オーディオプラグイン開発_塩澤達矢.pdf
PDF
音にこだわる! ネイティブアプリだからできる 快適なサウンド演出
PDF
ソーシャルゲームサウンドMeetup_vol.1_SQUARE ENIX編
PDF
130622-gcs2013-presentation-c
PDF
Gcm#3 グリーモバイルサウンドの歩み・変遷
PDF
SIG-Audio #14 GDC Audio報告会「最先端のInteractive Musicとその未来」
PDF
SIG-Audio#13 GDC2016オーディオ報告会「日本語翻訳されないサウンドデザイン技術を求めて」
ソフトシンセを作りながら学ぶPythonプログラミング
【Unity道場スペシャル 2017札幌】超初心者向け!Unityのオーディオ機能を使ってみよう
SIG-Audio#9 FINAL FANTASY XIII シリーズの音響制作から考える多様化ニーズへの対応
プログラミング講座
SimpleAudioEngine のカスタマイズ
「Adx2 LE」Unity活用編 初~中級編
【Unite Tokyo 2018】Audio機能の基礎と実装テクニック
Unreal Engine 4 Education 3 シーケンサーでリアルタイム映像作成
iOSサウンドTIPS〜作成から再生まで
重い音楽と軽い音楽 欧米と日本のゲーム音楽の違いについて
モバイル×VRにおける3Dサウンド実践
Unity サウンドTips 2019
SIG-AUDIO 2025 Vol.02 オンラインセミナー SIG-Audioプレゼン資料_オーディオプラグイン開発_塩澤達矢.pdf
音にこだわる! ネイティブアプリだからできる 快適なサウンド演出
ソーシャルゲームサウンドMeetup_vol.1_SQUARE ENIX編
130622-gcs2013-presentation-c
Gcm#3 グリーモバイルサウンドの歩み・変遷
SIG-Audio #14 GDC Audio報告会「最先端のInteractive Musicとその未来」
SIG-Audio#13 GDC2016オーディオ報告会「日本語翻訳されないサウンドデザイン技術を求めて」
Ad

More from historia_Inc (20)

PPTX
電撃! ゲリラ的ゲームプロデュース論
PDF
目指せ脱UE4初心者!?知ってると開発が楽になる便利機能を紹介 - DataAsset, Subsystem, GameplayAbility編 -
PDF
Caligula2 フィールド開発事例 ~遊びの設計から、ゲームの世界の完成まで~
PDF
UE5制作事例 “The Market of Light” ~Nanite/Lumenへの挑戦~
PDF
実戦投入事例! Niagaraで地球の風をビジュアライズ!
PDF
コンテンツサンプルを楽しむ"超"初心者の為のNiagara
PDF
Megascansを使った効率化と楽しい絵作り ~Cutting-Edge Test Drive制作事例~
PDF
ゲーム開発を乗りこなせ! ヒストリア流ゲーム開発マネジメント手法
PPTX
【出張ヒストリア2019】Oculus Quest フリーロームVRを実現するための技術的知見
PPTX
「Helix Core」導入事例紹介 『小~中規模事例 "Unreal Engine 4 × Helix Core ヒストリア運用レギュレーション紹介"』
PDF
【出張ヒストリア2019】COLORSプロジェクトフォトグラメトリに挑戦してみた!
PPTX
映像屋さんのためのリアルタイムBG制作
PDF
【出張ヒストリア2018】モーションキャプチャーを取り入れるには?
PPTX
【出張ヒストリア2018】Caligula Overdose 開発ワークフロー アラカルト
PDF
【出張ヒストリア2018】Caligula OverdoseでのUIデザインアプローチ
PPTX
【出張ヒストリア2017】 建てる前に体験する時代到来! Enlightenを使用した建築ビジュアライゼーション
PPTX
[UNREAL FEST EAST 2017] VRゲームairtone制作事例 - VRを活かす3つのゲームデザイン的挑戦
PPTX
【出張ヒストリア2017】 Art of airtone
PPTX
【出張ヒストリア2017】 想像と違ってた! VRUI作りのコツ
PDF
VR音ゲー最前線! WwiseとUE4で実現Airtone
電撃! ゲリラ的ゲームプロデュース論
目指せ脱UE4初心者!?知ってると開発が楽になる便利機能を紹介 - DataAsset, Subsystem, GameplayAbility編 -
Caligula2 フィールド開発事例 ~遊びの設計から、ゲームの世界の完成まで~
UE5制作事例 “The Market of Light” ~Nanite/Lumenへの挑戦~
実戦投入事例! Niagaraで地球の風をビジュアライズ!
コンテンツサンプルを楽しむ"超"初心者の為のNiagara
Megascansを使った効率化と楽しい絵作り ~Cutting-Edge Test Drive制作事例~
ゲーム開発を乗りこなせ! ヒストリア流ゲーム開発マネジメント手法
【出張ヒストリア2019】Oculus Quest フリーロームVRを実現するための技術的知見
「Helix Core」導入事例紹介 『小~中規模事例 "Unreal Engine 4 × Helix Core ヒストリア運用レギュレーション紹介"』
【出張ヒストリア2019】COLORSプロジェクトフォトグラメトリに挑戦してみた!
映像屋さんのためのリアルタイムBG制作
【出張ヒストリア2018】モーションキャプチャーを取り入れるには?
【出張ヒストリア2018】Caligula Overdose 開発ワークフロー アラカルト
【出張ヒストリア2018】Caligula OverdoseでのUIデザインアプローチ
【出張ヒストリア2017】 建てる前に体験する時代到来! Enlightenを使用した建築ビジュアライゼーション
[UNREAL FEST EAST 2017] VRゲームairtone制作事例 - VRを活かす3つのゲームデザイン的挑戦
【出張ヒストリア2017】 Art of airtone
【出張ヒストリア2017】 想像と違ってた! VRUI作りのコツ
VR音ゲー最前線! WwiseとUE4で実現Airtone

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

  • 1. © historia Inc. 新しい Unreal Audio Engine で インタラクティブサウンドコンテンツは どこまでつくれるか!? historia Inc. 加藤 優作
  • 2. © historia Inc. 自己紹介  加藤 優作 (エンジニア)  開発実績  ハネチャリ (VR Zone Shinjuku にて稼働中)  コミュニティ活動  Gray ちゃん 3D モデル制作
  • 3. © historia Inc. 新しいオーディオ機能  Unreal Engine 4.16 から 新しいオーディオ機能が多数追加されました!  Unreal Audio Engine  新しいオーディオエンジン  サウンドエフェクト機能の追加など  Synthesis  音色を作成して鳴らすことができる  Steam Audio  物理ベースオーディオ体験の実現
  • 4. © historia Inc. 発表概要  新しいオーディオ機能の追加によって Unreal Engine の機能だけで どこまで面白いことができるようになったのか を デモを作成しながら検証  使用した各オーディオ機能について  それを使うとどんなことができるのか  どのように使うか を解説
  • 5. © historia Inc. 諸注意  Unreal Audio Engine 及び Synthesis Plugin は Early Access Preview 扱いです (UE 4.16 現在)  今後機能や使い方が変更になる可能性があります  なるべくわかりやすい解説にするために 内容の正確性・厳密性を犠牲にしています  新機能以外の解説もします  検証環境  Unreal Engine 4.16.3  Windows 10
  • 8. © historia Inc. デモの解説  インタラクティブなオーディオビジュアライザ  キーボードを弾く “楽器演奏者” と マウスを操作する “ゲームプレイヤー” の 2 人が必要
  • 9. © historia Inc. デモの解説 ① BGM に合わせて キーボードを弾く
  • 10. © historia Inc. デモの解説 ① BGM に合わせて キーボードを弾く ② 鍵盤エフェクトが出る
  • 11. © historia Inc. デモの解説 ① BGM に合わせて キーボードを弾く ③ 鍵盤エフェクトを ロックオン・破壊 ② 鍵盤エフェクトが出る
  • 12. © historia Inc. デモの解説 ① BGM に合わせて キーボードを弾く ④ 破片エフェクトがキーボードに当たって BGM に合った音が鳴る ③ 鍵盤エフェクトを ロックオン・破壊 ② 鍵盤エフェクトが出る
  • 13. © historia Inc. デモの解説 ① BGM に合わせて キーボードを弾く ④ 破片エフェクトがキーボードに当たって BGM に合った音が鳴る ③ 鍵盤エフェクトを ロックオン・破壊 ② 鍵盤エフェクトが出る ゲームプレイが音に影響を与える 楽器演奏がゲームに影響を与える
  • 15. © historia Inc. MIDI  演奏データ (MIDI Event) を 機器間でやりとりするための世界共通規格  MIDI – Wikipedia  楽譜のようなもの  実際の音のデータではない  MIDI Event の例 : Note On  どのチャンネル (楽器パート) の  どの高さの音を  どれくらいの強さで弾いた?
  • 16. © historia Inc. Audio  音そのもののデータのこと  .wav / .mp3 / .ogg
  • 19. © historia Inc. Modular Synth Component デモの音データの流れ Audio MIDI MIDI Device Support Plugin Unreal Engine Modular Synth Component
  • 20. © historia Inc. Audio 新機能を使うための準備
  • 21. © historia Inc. 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-New- Audio-Engine-Early-Access-Quick-Start-Guide&styleid=6  新機能の使い方もここに載っています
  • 22. © historia Inc. 手順 (Windows) 1. Config (.ini) を変更する 2. コマンドラインオプションを指定してプロジェクトを開く 3. プラグインを有効にする 4. (Editor Preferences を変更する)
  • 23. © historia Inc. 手順 1. Config (.ini) を変更する  編集するファイル (どちらか一方)  <エンジンディレクトリ>/Engine/Config/Windows/WindowsEngine.ini  <プロジェクトディレクトリ>/Config/Windows/WindowsEngine.ini  以下を追記する → これで、手順 2 で指定するコマンドラインオプションが有効に [Audio] AudioDeviceModuleName=AudioMixerXAudio2
  • 24. © historia Inc. 手順 2. コマンドラインオプションを指定してプロジェクトを開く  -audiomixer オプションを指定してプロジェクトを開く  コマンドプロンプトで以下を実行する  具体例  .bat ファイル化を推奨 <UE4Editor.exe のパス> < .uproject のパス > –audiomixer “C:Program FilesEpic GamesUE_4.16EngineBinariesWin64UE4Editor.exe” “C:Test_AudioEngineTest_AudioEngine.uproject” –audiomixer 半角スペース 半角スペース
  • 25. © historia Inc. 手順 3. プラグインを有効にする  Audio -> Sound Utilities  Audio -> Synthesis (Synth を使う場合)
  • 26. © historia Inc. (手順 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 時の音なども再生されなくなる
  • 27. © historia Inc. (手順 4. Editor Preferences を変更する) ※ 必須ではありません  Editor Preferences を開き、以下の設定を変更する  General -> Miscellaneous -> Performance -> Use Less CPU when in Background : OFF  エディタからフォーカスが外れても CPU 消費が少なくならない
  • 29. © historia Inc. 目次  [旧] キーボードからの MIDI Event を受信する  [新] シンセサイザーで音を鳴らす  [旧] 曲の拍のタイミングを取得する  [新] 音にエフェクトをかける  [新] 現在の音の大きさを取得する  [新] 音の高さ毎の音の大きさを取得する
  • 30. © historia Inc. [旧] キーボードからの MIDI Event を受信する
  • 31. © historia Inc. デモでは…  (機材の) キーボードを弾くと (画面の) キーボードの対応するキーが光ったり Particle が出たりする
  • 32. © historia Inc. Modular Synth Component Audio MIDI Unreal Engine Modular Synth Component デモの構成図上では… ビジュアライズ MIDI Device Support Plugin
  • 33. © historia Inc. MIDI Device Support Plugin  MIDI Event の受信を行うための Plugin  Plugin の説明には “send and receive MIDI events” と書かれているが、送信処理が見当たらない…
  • 34. © historia Inc. MIDI Device Support Plugin の使い方  FindMIDIDevices 関数 で 接続中の MIDI Device を列挙する  FoundMIDIDevice 構造体 のリストから使いたい Device を判断  Device の名前  Device が既に使用されているかどうか  etc...
  • 35. © historia Inc. MIDI Device Support Plugin の使い方  CreateMIDIDeviceController 関数 で MIDIDeviceController を作成  MIDI Event 受信時に呼ばれる OnMIDIEvent に Event を Bind
  • 36. © historia Inc. MIDI Device Support Plugin の使い方  作成した MIDIDeviceController は 変数に Set しないと GC に回収されてしまうので注意
  • 37. © historia Inc. MIDI Device Support Plugin の使い方  Event Type で MIDI Event の種類がわかる
  • 38. © historia Inc. MIDI Device Support Plugin の使い方  受信した MIDI Event が Note On の場合  Controll ID = ノート番号 (中央 C = 60)  Velocity = 音の強さ (数字が大きいほど音が強い、範囲 [0, 127])
  • 39. © historia Inc. MIDI Device Support Plugin の使い方  受信した MIDI Event が Note Off の場合  Controll ID = ノート番号 (中央 C = 60)
  • 40. © historia Inc. [新] シンセサイザーで音を鳴らす
  • 41. © historia Inc. デモでは…  破片エフェクトがキーボードに当たった時の音を生成
  • 42. © historia Inc. シンセサイザー (Synthesizer / Synth) とは?  電気的に音を合成する機器 のこと  パラメータ変更で色々な音を作ることができる  色々な合成方式がある  減算合成  加算合成  グラニュラー  etc...  シンセ ≠ キーボード  鍵盤付きシンセが多いが 音の合成機能があれば鍵盤がなくてもシンセ The Future of Audio in Unreal Engine | GDC 2017 | Unreal Engine – YouTube より https://www.youtube.com/watch?v=ErejaBCicds
  • 43. © historia Inc. Unreal Engine の Synth の種類と日本語情報  Modular Synth (減算合成)  UE4 4.16のPreview版の新Audio機能の所感など | 株式会社プラスシグナル  https://www.plus-signal.com/single-post/2017/05/15/UE4- 416%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初心者が頑張ってるブログ  http://mozpaca.hatenablog.com/entry/20170514/1494754900  Granular Synth  【UE4】Unreal Engine 4.16 PreviewのGranular Synthを触ってみる - 大福未来研究所  http://dfkfuturelab.hatenablog.com/entry/2017/05/16/081659  Synth Sample Player (?)
  • 44. © historia Inc. Modular Synth (減算合成) The Future of Audio in Unreal Engine | GDC 2017 | Unreal Engine – YouTube より https://www.youtube.com/watch?v=ErejaBCicds 波の形を決める フィルタをかける 音量変化をコントロールする (音としては使わない) 波などで パラメータをコントロールする
  • 45. © historia Inc. Modular Synth の使い方  ModularSynthComponent を追加  NoteOn 関数 で音を再生  引数 Duration で音が鳴る長さを指定  負の値を入れると NoteOff までずっと鳴る  NoteOff 関数 で音を停止
  • 46. © historia Inc. Modular Synth の使い方  引数 Note / Velocity には MIDI Event と同じルールで ノート番号 / 音の強さ を与える  MIDI Event の値をそのまま Synth に渡せば 「キーボードを弾くと Unreal で音が鳴る」 ロジックが完成
  • 47. © historia Inc. Modular Synth の使い方  音のパラメータを変更するには Set Synth Preset 関数 を使う  ModularSynthPreset 構造体 を作って渡せばよいが…
  • 48. © historia Inc. Modular Synth の使い方  メンバ変数が多い!  Preset を Asset として定義して呼び出す → ModularSynthPresetBank を使う
  • 49. © historia Inc. ModularSynthPresetBank を使う  Add New -> Sounds -> Modular Synth Preset Bank を選択  Preset を編集  複数の Preset を作成できる
  • 50. © historia Inc. ModularSynthPresetBank を使う  ModularSynthPresetBank の参照変数を作成し、 そこから使用する Preset を取得する
  • 51. © historia Inc. Preset Q&A  Q. 複数の Note を NoteOn しているのに 1 つしか鳴らない  A. Enable Polyphony を true にしてください  Q. 音痴になった  A.  Osc 1 or 2 の Semitones と Cents を 0 にしてください  Chorus Enabled を false にしてください
  • 52. © historia Inc. [旧] 曲の拍のタイミングを取得する
  • 53. © historia Inc. デモでは…  各小節の 1 拍目に リング状の Mesh を Spawn  破片エフェクトが リズムに合うタイミング で BGM のコードに合う鍵盤 に当たるように調整
  • 54. © historia Inc. OnAudioPlaybackPercent  AudioComponent の Event  PlaybackPercent は現在の再生率を返す  0.0 から始まり 1.0 で Audio の最後に到達  ループ再生すると 1 を超える  PlayingSoundWave は現在再生中の SoundWave を返す  SoundWave の Duration (Audio の長さ (秒)) x Playback Percent = 現在の再生位置 (秒)
  • 55. © historia Inc.  BPM = Beats Per Minite  1 分間における拍の数  BPM 60 = 1 分間に 60 拍 = 1 秒で 1 拍  60 ÷ BPM = 1 拍にかかる秒数  現在の再生位置 ÷ 1 拍にかかる秒数 = 現在の累計拍数 (0 始まり)  現在の累計拍数 ÷ 1 小節における拍の数 + 1 =  現在の累計拍数 % 1 小節における拍の数 + 1 = 現在の小節数 現在の小節数・拍数の求め方 現在の拍数
  • 58. © historia Inc. BGM のコードに合った音の選択  何小節目の何拍目に 何のコードになるかを DataTable で管理  計算で求めた現在の小節数・拍数から コードに合った音を選定する  例 : 21 小節目の 1 拍目に F minor 7th のコードになる → コードに合った音は F / A♭ / C / E♭
  • 59. © historia Inc. [新] 音にエフェクトをかける
  • 60. © historia Inc. デモでは…  キーボード (文字を打つ方) の操作で BGM に Low Pass Filter がかかり、音がこもった感じに  Filter のかかり具合を実行時に調整  Filter が強くかかるほど彩度が落ちるように
  • 61. © historia Inc.  サウンドエフェクトとは?  音に対して何らかの加工を行うもの  種類  Delay : やまびこ効果 (やっほー やっほー)  Low Pass Filter : 低音 (Low) を通す (Pass) → 高音をカットする  etc... サウンドエフェクト エフェクター (エフェクトをかける機材) エフェクター
  • 62. © historia Inc. Modular Synth Component Audio MIDI MIDI Device Support Plugin Unreal Engine デモの構成図上では… Modular Synth Component
  • 63. © historia Inc. 新機能 : SourceEffect  SourceEffect  エフェクトそのもの  SourceEffectPreset  SourceEffect にプリセット値を与えたもの  同種の SourceEffect に対して複数作成できる  SourceEffectPresetChain  SourceEffectPreset を数珠繋ぎにしたもの Chain Delay エフェクトです 1 秒遅らせる Delay エフェクトです 2 秒遅らせる Delay エフェクトです A B AC D
  • 64. © historia Inc. SourceEffect の “Source” って何?  Source とは以下のものを指す  SoundWave  SoundCue  Synth (ModularSynth など)  Audio Component は Source ではない  つまり、SourceEffect = 上記の要素に対してかけることができるエフェクト  他のエフェクトとして、 SoundSubmix に対してかけることができる SubmixEffect がある
  • 65. © historia Inc. SourceEffect の使い方 1. SourceEffect を作成する (C++) (解説後回し) 2. SourceEffectPreset を作成して プリセット値を設定する 3. SourceEffectPresetChain を作成して SourceEffectPreset をセットする 4. Source に SourceEffectChain をセットする Chain Delay エフェクトです 1 秒遅らせる Delay エフェクトですA AC D Chain
  • 66. © historia Inc. 手順 2. SourceEffectPreset を作成して プリセット値を設定する  Content Browser -> Add New -> Sounds -> Source Effect Preset を選択
  • 67. © historia Inc. 手順 2. SourceEffectPreset を作成して プリセット値を設定する  SourceEffect を選択  デフォルトで 11 種類
  • 68. © historia Inc. 手順 2. SourceEffectPreset を作成して プリセット値を設定する  作成した SourceEffectPreset を開き、 Details パネル -> Audio -> Effects -> Settings の値を設定する
  • 69. © historia Inc. 手順 3. SourceEffectPresetChain を作成して SourceEffectPreset をセットする  Content Browser -> Add New -> Sounds -> Source Effect Preset Chain を選択
  • 70. © historia Inc. 手順 3. SourceEffectPresetChain を作成して SourceEffectPreset をセットする  作成した SourceEffectPresetChain を開き、 Details パネル -> Source Effect -> Chain に SourceEffectPreset をセットする
  • 71. © historia Inc. 手順 3. SourceEffectPresetChain を作成して SourceEffectPreset をセットする  エフェクトは index 0 から順番にかかります  順番が異なると結果も異なるので注意  Bypass (迂回) で エフェクトがかからないようにできる Chain Chain Chain
  • 72. © historia Inc. 手順 4. Source に SourceEffectChain をセットする  SoundWave / SoundCue / Synth Component を開き、 Details パネル -> Effects-> Source Effect Chain に SourceEffectChain をセットする
  • 73. © historia Inc. 確認方法  SoundWave / SoundCue の場合は Content Browser 上で再生すれば エフェクトがかかった状態で確認できる
  • 74. © historia Inc. Blueprint でできること  SourceEffectPresetChain に対する SourceEffectPreset の追加・削除  SourceEffectPresetChain 内の SourceEffectPreset の Bypass 設定
  • 75. © historia Inc. Blueprint でできること  SourceEffectPreset の Settings の変更 (エフェクトの実行時設定調整)
  • 76. © historia Inc. 手順 1. SourceEffect を作成する (C++)  Add New -> New C++ Class を選択する  Show All Classes のチェックをオンにして SoundEffectSourcePreset を検索・選択し、Next を選択
  • 77. © historia Inc. 手順 1. SourceEffect を作成する (C++)  Name に “SourceEffect<エフェクト名>” と入力  このように命名すると、デフォルトの SourceEffect 関連クラスと命名規則が合います  Create Class を選択
  • 78. © historia Inc. 手順 1. SourceEffect を作成する (C++)  3 つのクラス・構造体が 自動的に作成される  FSourceEffect~Settings  エフェクト設定の構造体  FSourceEffect~  音データの処理を担当するクラス  FSourceEffect~Preset  上記 2 つを Editor に公開するためのクラス
  • 79. © historia Inc. 手順 1. SourceEffect を作成する (C++)  作成した時点で “Volume を変更するエフェクト” として機能する
  • 80. © historia Inc. 手順 1. SourceEffect を作成する (C++)  ソースに手を加える部分  FSourceEffect~Settings  設定項目をメンバ変数として追加  FSourceEffect~  メンバ関数 Init を override  Audio 処理前に呼び出される初期化用関数  メンバ関数 OnPresetChanged を override  Preset (Settings) の設定が変更されたときに呼び出される関数  メンバ関数 ProcessAudio を override  Audio 処理を行う関数
  • 81. © historia Inc. 手順 1. SourceEffect を作成する (C++)  関数 ProcessAudio  引数 InData.AudioFrame として渡される音の波の変位を元に計算を行い、 引数 OutData.AudioFrame に新しい変位を代入することで出力を行う  InData, OutData 共に値の範囲は [-1.0, 1.0)  InData はその瞬間の波の変位なので、 ある期間内の波の変位が欲しい場合は バッファリングする必要がある  波の変位とは?  ある時点での波の高さの値のこと 変位 0.5 ある時点
  • 82. © historia Inc. 手順 1. SourceEffect を作成する (C++)  “Volume を変更するエフェクト” のコード例 InData.AudioFrame[Channel] = 0.5 OutData.AudioFrame[Channel] = 0.25 × VolumeScale (例 : 0.5)
  • 83. © historia Inc. [新] 現在の音の大きさを取得する
  • 84. © historia Inc. デモでは…  キーボードとスペクトラムビジュアライザが BGM の音の大きさに合わせて拡大・縮小する
  • 85. © historia Inc. 音波  空気の圧力変化の波  振幅が大きい方が音が大きい  周波数が高い (波長が短い) 方が音が高い 音が大きくて低い 音が小さくて高い比較
  • 86. © historia Inc. 音の大きさを取得する  今の音の大きさを知りたい → 振幅を取ればよい  ある時点での変位を見るだけでは振幅はわからない (振幅は大きいのに) この時点での変位は0
  • 87. © historia Inc. 音の大きさを取得する  欲しいのは変位の包絡線 → これを取得するために EnvelopeFollower を使う  Envelope = 包絡線、Follower = 追跡者
  • 88. © historia Inc. 新機能 : EnvelopeFollower  EnvelopeFollower は 以下の組み合わせで動作する  通知送信側となる SourceEffect  通知受信側となる ActorComponent
  • 89. © historia Inc. SourceEffectEnvelopeFollower  通常の SourceEffect  EnvelopeFollower 計算 → 結果を出力に反映 入力 出力 (音が変わる) 計算 → 結果を外部に通知 入力 出力 (音は変わらない) 受信側振幅
  • 90. © historia Inc. Modular Synth Component Audio MIDI MIDI Device Support Plugin Unreal Engine Modular Synth Component デモの構成図上では… 振幅 ビジュアライズ Envelope Follower Listener Component Source Effect Envelope Follower Preset
  • 91. © historia Inc. EnvelopeFollower の使い方  他の SourceEffect と同じように以下の手順を行う  SourceEffectPreset を作成して プリセット値を設定する  SourceEffectPresetChain を作成して SourceEffectPreset をセットする  Source に SourceEffectChain をセットする
  • 92. © historia Inc. EnvelopeFollower の使い方  振幅情報を利用したい Actor の Blueprint にて EnvelopeFollowerListenerComponent (受信側) を追加する  SourceEffectEnvelopeFollowerPreset 型の変数を追加し、 Default 値として Preset (送信側) を設定する
  • 93. © historia Inc. EnvelopeFollower の使い方  RegisterEnvelopeFollowerListener 関数 を使い、 受信側と送信側を結びつける 送信側 受信側
  • 94. © historia Inc. EnvelopeFollower の使い方  EnvelopeFollowerListenerComponent の Event OnEnvelopeFollowerUpdate を Event Graph に追加する  この Event の Envelope Value から振幅情報を取得できる
  • 95. © historia Inc. [新] 音の高さ毎の 音の大きさを取得する
  • 96. © historia Inc. デモでは…  スペクトル解析結果をビジュアライズ (スペクトラムビジュアライザ)
  • 97. © historia Inc. 波の分解  複雑な波は 単純な波 (正弦波・余弦波) の足し算で 表すことができる 正弦波 (sin) 余弦波 (cos)
  • 98. © historia Inc. スペクトル解析  複雑な波を単純な波に分解すると 各周波数における振幅がわかる → 音の高さ毎に音の大きさがわかる (スペクトル解析) 低くて大きい音 高くて小さい音 + 周波数 (音の高さ)
  • 99. © historia Inc. Sound Visualizations Plugin を使う?  関数 CalculateFrequencySpectrum で スペクトル解析を行うことができる
  • 100. © historia Inc. Sound Visualizations Plugin の問題点  エフェクトがかかる前の SoundWave の解析にしか対応していない  .wav のヘッダ情報を読んで解析を行っているため  Packaging に対応していない  .wav のヘッダ情報を読む部分のコードが Editor only のため  Epic の内部イベントで作られた実験的ツールであり、 開発者は今後フォローアップするつもりがない  https://answers.unrealengine.com/questions/144483/packaging- game-fails-with-audio-visualization-plug.html
  • 101. © historia Inc. スペクトル解析結果を通知する Source Effect の自作  EnvelopeFollower と同じ仕組みで 振幅の代わりに スペクトル解析結果 を外部に通知する SourceEffect を実装すれば スペクトラムビジュアライザが作れる 受信側スペクトル 外部に通知 音はそのまま
  • 102. © historia Inc. スペクトル解析結果を通知する Source Effect の自作  通知の送信方法や 受信側となる ActorComponent の実装は EnvelopeFollower のソースコードを参考にする  /Engine/Plugins/Runtime/Synthesis/Source/Synthesis/Classes/SourceEffects/SourceEffectEnvel opeFollower.h  一定期間の変位値が必要なため、バッファリングを行う  スペクトル解析処理は Sound Visualizations Plugin のロジックを流用  高速フーリエ変換ライブラリ Kiss FFT が使用されている
  • 103. © historia Inc. Modular Synth Component Audio MIDI MIDI Device Support Plugin Unreal Engine Modular Synth Component デモの構成図上では… スペクトル解析結果 ビジュアライズ Spec Analizer Listener Component Source Effect Spec Analizer Preset
  • 104. © historia Inc. スペクトル解析結果を通知する Source Effect の自作  SourceEffect の効果が反映されるスペクトラムビジュアライザが完成  Low Pass Filter をかけると 高音のスペクトル値が小さくなることが確認できる
  • 106. © historia Inc. まとめ  Unreal Engine の標準オーディオ機能だけでも 多くのことができるようになりそう!  オーディオミドルウェアを採用しないプロジェクトにおいて 音による表現を諦めずに済むケースが多くなるかと思います  とはいえまだ Early Access Preview なので、安定性に不安が残ります  標準オーディオ機能の他にも、オーディオミドルウェア、 Market Place の Plugin など、いろいろな選択肢があります  機能だけでなく、ワークフロー、過去の資産、予算などを考慮した上で 適切なものを選択しましょう