Contenu connexe
Similaire à 【出張ヒストリア2017】新しいUnreal AudioEngineでインタラクティブサウンドコンテンツはどこまでつくれるか!? (19)
Plus de historia_Inc (20)
【出張ヒストリア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
- 13. © historia Inc.
デモの解説
① BGM に合わせて
キーボードを弾く
④ 破片エフェクトがキーボードに当たって
BGM に合った音が鳴る
③ 鍵盤エフェクトを
ロックオン・破壊
② 鍵盤エフェクトが出る
ゲームプレイが音に影響を与える
楽器演奏がゲームに影響を与える
- 15. © historia Inc.
MIDI
演奏データ (MIDI Event) を
機器間でやりとりするための世界共通規格
MIDI – Wikipedia
楽譜のようなもの
実際の音のデータではない
MIDI Event の例 : Note On
どのチャンネル (楽器パート) の
どの高さの音を
どれくらいの強さで弾いた?
- 19. © historia Inc.
Modular Synth
Component
デモの音データの流れ Audio MIDI
MIDI Device
Support Plugin
Unreal Engine
Modular Synth
Component
- 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 を受信する
[新] シンセサイザーで音を鳴らす
[旧] 曲の拍のタイミングを取得する
[新] 音にエフェクトをかける
[新] 現在の音の大きさを取得する
[新] 音の高さ毎の音の大きさを取得する
- 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 に回収されてしまうので注意
- 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)
- 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 構造体 を作って渡せばよいが…
- 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 にしてください
- 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♭
- 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 をセットする
- 74. © historia Inc.
Blueprint でできること
SourceEffectPresetChain に対する SourceEffectPreset の追加・削除
SourceEffectPresetChain 内の SourceEffectPreset の Bypass 設定
- 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 に公開するためのクラス
- 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)
- 88. © historia Inc.
新機能 : EnvelopeFollower
EnvelopeFollower は
以下の組み合わせで動作する
通知送信側となる
SourceEffect
通知受信側となる
ActorComponent
- 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 (送信側) を設定する
- 94. © historia Inc.
EnvelopeFollower の使い方
EnvelopeFollowerListenerComponent の Event
OnEnvelopeFollowerUpdate を Event Graph に追加する
この Event の Envelope Value から振幅情報を取得できる
- 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
- 106. © historia Inc.
まとめ
Unreal Engine の標準オーディオ機能だけでも
多くのことができるようになりそう!
オーディオミドルウェアを採用しないプロジェクトにおいて
音による表現を諦めずに済むケースが多くなるかと思います
とはいえまだ Early Access Preview なので、安定性に不安が残ります
標準オーディオ機能の他にも、オーディオミドルウェア、
Market Place の Plugin など、いろいろな選択肢があります
機能だけでなく、ワークフロー、過去の資産、予算などを考慮した上で
適切なものを選択しましょう