Raspberlyのブログ

Raspberlyのブログ

Unityネタをメインとした技術系ブログです。にゃんこ大戦争や日常なども。そろそろブログタイトル決めたい

勉強会レポ : Unity Audio 完全に理解した

 

勉強会のレポート(メモ)です。
参加したのはこちら、「UnityAudio 完全に理解した」

connpass.com

f:id:Raspberly:20190130175528j:plain



 

ハッシュタグ :
#UnityAudio完全に理解した
#anysync完全に理解したい

 

イベントの動画はこちらから視聴できます。

www.youtube.com

 

 

 

タイムスケジュール

  内容 担当
19:00 受付開始 -
19:30 イントロダクション -
19:35 音量の基礎&Unity上での音量演出 @8bitdots
20:05 サウンド実装の手間を省くためのCRI ADX2 @Takaaki_Ichijo
20:40 休憩 -
20:45 VR音響のための鏡像法による距離減衰の再現 @TyounanMOTI
21:15 懇親会 -
22:15 片付け -

 

 

0. イントロダクション

もんりぃさんの挨拶。
2月9~10日に日本科学未来館にて、ワンダーメイクフェスというイベントがあります。
子供向けのモノづくりのイベントで、弊社も出店中です。


会場の提供・懇親会・動画撮影・生放送。
ミクシィさんがやってくれました。ほんとうにありがとう。

 

 

 

 

 

 


1. 音量の基礎&Unity上での音量演出

speakerdeck.com初心者向けライトな部分をやります。

音量について

音量という言葉はない。
音圧、音の強さ、音響パワーなどの物理量で定義されています。
音圧は波形や音量は0~1で正規化されているので、その対数をとるとdBがとれる。


ラウドネス

人間の感覚に合わせた音量。周波数によって聞こえ方にずれがあります。
CEDECなどで統一しましょうという話がでたりしてますが、だいたい多くの企業では0~1で扱われます。

UnityではAudioMixerなどいろいろ追加されましたが、現実ではラウドネスを扱えてません。

 

音割れ

波形が正規化されるので、波形が1以上は全て1に、-1以下は全て-1に圧縮されるため音割れします。

この辺は波形とフーリエ級数展開ごにょごに。
音を重ねて鳴らす時は注意しましょう。

 

音量に関する演出例

フィルタ、エフェクトによる制御、簡単に2種類紹介します。

ローパスフィルタ

高音域をカット。
くぐもった感じをかけることができます。
ポーズ画面で使われます。

 

ハイパスフィルタ

低音域をカット

ローパスを2000に、ハイパスを4000くらいまでにし、
低域と高域をカットした状態でノイズを足すとラジオノイズになったりします。

 

意外とこういうのやられてないかなと思います。だいたいサウンドさんにあらかじめ作ってもらうパターンが多い気がする。

 

AudioMixerを使った表現

・フィルタ
・フェードインフェードアウト
ダッキング
 ボイス再生時にBGMを下げるなど
 サイドチェーン入力のダッキング

この辺は試してみてください

 

 

スクリプトの制御

・フェードインフェードアウト
 簡単にできます
 ついでにダッキングもできます
 イントロ付きBGM再生も
インタラクティブミュージック

 

フェード実装のテクニック

クロスフェードの注意点として、直線に音量変化をすると音の量が中間あたりでへこみます。
解決策として三角関数をフェードカーブに用いましょう。

 

まとめ

dBよりもラウドネスの方がいい。
音割れすると音がゆがむ。
フェードでいろんな演出を実装することができます。

 

 


2. サウンド実装の手間を省くためのCRI ADX2

スライド

www.slideshare.net



ADX2について

ゲーム向けのサウンドミドルウェアです。音を使った演出が組み込まれたライブラリ&ツールです。
ゲームに最適化された音声圧縮形式も備えています。

 

今回は「実装の手を抜くためのADX2」「エンクセル管理から脱却するためのADX2」について話します。

 

やらなければならない実装

・負荷軽減
・管理
・演出設計


ボイスデータ管理

excel管理だとデータがずれる可能性があるし、どういうふうに使うのかわからない。
じゃあどう管理ツールを開発する?しかしそれも大変。

そこでADX2
Atom Craftをいうツールを使いましょう。
どういうふうにならされるかを作りこんでいきます


ワークフローはどう変わるか

ADX2では再生単位キューを作成します。
このキューにはフェードやダッキングなどのメタデータを埋め込むことができます。

 

ここでデモ


