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

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

Embed Size (px)

Citation preview

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

© historia Inc.

新しい Unreal Audio Engine で

インタラクティブサウンドコンテンツは

どこまでつくれるか!?

historia Inc.

加藤 優作

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

© historia Inc.

自己紹介

加藤 優作 (エンジニア)

開発実績

ハネチャリ (VR Zone Shinjuku にて稼働中)

コミュニティ活動

Gray ちゃん 3D モデル制作

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

© historia Inc.

新しいオーディオ機能

Unreal Engine 4.16 から新しいオーディオ機能が多数追加されました!

Unreal Audio Engine

新しいオーディオエンジン

サウンドエフェクト機能の追加など

Synthesis

音色を作成して鳴らすことができる

Steam Audio

物理ベースオーディオ体験の実現

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

© historia Inc.

発表概要

新しいオーディオ機能の追加によってUnreal Engine の機能だけでどこまで面白いことができるようになったのか をデモを作成しながら検証

使用した各オーディオ機能について

それを使うとどんなことができるのか

どのように使うか

を解説

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

© historia Inc.

諸注意

Unreal Audio Engine 及び Synthesis Plugin はEarly Access Preview 扱いです (UE 4.16 現在)

今後機能や使い方が変更になる可能性があります

なるべくわかりやすい解説にするために内容の正確性・厳密性を犠牲にしています

新機能以外の解説もします

検証環境

Unreal Engine 4.16.3

Windows 10

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

© historia Inc.

デモについて

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

© historia Inc.

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

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

© historia Inc.

デモの解説

インタラクティブなオーディオビジュアライザ

キーボードを弾く “楽器演奏者” と

マウスを操作する “ゲームプレイヤー” の

2 人が必要

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

© historia Inc.

デモの解説

① BGM に合わせてキーボードを弾く

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

© historia Inc.

デモの解説

① BGM に合わせてキーボードを弾く

②鍵盤エフェクトが出る

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

© historia Inc.

デモの解説

① BGM に合わせてキーボードを弾く

③鍵盤エフェクトをロックオン・破壊

②鍵盤エフェクトが出る

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

© historia Inc.

デモの解説

① BGM に合わせてキーボードを弾く

④破片エフェクトがキーボードに当たってBGMに合った音が鳴る

③鍵盤エフェクトをロックオン・破壊

②鍵盤エフェクトが出る

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

© historia Inc.

デモの解説

① BGM に合わせてキーボードを弾く

④破片エフェクトがキーボードに当たってBGMに合った音が鳴る

③鍵盤エフェクトをロックオン・破壊

②鍵盤エフェクトが出る

ゲームプレイが音に影響を与える

楽器演奏がゲームに影響を与える

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

© historia Inc.

基礎知識

(MIDI と Audio)

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

© historia Inc.

MIDI

演奏データ (MIDI Event) を機器間でやりとりするための世界共通規格

MIDI – Wikipedia

楽譜のようなもの

実際の音のデータではない

MIDI Event の例 : Note On

どのチャンネル (楽器パート) の

どの高さの音を

どれくらいの強さで弾いた?

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

© historia Inc.

Audio

音そのもののデータのこと

.wav / .mp3 / .ogg

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

© historia Inc.

デモの機材構成

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

© historia Inc.

デモの機材構成 Audio MIDI

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

© historia Inc.

Modular SynthComponent

デモの音データの流れ Audio MIDI

MIDI Device Support Plugin

Unreal Engine

Modular SynthComponent

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

© historia Inc.

Audio 新機能を使うための準備

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

© 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

新機能の使い方もここに載っています

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

© historia Inc.

手順 (Windows)

1. Config (.ini) を変更する

2. コマンドラインオプションを指定してプロジェクトを開く

3. プラグインを有効にする

4. (Editor Preferences を変更する)

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

© historia Inc.

手順 1. Config (.ini) を変更する

編集するファイル (どちらか一方)

<エンジンディレクトリ>/Engine/Config/Windows/WindowsEngine.ini

<プロジェクトディレクトリ>/Config/Windows/WindowsEngine.ini

以下を追記する

→ これで、手順 2 で指定するコマンドラインオプションが有効に

[Audio]AudioDeviceModuleName=AudioMixerXAudio2

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

© historia Inc.

手順 2. コマンドラインオプションを指定してプロジェクトを開く

-audiomixer オプションを指定してプロジェクトを開く

コマンドプロンプトで以下を実行する

具体例

.bat ファイル化を推奨

<UE4Editor.exe のパス> < .uprojectのパス > –audiomixer

