Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
© historia Inc.
新しい Unreal Audio Engine で
インタラクティブサウンドコンテンツは
どこまでつくれるか!?
historia Inc.
加藤 優作
© historia Inc.
自己紹介
 加藤 優作 (エンジニア)
 開発実績
 ハネチャリ (VR Zone Shinjuku にて稼働中)
 コミュニティ活動
 Gray ちゃん 3D モデル制作
© historia Inc.
新しいオーディオ機能
 Unreal Engine 4.16 から
新しいオーディオ機能が多数追加されました!
 Unreal Audio Engine
 新しいオーディオエンジン
 サウンドエフェクト機...
© historia Inc.
発表概要
 新しいオーディオ機能の追加によって
Unreal Engine の機能だけで
どこまで面白いことができるようになったのか を
デモを作成しながら検証
 使用した各オーディオ機能について
 それを...
© historia Inc.
諸注意
 Unreal Audio Engine 及び Synthesis Plugin は
Early Access Preview 扱いです (UE 4.16 現在)
 今後機能や使い方が変更になる可能性...
© 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 ...
© 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
Compo...
© historia Inc.
Audio 新機能を使うための準備
© historia Inc.
Audio 新機能を使うための準備
 Unreal Audio Engine は
4.16 ではデフォルトで有効になっていない
 Unreal Audio Engine 開発チームの方が書いた
Forum の...
© historia Inc.
手順 (Windows)
1. Config (.ini) を変更する
2. コマンドラインオプションを指定してプロジェクトを開く
3. プラグインを有効にする
4. (Editor Preferences を変...
© historia Inc.
手順 1. Config (.ini) を変更する
 編集するファイル (どちらか一方)
 <エンジンディレクトリ>/Engine/Config/Windows/WindowsEngine.ini
 <プロ...
© historia Inc.
手順 2. コマンドラインオプションを指定してプロジェクトを開く
 -audiomixer オプションを指定してプロジェクトを開く
 コマンドプロンプトで以下を実行する
 具体例
 .bat ファイル化を...
© historia Inc.
手順 3. プラグインを有効にする
 Audio -> Sound Utilities
 Audio -> Synthesis (Synth を使う場合)
© historia Inc.
(手順 4. Editor Preferences を変更する)
※ 必須ではありません
 Editor Preferences を開き、以下の設定を変更する
 Level Editor -> Miscell...
© historia Inc.
(手順 4. Editor Preferences を変更する)
※ 必須ではありません
 Editor Preferences を開き、以下の設定を変更する
 General -> Miscellaneou...
© 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
Su...
© 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 構造体 のリストから...
© historia Inc.
MIDI Device Support Plugin の使い方
 CreateMIDIDeviceController 関数 で
MIDIDeviceController を作成
 MIDI Event 受信...
© 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)
 Veloci...
© historia Inc.
MIDI Device Support Plugin の使い方
 受信した MIDI Event が Note Off の場合
 Controll ID = ノート番号 (中央 C = 60)
© historia Inc.
[新] シンセサイザーで音を鳴らす
© historia Inc.
デモでは…
 破片エフェクトがキーボードに当たった時の音を生成
© historia Inc.
シンセサイザー (Synthesizer / Synth) とは?
 電気的に音を合成する機器 のこと
 パラメータ変更で色々な音を作ることができる
 色々な合成方式がある
 減算合成
 加算合成
 ...
© historia Inc.
Unreal Engine の Synth の種類と日本語情報
 Modular Synth (減算合成)
 UE4 4.16のPreview版の新Audio機能の所感など | 株式会社プラスシグナル
 h...
© historia Inc.
Modular Synth (減算合成)
The Future of Audio in Unreal Engine | GDC 2017 | Unreal Engine – YouTube より
https://...
© historia Inc.
Modular Synth の使い方
 ModularSynthComponent を追加
 NoteOn 関数 で音を再生
 引数 Duration で音が鳴る長さを指定
 負の値を入れると NoteO...
© historia Inc.
Modular Synth の使い方
 引数 Note / Velocity には
MIDI Event と同じルールで ノート番号 / 音の強さ を与える
 MIDI Event の値をそのまま Synth...