ありえるフロー

・ボイスデータの管理

1. wavを全て登録
2. キューシートを作成
3. キューを作成
4. キューにコメントをいれる、パラーメータを設定する(同時再生数や優先度など)
5. キュー名称あるいはIDで再生処理を組む、IDは重複しない


・確認と調整

BGMを流しつつツールで確認再生ができるリアルタイム調整機能。
音が大きいところをすぐに調整できる。

 

 

サウンドの演出

再生状況が複雑になりそうだったらADX2の利用を考えましょう。
・バッキング
・ランダム再生 同時再生数の設定
・音のグルーピング 

スクリプト側は非常にシンプル。

 

カテゴリ

同一キャラの声が2つ以上再生されないようにできる。

 

クロスフェード

いくつかアプローチがありますか
エンベローブのアタック(再生時)とリリース(終了時)を使う

ダッキング

キューシート

キューをまとめたキューシートが出力ファイルの単位になる。
キューシートが別ならキューの名前が被っても大丈夫。
複数のキャラクターがいる場合などに有効。

 

 

まとめ

・オーディオは考えることがいっぱい

・大量のデータ管理はツールで乗り越えよう、ADX2は管理が得意ですよ

・個人向けは有償と違って更新が遅いんですが近日アップデートされます

・書籍も書いています 会社に一冊どうぞ

 

 

 

3. VR音響のための鏡像法による距離減衰の再現

スライド

www.slideshare.net

 

テーマは距離減衰

距離感は音量との相対的な変化で表現できます。
約1mの距離感(NearFieldEffect)を表現する立体音響プラグインも。

距離減衰カーブはUnityデフォルトだと減衰しすぎ、これを演出意図をもって書きましょう

重要なサウンドはゆるい減衰、重要でないサウンド(環境音など)は強い減衰がおすすめ。

 

リアリティのある距離減衰とは?

Unityデフォルトの距離減衰カーブは逆2乗則。
これは無響室での点音源の法則。リバーブなし。

しかし現実空間は無響室ではない。

 

 

バーブとは

・直接音 口からでた音が耳まで届く最短距離
・初期反射 天井などすぐに反射する音
・後期残響 壁に何回も反射した音

で構成される。

このリバーブをいじると距離を感じます。
後期残響はそのまま、直接音や初期反射を小さくすると遠く感じます。

 

 

じゃあどうやって点をうってカーブを作るか?コンピュータに任せましょう。

 

ここでシュミレーション

鏡像法を使います。
この辺は参考文献を見てね。

 

 

 

ここで機材トラブル。
画面が映らないのでインタビュータイム。

 

 

デモ

ここでデモ
インパルス応答から距離減衰を推定します。
実は1mを離れるとあまり変わらない。

 

6畳間と多きめの部屋を比べてみると

・至近距離では点音源なので急速に減衰する
・しかし少し離れるとほとんど減衰しない

 

部屋の違い

狭いと減衰しなくなるのが早い
広いと減衰はしないが小さな音に収束する

 

そのまま使うときの課題

・音量変化が急なのでgainをかけるといいでしょう
・ゲーム内の環境に応じて部屋の大きさを変えましょう
C#で書いているので重いです、高速化が必要
・インパルス応答の畳み込みをする場合
フラッターエコーがきついかも


カーブを書くときの応用

・最大減衰距離は部屋の大きさよりも小さい
・なだらかなカーブは物理的に間違っていない
・周囲の広さに応じてカーブをかくとよりリアリスティックになるでしょう

 

今後の課題

・音量だけでなくリバーブも変化させる、音量ミキサーのリバーブを変えるなど
・面音源でもやってみるとまた違うのかなと思います。
フラッターエコーなど可聴化してみる
・正直にシミュレーションするのではなく統計的にカーブを割り出す
 「部屋がこのくらいだからカーブはこのくらいだろう」 といった感じ

 

 

 

 

感想

オーディオ関係はいままで気にしたことのない領域だったのでなかなか面白かった。
正直AudioMixer自体使ったことが・・・
各フィルタの演出ならすぐに試すことができてよさそうかも。

 

AnySyncになった時のichijoさんのファシリテーション能力?すごい。

 

f:id:Raspberly:20190130175609j:plain

f:id:Raspberly:20190130175612j:plain


 

 

タイムライン

 

他の方のブログ

ka8.hateblo.jp

 

 

次回予告

次回は「AssetBundle完全に理解した」です。正気か?
最悪死人がでますよこいつぁ