“C:\Program Files\Epic Games\UE_4.16\Engine\Binaries\Win64\UE4Editor.exe” “C:\Test_AudioEngine\Test_AudioEngine.uproject” –audiomixer

半角スペース 半角スペース

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

© historia Inc.

手順 3. プラグインを有効にする

Audio -> Sound Utilities

Audio -> Synthesis (Synth を使う場合)

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

© 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 時の音なども再生されなくなる

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

© historia Inc.

(手順 4. Editor Preferences を変更する)

※ 必須ではありません

Editor Preferences を開き、以下の設定を変更する

General -> Miscellaneous-> Performance -> Use Less CPU when in Background : OFF

エディタからフォーカスが外れても CPU 消費が少なくならない

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

© historia Inc.

解説

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

© historia Inc.

目次

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

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

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

[新] 音にエフェクトをかける

[新] 現在の音の大きさを取得する

[新] 音の高さ毎の音の大きさを取得する

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

© historia Inc.

[旧] キーボードからの

MIDI Event を受信する

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

© historia Inc.

デモでは…

(機材の) キーボードを弾くと(画面の) キーボードの対応するキーが光ったりParticle が出たりする

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

© historia Inc.

Modular SynthComponent

Audio MIDI

Unreal Engine

Modular SynthComponent

デモの構成図上では…

ビジュアライズ

MIDI Device Support Plugin

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

© historia Inc.

MIDI Device Support Plugin

MIDI Event の受信を行うための Plugin

Plugin の説明には“send and receive MIDI events”と書かれているが、送信処理が見当たらない…

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

© historia Inc.

MIDI Device Support Plugin の使い方

FindMIDIDevices 関数 で 接続中の MIDI Device を列挙する

FoundMIDIDevice 構造体 のリストから使いたい Device を判断

Device の名前

Device が既に使用されているかどうか

etc...

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

© historia Inc.

MIDI Device Support Plugin の使い方

CreateMIDIDeviceController 関数 でMIDIDeviceController を作成

MIDI Event 受信時に呼ばれる OnMIDIEvent に Event を Bind

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

© historia Inc.

MIDI Device Support Plugin の使い方

作成した MIDIDeviceController は変数に Set しないと GC に回収されてしまうので注意

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

© historia Inc.

MIDI Device Support Plugin の使い方

Event Type で MIDI Event の種類がわかる

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

© historia Inc.

MIDI Device Support Plugin の使い方

受信した MIDI Event が Note On の場合

Controll ID = ノート番号 (中央 C = 60)

Velocity = 音の強さ (数字が大きいほど音が強い、範囲 [0, 127])

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

© historia Inc.

MIDI Device Support Plugin の使い方

受信した MIDI Event が Note Off の場合

Controll ID = ノート番号 (中央 C = 60)

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

© historia Inc.

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

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

© historia Inc.

デモでは…

破片エフェクトがキーボードに当たった時の音を生成

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

© historia Inc.

シンセサイザー (Synthesizer / Synth) とは?

電気的に音を合成する機器 のこと

パラメータ変更で色々な音を作ることができる

色々な合成方式がある

減算合成

加算合成

グラニュラー

etc...

シンセ ≠ キーボード

鍵盤付きシンセが多いが音の合成機能があれば鍵盤がなくてもシンセ

The Future of Audio in Unreal Engine | GDC 2017 | Unreal Engine – YouTube よりhttps://www.youtube.com/watch?v=ErejaBCicds

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

© 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 (?)

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

© historia Inc.

Modular Synth (減算合成)

The Future of Audio in Unreal Engine | GDC 2017 | Unreal Engine – YouTube よりhttps://www.youtube.com/watch?v=ErejaBCicds

波の形を決める

フィルタをかける 音量変化をコントロールする

(音としては使わない) 波などでパラメータをコントロールする

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

© historia Inc.

Modular Synth の使い方

ModularSynthComponent を追加

NoteOn 関数 で音を再生

引数 Duration で音が鳴る長さを指定

負の値を入れると NoteOff までずっと鳴る

NoteOff 関数 で音を停止

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

© historia Inc.

Modular Synth の使い方

引数 Note / Velocity にはMIDI Event と同じルールで ノート番号 / 音の強さ を与える

MIDI Event の値をそのまま Synth に渡せば「キーボードを弾くと Unreal で音が鳴る」 ロジックが完成

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

© historia Inc.

Modular Synth の使い方

音のパラメータを変更するにはSet Synth Preset 関数 を使う

ModularSynthPreset 構造体 を作って渡せばよいが…

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