© 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.
...
© historia Inc.
[旧] 曲の拍のタイミングを取得する
© historia Inc.
デモでは…
 各小節の 1 拍目に リング状の Mesh を Spawn
 破片エフェクトが リズムに合うタイミング で
BGM のコードに合う鍵盤 に当たるように調整
© historia Inc.
OnAudioPlaybackPercent
 AudioComponent の Event
 PlaybackPercent は現在の再生率を返す
 0.0 から始まり 1.0 で Audio の最後に到...
© historia Inc.
 BPM = Beats Per Minite
 1 分間における拍の数
 BPM 60 = 1 分間に 60 拍 = 1 秒で 1 拍
 60 ÷ BPM = 1 拍にかかる秒数
 現在の再生位置 ÷...
© historia Inc.
現在の小節数・拍数の求め方
© historia Inc.
現在の小節数・拍数の求め方
© historia Inc.
BGM のコードに合った音の選択
 何小節目の何拍目に
何のコードになるかを
DataTable で管理
 計算で求めた現在の小節数・拍数から
コードに合った音を選定する
 例 : 21 小節目の 1 拍目...
© historia Inc.
[新] 音にエフェクトをかける
© historia Inc.
デモでは…
 キーボード (文字を打つ方) の操作で
BGM に Low Pass Filter がかかり、音がこもった感じに
 Filter のかかり具合を実行時に調整
 Filter が強くかかるほど彩...