© historia Inc.

Modular Synth の使い方

メンバ変数が多い!

Preset を Asset として定義して呼び出す→ ModularSynthPresetBank を使う

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

© historia Inc.

ModularSynthPresetBank を使う

Add New -> Sounds-> Modular Synth Preset Bank を選択

Preset を編集

複数の Preset を作成できる

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

© historia Inc.

ModularSynthPresetBank を使う

ModularSynthPresetBank の参照変数を作成し、そこから使用する Preset を取得する

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

© 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 にしてください

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

© historia Inc.

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

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

© historia Inc.

デモでは…

各小節の 1 拍目に リング状の Mesh を Spawn

破片エフェクトが リズムに合うタイミング でBGM のコードに合う鍵盤 に当たるように調整

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

© historia Inc.

OnAudioPlaybackPercent

AudioComponent の Event

PlaybackPercent は現在の再生率を返す

0.0 から始まり 1.0 で Audio の最後に到達

ループ再生すると 1 を超える

PlayingSoundWave は現在再生中の SoundWave を返す

SoundWave の Duration (Audio の長さ (秒)) x Playback Percent= 現在の再生位置 (秒)

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

© historia Inc.

BPM = Beats Per Minite

1 分間における拍の数

BPM 60 = 1 分間に 60 拍 = 1 秒で 1 拍

60 ÷ BPM = 1 拍にかかる秒数

現在の再生位置 ÷ 1 拍にかかる秒数 = 現在の累計拍数 (0 始まり)

現在の累計拍数 ÷ 1 小節における拍の数 + 1 =

現在の累計拍数 % 1 小節における拍の数 + 1 =

現在の小節数

現在の小節数・拍数の求め方

現在の拍数

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

© historia Inc.

現在の小節数・拍数の求め方

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

© historia Inc.

現在の小節数・拍数の求め方

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

© historia Inc.

BGM のコードに合った音の選択

何小節目の何拍目に何のコードになるかをDataTable で管理

計算で求めた現在の小節数・拍数からコードに合った音を選定する

例 : 21 小節目の 1 拍目にF minor 7th のコードになる→ コードに合った音は

F / A♭ / C / E♭

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

© historia Inc.

[新] 音にエフェクトをかける

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

© historia Inc.

デモでは…

キーボード (文字を打つ方) の操作でBGM に Low Pass Filter がかかり、音がこもった感じに

Filter のかかり具合を実行時に調整

Filter が強くかかるほど彩度が落ちるように

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

© historia Inc.

サウンドエフェクトとは?

音に対して何らかの加工を行うもの

種類

Delay : やまびこ効果 (やっほー やっほー)

Low Pass Filter : 低音 (Low) を通す (Pass) → 高音をカットする

etc...

サウンドエフェクト

エフェクター(エフェクトをかける機材)

エフェクター

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

© historia Inc.

Modular SynthComponent

Audio MIDI

MIDI Device Support Plugin

Unreal Engine

デモの構成図上では…

Modular SynthComponent

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

© historia Inc.

新機能 : SourceEffect

SourceEffect

エフェクトそのもの

SourceEffectPreset

SourceEffect にプリセット値を与えたもの

同種の SourceEffect に対して複数作成できる

SourceEffectPresetChain

SourceEffectPreset を数珠繋ぎにしたもの

Chain

Delay エフェクトです

1 秒遅らせるDelay エフェクトです

2 秒遅らせるDelay エフェクトです

A

B

AC D

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

© historia Inc.

SourceEffect の “Source” って何?

Source とは以下のものを指す

SoundWave

SoundCue

Synth (ModularSynth など)

Audio Component は Source ではない

つまり、SourceEffect = 上記の要素に対してかけることができるエフェクト

他のエフェクトとして、SoundSubmix に対してかけることができる SubmixEffect がある

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

© historia Inc.

SourceEffect の使い方

1. SourceEffect を作成する (C++)(解説後回し)

2. SourceEffectPreset を作成してプリセット値を設定する

3. SourceEffectPresetChain を作成してSourceEffectPreset をセットする

4. Source にSourceEffectChain をセットする

Chain

Delay エフェクトです

1 秒遅らせるDelay エフェクトですA

AC D

Chain

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

© historia Inc.

手順 2. SourceEffectPreset を作成してプリセット値を設定する

Content Browser-> Add New -> Sounds-> Source Effect Preset を選択

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

© historia Inc.

手順 2. SourceEffectPreset を作成してプリセット値を設定する

SourceEffect を選択

デフォルトで 11 種類

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

© historia Inc.

手順 2. SourceEffectPreset を作成してプリセット値を設定する

作成した SourceEffectPreset を開き、Details パネル-> Audio -> Effects-> Settings の値を設定する

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

© historia Inc.

手順 3. SourceEffectPresetChain を作成してSourceEffectPreset をセットする

Content Browser-> Add New -> Sounds-> Source Effect Preset Chain を選択

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

© historia Inc.

手順 3. SourceEffectPresetChain を作成してSourceEffectPreset をセットする

作成した SourceEffectPresetChain を開き、Details パネル-> Source Effect -> Chain にSourceEffectPreset をセットする

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

© historia Inc.

手順 3. SourceEffectPresetChain を作成してSourceEffectPreset をセットする

エフェクトはindex 0 から順番にかかります

順番が異なると結果も異なるので注意

Bypass (迂回) でエフェクトがかからないようにできる

Chain

Chain

Chain

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

© historia Inc.

手順 4. Source にSourceEffectChain をセットする

SoundWave / SoundCue / Synth Component を開き、Details パネル -> Effects-> Source Effect Chain にSourceEffectChain をセットする

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

© historia Inc.

確認方法

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

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

© historia Inc.

Blueprint でできること

SourceEffectPresetChain に対する SourceEffectPreset の追加・削除

SourceEffectPresetChain 内の SourceEffectPreset の Bypass 設定

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

© historia Inc.

Blueprint でできること

SourceEffectPreset の Settings の変更 (エフェクトの実行時設定調整)

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

© historia Inc.

手順 1. SourceEffect を作成する (C++)

Add New -> New C++ Class を選択する

Show All Classes のチェックをオンにしてSoundEffectSourcePreset を検索・選択し、Next を選択

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

© historia Inc.

手順 1. SourceEffect を作成する (C++)

Name に “SourceEffect<エフェクト名>” と入力

このように命名すると、デフォルトの SourceEffect 関連クラスと命名規則が合います

Create Class を選択

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

© historia Inc.

手順 1. SourceEffect を作成する (C++)

3 つのクラス・構造体が自動的に作成される

FSourceEffect~Settings

エフェクト設定の構造体

FSourceEffect~

音データの処理を担当するクラス

FSourceEffect~Preset

上記 2 つをEditor に公開するためのクラス

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

© historia Inc.

手順 1. SourceEffect を作成する (C++)

作成した時点で“Volume を変更するエフェクト”として機能する

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

© historia Inc.

手順 1. SourceEffect を作成する (C++)

ソースに手を加える部分

FSourceEffect~Settings

設定項目をメンバ変数として追加

FSourceEffect~

メンバ関数 Init を override

Audio 処理前に呼び出される初期化用関数

メンバ関数 OnPresetChanged を override

Preset (Settings) の設定が変更されたときに呼び出される関数

メンバ関数 ProcessAudio を override

Audio 処理を行う関数

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

© historia Inc.

手順 1. SourceEffect を作成する (C++)

関数 ProcessAudio

引数 InData.AudioFrame として渡される音の波の変位を元に計算を行い、引数 OutData.AudioFrame に新しい変位を代入することで出力を行う

InData, OutData 共に値の範囲は [-1.0, 1.0)

InData はその瞬間の波の変位なので、ある期間内の波の変位が欲しい場合はバッファリングする必要がある

波の変位とは?

ある時点での波の高さの値のこと

変位 0.5

ある時点

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

© historia Inc.

手順 1. SourceEffect を作成する (C++)

“Volume を変更するエフェクト” のコード例

InData.AudioFrame[Channel] = 0.5 OutData.AudioFrame[Channel] = 0.25

×

VolumeScale (例 : 0.5)

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

© historia Inc.

[新] 現在の音の大きさを取得する

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

© historia Inc.

デモでは…

キーボードとスペクトラムビジュアライザがBGM の音の大きさに合わせて拡大・縮小する

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

© historia Inc.

音波

空気の圧力変化の波

振幅が大きい方が音が大きい

周波数が高い (波長が短い) 方が音が高い

音が大きくて低い 音が小さくて高い比較

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

© historia Inc.

音の大きさを取得する

今の音の大きさを知りたい → 振幅を取ればよい

ある時点での変位を見るだけでは振幅はわからない

(振幅は大きいのに)この時点での変位は0

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

© historia Inc.

音の大きさを取得する

欲しいのは変位の包絡線→ これを取得するために EnvelopeFollower を使う

Envelope = 包絡線、Follower = 追跡者

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

© historia Inc.