© historia Inc.
 サウンドエフェクトとは?
 音に対して何らかの加工を行うもの
 種類
 Delay : やまびこ効果 (やっほー やっほー)
 Low Pass Filter : 低音 (Low) を通す (Pass...
© historia Inc.
Modular Synth
Component
Audio MIDI
MIDI Device
Support Plugin
Unreal Engine
デモの構成図上では…
Modular Synth
Compo...
© historia Inc.
新機能 : SourceEffect
 SourceEffect
 エフェクトそのもの
 SourceEffectPreset
 SourceEffect にプリセット値を与えたもの
 同種の Sour...
© historia Inc.
SourceEffect の “Source” って何?
 Source とは以下のものを指す
 SoundWave
 SoundCue
 Synth (ModularSynth など)
 Audio ...
© historia Inc.
SourceEffect の使い方
1. SourceEffect を作成する (C++)
(解説後回し)
2. SourceEffectPreset を作成して
プリセット値を設定する
3. SourceEff...
© 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
...
© historia Inc.
手順 3. SourceEffectPresetChain を作成して
SourceEffectPreset をセットする
 Content Browser
-> Add New -> Sounds
-> So...
© historia Inc.
手順 3. SourceEffectPresetChain を作成して
SourceEffectPreset をセットする
 作成した SourceEffectPresetChain を開き、
Details ...
© historia Inc.
手順 3. SourceEffectPresetChain を作成して
SourceEffectPreset をセットする
 エフェクトは
index 0 から順番にかかります
 順番が異なると結果も異なるの...
© historia Inc.
手順 4. Source に
SourceEffectChain をセットする
 SoundWave / SoundCue / Synth Component を開き、
Details パネル -> Effec...
© historia Inc.
確認方法
 SoundWave / SoundCue の場合は
Content Browser 上で再生すれば
エフェクトがかかった状態で確認できる
© historia Inc.
Blueprint でできること
 SourceEffectPresetChain に対する SourceEffectPreset の追加・削除
 SourceEffectPresetChain 内の Sou...
© historia Inc.
Blueprint でできること
 SourceEffectPreset の Settings の変更 (エフェクトの実行時設定調整)
© historia Inc.
手順 1. SourceEffect を作成する (C++)
 Add New -> New C++ Class を選択する
 Show All Classes のチェックをオンにして
SoundEffect...
© historia Inc.
手順 1. SourceEffect を作成する (C++)
 Name に “SourceEffect<エフェクト名>” と入力
 このように命名すると、デフォルトの SourceEffect 関連クラスと...
© historia Inc.
手順 1. SourceEffect を作成する (C++)
 3 つのクラス・構造体が
自動的に作成される
 FSourceEffect~Settings
 エフェクト設定の構造体
 FSourceEf...
© historia Inc.
手順 1. SourceEffect を作成する (C++)
 作成した時点で
“Volume を変更するエフェクト”
として機能する
© historia Inc.
手順 1. SourceEffect を作成する (C++)
 ソースに手を加える部分
 FSourceEffect~Settings
 設定項目をメンバ変数として追加
 FSourceEffect~
...
© historia Inc.
手順 1. SourceEffect を作成する (C++)
 関数 ProcessAudio
 引数 InData.AudioFrame として渡される音の波の変位を元に計算を行い、
引数 OutData....
© historia Inc.
手順 1. SourceEffect を作成する (C++)
 “Volume を変更するエフェクト” のコード例
InData.AudioFrame[Channel] = 0.5 OutData.AudioF...
© 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
デモの構成図...
© historia Inc.
EnvelopeFollower の使い方
 他の SourceEffect と同じように以下の手順を行う
 SourceEffectPreset を作成して
プリセット値を設定する
 SourceEffe...
© historia Inc.
EnvelopeFollower の使い方
 振幅情報を利用したい Actor の Blueprint にて
EnvelopeFollowerListenerComponent (受信側) を追加する
 So...
© historia Inc.
EnvelopeFollower の使い方
 RegisterEnvelopeFollowerListener 関数 を使い、
受信側と送信側を結びつける
送信側
受信側
© historia Inc.
EnvelopeFollower の使い方
 EnvelopeFollowerListenerComponent の Event
OnEnvelopeFollowerUpdate を Event Graph に...
© historia Inc.
[新] 音の高さ毎の
音の大きさを取得する
© historia Inc.
デモでは…
 スペクトル解析結果をビジュアライズ
(スペクトラムビジュアライザ)
© historia Inc.
波の分解
 複雑な波は
単純な波 (正弦波・余弦波) の足し算で
表すことができる
正弦波 (sin)
余弦波 (cos)
© historia Inc.
スペクトル解析
 複雑な波を単純な波に分解すると
各周波数における振幅がわかる
→ 音の高さ毎に音の大きさがわかる
(スペクトル解析)
低くて大きい音 高くて小さい音
+
周波数 (音の高さ)
© historia Inc.
Sound Visualizations Plugin を使う?
 関数 CalculateFrequencySpectrum で
スペクトル解析を行うことができる
© historia Inc.
Sound Visualizations Plugin の問題点
 エフェクトがかかる前の SoundWave の解析にしか対応していない
 .wav のヘッダ情報を読んで解析を行っているため
 Packa...
© historia Inc.
スペクトル解析結果を通知する Source Effect の自作
 EnvelopeFollower と同じ仕組みで
振幅の代わりに スペクトル解析結果 を外部に通知する
SourceEffect を実装すれば...
© historia Inc.
スペクトル解析結果を通知する Source Effect の自作
 通知の送信方法や
受信側となる ActorComponent の実装は
EnvelopeFollower のソースコードを参考にする
 /E...
© historia Inc.
Modular Synth
Component
Audio MIDI
MIDI Device
Support Plugin
Unreal Engine
Modular Synth
Component
デモの構成図...
© historia Inc.
スペクトル解析結果を通知する Source Effect の自作
 SourceEffect の効果が反映されるスペクトラムビジュアライザが完成
 Low Pass Filter をかけると
高音のスペクトル...
© historia Inc.
まとめ
© historia Inc.
まとめ
 Unreal Engine の標準オーディオ機能だけでも
多くのことができるようになりそう!
 オーディオミドルウェアを採用しないプロジェクトにおいて
音による表現を諦めずに済むケースが多くなるかと...
© historia Inc.
ご清聴ありがとうございました!
Upcoming SlideShare
Loading in …5
×

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

2,365 views

Published on

「出張ヒストリア! UE4勉強会2017」(https://atnd.org/events/89177)で行ったUE4.16のAudio機能についての講演です。

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

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

Published in: Software
  • Hello! Get Your Professional Job-Winning Resume Here - Check our website! https://vk.cc/818RFv
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

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

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

×