新機能 : EnvelopeFollower

EnvelopeFollower は以下の組み合わせで動作する

通知送信側となるSourceEffect

通知受信側となるActorComponent

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

© historia Inc.

SourceEffectEnvelopeFollower

通常の SourceEffect

EnvelopeFollower

計算→ 結果を出力に反映

入力出力

(音が変わる)

計算→結果を外部に通知

入力出力

(音は変わらない)

受信側振幅

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

© historia Inc.

Modular SynthComponent

Audio MIDI

MIDI Device Support Plugin

Unreal Engine

Modular SynthComponent

デモの構成図上では…

振幅

ビジュアライズ

EnvelopeFollowerListener

Component

Source EffectEnvelope Follower

Preset

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

© historia Inc.

EnvelopeFollower の使い方

他の SourceEffect と同じように以下の手順を行う

SourceEffectPreset を作成してプリセット値を設定する

SourceEffectPresetChain を作成してSourceEffectPreset をセットする

Source にSourceEffectChain をセットする

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

© historia Inc.

EnvelopeFollower の使い方

振幅情報を利用したい Actor の Blueprint にてEnvelopeFollowerListenerComponent (受信側) を追加する

SourceEffectEnvelopeFollowerPreset型の変数を追加し、Default 値として Preset (送信側) を設定する

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

© historia Inc.

EnvelopeFollower の使い方

RegisterEnvelopeFollowerListener 関数 を使い、受信側と送信側を結びつける

送信側

受信側

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

© historia Inc.

EnvelopeFollower の使い方

EnvelopeFollowerListenerComponent の EventOnEnvelopeFollowerUpdate を Event Graph に追加する

この Event の Envelope Value から振幅情報を取得できる

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

© historia Inc.

[新] 音の高さ毎の

音の大きさを取得する

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

© historia Inc.

デモでは…

スペクトル解析結果をビジュアライズ(スペクトラムビジュアライザ)

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

© historia Inc.

波の分解

複雑な波は単純な波 (正弦波・余弦波) の足し算で表すことができる

正弦波 (sin)

余弦波 (cos)

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

© historia Inc.

スペクトル解析

複雑な波を単純な波に分解すると各周波数における振幅がわかる→ 音の高さ毎に音の大きさがわかる(スペクトル解析)

低くて大きい音 高くて小さい音

周波数 (音の高さ)

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

© historia Inc.

Sound Visualizations Plugin を使う?

関数 CalculateFrequencySpectrum でスペクトル解析を行うことができる

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

© 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

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

© historia Inc.

スペクトル解析結果を通知する Source Effect の自作

EnvelopeFollower と同じ仕組みで振幅の代わりに スペクトル解析結果 を外部に通知するSourceEffect を実装すればスペクトラムビジュアライザが作れる

受信側スペクトル外部に通知音はそのまま

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

© historia Inc.

スペクトル解析結果を通知する Source Effect の自作

通知の送信方法や受信側となる ActorComponent の実装はEnvelopeFollower のソースコードを参考にする /Engine/Plugins/Runtime/Synthesis/Source/Synthesis/Classes/SourceEffects/SourceEffectEnvel

opeFollower.h

一定期間の変位値が必要なため、バッファリングを行う

スペクトル解析処理はSound Visualizations Plugin のロジックを流用

高速フーリエ変換ライブラリ Kiss FFT が使用されている

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

© historia Inc.

Modular SynthComponent

Audio MIDI

MIDI Device Support Plugin

Unreal Engine

Modular SynthComponent

デモの構成図上では…

スペクトル解析結果

ビジュアライズ

Spec AnalizerListener

Component

Source EffectSpec Analizer

Preset

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

© historia Inc.

スペクトル解析結果を通知する Source Effect の自作

SourceEffect の効果が反映されるスペクトラムビジュアライザが完成

Low Pass Filter をかけると高音のスペクトル値が小さくなることが確認できる

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

© historia Inc.

まとめ

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

© historia Inc.

まとめ

Unreal Engine の標準オーディオ機能だけでも多くのことができるようになりそう!

オーディオミドルウェアを採用しないプロジェクトにおいて音による表現を諦めずに済むケースが多くなるかと思います

とはいえまだ Early Access Preview なので、安定性に不安が残ります

標準オーディオ機能の他にも、オーディオミドルウェア、Market Place の Plugin など、いろいろな選択肢があります

機能だけでなく、ワークフロー、過去の資産、予算などを考慮した上で適切なものを選択しましょう

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

© historia Inc.

ご清聴ありがとうございました!