Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.

SIG-Audio#6 プラグインを書かなくてもここまで出来る!Unityサウンド

24.049 Aufrufe

Veröffentlicht am

  • Download or read that Ebooks here ... ......................................................................................................................... DOWNLOAD FULL PDF EBOOK here { http://bit.ly/2m77EgH } ......................................................................................................................... Download EPUB Ebook here { http://bit.ly/2m77EgH } ......................................................................................................................... Download Doc Ebook here { http://bit.ly/2m77EgH } ......................................................................................................................... .........................................................................................................................
       Antworten 
    Sind Sie sicher, dass Sie …  Ja  Nein
    Ihre Nachricht erscheint hier

SIG-Audio#6 プラグインを書かなくてもここまで出来る!Unityサウンド

  1. 1. プラグインを書かなくても ここまで出来る! Unityサウンド CC2 開発部 サウンド課 サウンド室 渡邉愉香 1
  2. 2. ❖自己紹介 a) (+2)HHKB[US](使っている) b) (+0)xyzzy(使っている) c) (+0)VisualStudio(使っている) d) (+1)LogicPro(使っている) e) C#の巻き物 f) C++の巻き物 ----------------------------------------------------------------g) Cの巻き物 |.@......D......................................................| @ h) Perlの巻き物 |...M..........V......X......................!..?.....W.........| i) イェンダーの魔除け |.J....................................M.........J..........*.).| =スペースを押してください= |............. U....................U...........J.......X.......| |....................../......U..G..............................| 名前 :渡邉 愉香 |............P.................D.................../............| |..............U.......?..............G.......................G.| 職業 :サウンドプログラマ |.....................P.....................P......V...!........| |..............................!..................*.............| 基本スキル:サウンドプログラム |..........................)............W............=........%.| ----------------------------------------------------------------BGM・SE制作とか色々 特殊スキル:Unity (使用歴1年半くらい) UnrealEngine3 (忘れかけ) 階: 26 金塊: 2013 体力: 12(94) 強さ: 14(17) 守備: 8 経験:11/7640 2
  3. 3. ❖目次 サウンド デザイナ 寄り Unityサウンド概要 for iOS/Android 2. デフォルトで出来ること・出来ないこと 3. サウンドシステムを作ろう 4. 傾 向 1. Tips プログラマ 5. 寄り 質疑応答 3
  4. 4. Unityサウンド概要 for iOS/Android 4
  5. 5. ❖基本情報 ビルド環境 *.apk *.ipa *.apk Mac Windows スクリプト言語 C# JavaScript 85% 13% Boo 2% ※facebook「Unityユーザー助け合い所」 言語使用率アンケートより 5
  6. 6. ❖基本情報 サウンドライブラリ  旧 FMOD Ex Programmer’s API 相当部分のみ  旧 FMOD Designer は使用不可  利用可能な圧縮形式は mp3 のみ  Pro版のUnityでなくても(無償版でも) エフェクト以外のサウンド機能は全て使用可能 6
  7. 7. ❖オーディオデータとして認識される形式 インポート形式 無圧縮 オーディオ 圧縮 オーディオ iOS/Android形式 WAV WAV AIFF AIFF Ogg Vorbis MP3 ENCODE MP3 無圧縮 DECODE ENCODE MOD トラッカー モジュール MOD XM XM S3M S3M IT IT 7
  8. 8. ❖オーディオデータとして認識される形式:補足 トラッカーモジュールとは?  譜面と音源を1ファイルにしたもの ( ≒ SMF + 内蔵シンセ )  MOD と総称される  MOD作成ソフトは トラッカー と呼ばれる Sound Tracker Fast Tracker 2 Scream Tracker Impulse Tracker (.mod) (.xm) (.s3m) (.it) Unityのサポート形式 と トラッカー 8
  9. 9. ❖エンコード後のデータ 保存場所 {UnityProject}Librarymetadata 2文字 の フォルダ名 32文字 の ファイル名 判読性のないフォルダ名、ファイル名で格納されている 9
  10. 10. ❖エンコード後のデータ エンコード後のファイル名 1. 波形と同階層にある同名の .meta をテキストエディタで開く 2. guidの行の32文字 がファイル名 3. 保存場所で guid の冒頭2文字 のフォルダ名を探す 4. 3. のフォルダの下で guid と同じファイル名 を探す 発見!! 10
  11. 11. ❖エンコード後のデータ mp3エンコードされたファイルの構造  先頭にUnityのヘッダが付加されただけのmp3  ヘッダを削除すればMedia Player等で再生可能  ヘッダの削除手順 2. バイナリエディタでファイルを開く 拡張子なしファイル名 が格納されている場所を探す 3. 2. の近くに mp3フレームヘッダ (0xFFFB) があるので探す 4. 3. より前を削除、拡張子を .mp3 にして保存する 1. 実データ部 11
  12. 12. ❖エンコード後のデータ:補足 .metaファイル がない? Editor Settings を確認 Edit -> Project Settings -> Editor ? Version Control の Mode を Meta Files に設定 12
  13. 13. ❖エンコード設定 metaファイル経由でインポート設定を変更可能 Unity Audio Format metaファイル Native (WAV) Inspector format Native Compressed 3D Sound -1 0 Force to mono Load type Compressed in memory Inspector stream Decompress on load Compressed in memory Gapless looping Compression (kbps) 1 Stream from disc Hardware decoding 0 2 128 quality (Compression (kbps) – 56) / 200 ※実際のエンコード処理を行うのはUnity fileFormatVersion: 2 guid: abcdefghijklmn … AudioImporter: serializedVersion: 4 format: 0 quality: .360000014 stream: 1 3D: 0 forceToMono: 0 useHardware: 0 loopable: 0 userData: 13
  14. 14. ❖Unityのサウンド要素 ReverbZone AudioListener リバーブ空間 波形以外の再生情報 人間の耳に相当 Camera AudioSource GameObject AudioClip 波形本体 Audio*Filter Audio*Filter エフェクト エフェクト (1) Reverb Filter (4) Distortion Filter (2) Chorus Filter (5) Low Pass Filter (3) Echo Filter (6) High Pass Filter 14
  15. 15. デフォルトで出来ること・出来ないこと 15
  16. 16. ❖デフォルトで出来ること 以下はUnityの標準機能として存在する  エフェクト  プライオリティ  ポーズ OK  ループ (部分ループ不可、全ループのみ)  音量  ピッチ  LRパン  3D再生設定 16
  17. 17. ❖デフォルトで出来ること Audio Listener エフェクト Audio Clip プライオリティ ポーズ Reverb Zone パラメータ パラメータ パラメータ 全体 単体 GaplessLooping エンコード ループ 音量 Audio *Filter 単体 全体 Audio Source 全体 ON/OFF 単体 ピッチ パラメータ LRパン パラメータ 3D再生 ON/OFF 距離減衰 ドップラー 17
  18. 18. ❖デフォルトで出来ないこと 以下はUnityの標準機能としては存在しない 1. 2. フェードアウト 3. ダッキング 4. 同時発音数・再生挙動制御 5. ランダムパラメータ 6. ランダム再生 7. グループ単位のパラメータ制御 8. NG ループ回数指定 イントロつきループBGM サウンドとして最低限必要な機能 18
  19. 19. サウンドシステムを作ろう 19
  20. 20. ❖はじめに 作るもの  昔ながらのコンシューマ系サウンドシステム の簡易版  データ管理:バンク方式  出力管理:バス方式 必要なもの  VBAの知識  ネットで拾える情報の組み合わせレベル  Unityプログラムの知識  普通にUnityでスクリプトが書ければOK  iOS/Androidの深い知識は不要 20
  21. 21. ❖システム概要:イメージ こういうものを作ります Enemy Data SE0 Stage Data SE1 SE Bus[1] SE2 Voice0 Voice0 Bus[2] Common Data BGM0 … Voice1 …… Bus[0] Bus[n-1] Voice1 BGM1 BGM Sub Bus Bus[n] Master Bus 21
  22. 22. ❖システム概要:バス 実際の信号ルーティングは行わない  下記のような一般的なバス機能を仮想実装  エフェクト情報   Chorus 0 Static エフェクトID サウンドオブジェクトタイプ   FX ID Object Type エフェクトタイプ  FX Type Category ※後述 Pitch 動的生成 / 静的生成 Volume カテゴリ  SE Master / BGM / SE / Voice  ピッチ  音量  バス名 ※画像はイメージです Bus Name UI 22
  23. 23. ❖システム概要:階層 Application Sound Manager Unity Android OS iOS 23
  24. 24. ❖システム概要:構成 生 成 パラメータ シート c# c# 解 釈 パラメータ テーブル サウンド マネージャ 確 認 サウンド テスト Unity 24
  25. 25. ❖サウンドマネージャ:処理概要 随時 毎フレーム 再生 フェード情報更新 ・パラメータテーブル参照 ・パラメータ設定 ・同時発音数制御 停止 ・通常停止 フェードアウト ・フェード設定 ループ終了 ・ループフラグOFF ・フェードパラメータ計算 ・目標値到達チェック 制御情報更新 ・音源座標更新 ・各種パラメータ更新 ・停止済リソース破棄 ・ループ制御 ・ステータス管理 ・ダッキングトリガチェック 25
  26. 26. ❖デフォルトで出来ないこと 以下はUnityの標準機能としては存在しない 1. ループ回数指定 これらの 実装方法を 2. フェードアウト 3. ダッキング NG 4. 同時発音数・再生挙動制御 5. ランダムパラメータ この吹き出しで 示します! 6. ランダム再生 7. グループ単位のパラメータ制御 8. イントロつきループBGM サウンドとして最低限必要な機能 26
  27. 27. ❖サウンドマネージャ:制御情報更新 随時 毎フレーム 再生 フェード情報更新 ・パラメータテーブル参照 ・パラメータ設定 ・同時発音数制御 停止 ・通常停止 フェードアウト ・フェード設定 ループ終了 ・ループフラグOFF ・フェードパラメータ計算 ・目標値到達チェック 制御情報更新 ・音源座標更新 ・各種パラメータ更新 ・停止済リソース破棄 ・ループ制御 ・ステータス管理 ・ダッキングトリガチェック 27
  28. 28. ❖サウンドマネージャ:制御情報更新 全サウンドの状態を常に把握  鳴らしっぱなしにしない  全てのサウンドの再生状況を ステータス によって管理 サウンド ラベル 再生中の波形 … ステータス 音源 ループ 回数 再生 音量 再生 ピッチ 再生 パン SE01 se_ene_atk01 … PRESTOP Enemy01 0 0.8 1.1 0.0 BGM00 bgm_btl00 … PLAYING - 5 0.6 1.0 0.0 … : : : : : : : 28
  29. 29. ❖サウンドマネージャ:制御情報更新 処理 ステータス 再生 再生待ち 音源座標更新 再生中 ル ー プ 再 生 終 了 1 ループ回数 指定 パラメータ更新 バス情報反映 停止 ダッキング解除 チェック リソース破棄 停止待ち 停止中 ワ ン シ ョ ッ ト 再 生 終 了 停止済 29
  30. 30. ❖サウンドマネージャ:フェード情報更新 随時 毎フレーム 再生 フェード情報更新 ・パラメータテーブル参照 ・パラメータ設定 ・同時発音数制御 停止 ・通常停止 フェードアウト ・フェード設定 ループ終了 ・ループフラグOFF ・フェードパラメータ計算 ・目標値到達チェック 制御情報更新 ・音源座標更新 ・各種パラメータ更新 ・停止済リソース破棄 ・ループ制御 ・ステータス管理 ・ダッキングトリガチェック 30
  31. 31. ❖サウンドマネージャ:フェード情報更新 基本計算式 現在値 += ( ( 目標値 - 開始値 ) / フェード時間 ) 要素の組み合わせで機能が変化 処理 ターゲット 値の タイプ 目標値到達時 の挙動 サウンド 音量 ピッチ 再生継続 フェードアウト ・ターゲット = バス ・タイプ = 音量 ・目標値到達時 = 再生継続 ダッキング 停止 バス パン 2 3 ・ターゲット = サウンド ・タイプ = 音量 ・目標値到達時 = 停止 31
  32. 32. ❖サウンドマネージャ:再生 随時 毎フレーム 再生 フェード情報更新 ・パラメータテーブル参照 ・パラメータ設定 ・同時発音数制御 停止 ・通常停止 フェードアウト ・フェード設定 ループ終了 ・ループフラグOFF ・フェードパラメータ計算 ・目標値到達チェック 制御情報更新 ・音源座標更新 ・各種パラメータ更新 ・停止済リソース破棄 ・ループ制御 ・ステータス管理 ・ダッキングトリガチェック 32
  33. 33. ❖サウンドマネージャ:再生 サウンドオブジェクト  AudioSource をアタッチするための GameObject  音源オブジェクトには直接アタッチせず、座標のみを参照  定期的に音源座標をサウンドオブジェクトに反映 33
  34. 34. ❖サウンドマネージャ:再生 滝の横を走り抜ける 滝SEの減衰が完了する前に 滝オブジェクトが 破棄されてしまうことがある 画面外のマップを破棄 音も破棄されてしまう! ©2013 CyberConnect2 34
  35. 35. ❖サウンドマネージャ:再生 サウンドオブジェクト  動的生成・静的生成の2種類を用意  通常は再生時に動的に生成  レイテンシが重要なSEやBGMなどは静的オブジェクトを使用   初期化時に一定数の GameObject を予め作成しておく 動的生成だとUIなどのタップSEの反応が良くないため  GameObject の new は結構重い 35
  36. 36. ❖サウンドマネージャ:再生 パラメータ取得 制御情報検索 再生制御 4 6 ランダム 再生 同時発音数・ 再生挙動制御 後着優先 先着優先 今回の再生を キャンセル ランダム ランダムに 1つのクリップを選択 BGM 再生中の 最古のものを停止 再生クリップ選択 フェード停止 & 停止完了待ち レイヤ 全クリップ選択 バス情報の反映 パラメータ計算 5 ランダム パラメータ クリップ再生 ランダム レイヤ 全クリップを 同一の遅延設定で再生 7 8 グループ単位の パラメータ制御 バス音量・ピッチ設定 エフェクト設定 サウンドオブジェクト選 択 分割BGM イントロつき ループBGM 分割BGM イントロ部は遅延なし、 ループ部はイントロ部分の 遅延設定で再生 36
  37. 37. ❖サウンドマネージャ:再生 イントロつきループBGMの実装  イントロ部分とループ部分に波形を分割  イントロ波形の尺だけ待ってからループ波形を再生  AudioSource.PlayDelayed(イントロ尺); でOK これじゃ継ぎ目が 目立っちゃう! 再生開始 イントロ部分 delay ループ部分 再生開始 37
  38. 38. ❖サウンドマネージャ:再生 繋ぎ目を目立たせないための対策  イントロ波形の作り方を一工夫  ループに入ってからの余韻まで含んだ状態をイントロとする  イントロとループが重なる部分 を設ける 再生開始 イントロ部分 delay ループ部分 再生開始 38
  39. 39. ❖サウンドマネージャ:再生 mp3ループ再生時 (GaplessLoopingエンコード時) は 再生開始位置を 1,152サンプル ずらして再生する 39
  40. 40. ❖サウンドマネージャ:再生 MP3のデコード処理概要 1,152サンプル の フレーム 単位で処理 0 1 frame frame n-1 … frame frame 最後 n … 波形先頭 n 番目のフレーム n-1 番目のフレーム frame 波形末尾 をデコードするためには が必要 ループ再生で頭に戻るとき 最初のフレーム 最後のフレーム をデコードするためには が必要 40
  41. 41. ❖サウンドマネージャ:再生 エンコード時 波形先頭にループ処理用の1フレーム を付加 約 0.026 秒 (44.1kHzの場合) ごく短いため、ほとんどのケースでは気にならない が、 波形内容によってはノイズのように聴こえる場合がある。 再生開始を1,152サンプルずらすのは 最初のループ処理用フレームをスキップする ため 41
  42. 42. ❖サウンドマネージャ:停止 随時 毎フレーム 再生 フェード情報更新 ・パラメータテーブル参照 ・パラメータ設定 ・同時発音数制御 停止 ・通常停止 フェードアウト ・フェード設定 ループ終了 ・ループフラグOFF ・フェードパラメータ計算 ・目標値到達チェック 制御情報更新 ・音源座標更新 ・各種パラメータ更新 ・停止済リソース破棄 ・ループ制御 ・ステータス管理 ・ダッキングトリガチェック 42
  43. 43. ❖サウンドマネージャ:停止 3種類の停止系処理 即停止 フェード停止 ループ終了 通常の停止処理 フェードアウト後、 音量0になったら即停止 波形の最後まで再生したら 繰り返さず再生を終了 いきなり AudioSource.Stop() を呼ばない 停止ノイズが発生することがあるため、段階的に処理する 1. サウンドの音量を 0 にする 2. 音量が反映されてから AudioSource.Stop() を呼ぶ  ステータスを「停止準備中」にして更新処理で制御 43
  44. 44. ❖最後に プラグインを書かなければ対応できないこと  波形の部分ループ  mp3以外の圧縮フォーマットの使用  オリジナルエフェクトの使用 こういったことに対応したい場合、 またはもっと精密な制御が必要な場合は CRI・ミドルウェア様に御相談すると 幸せになれると思います! 44
  45. 45. Tips 45
  46. 46. ❖Tips AudioFiler は単一の AudioSource にしか適用できない  複数の AudioSouce を単一の GameObject に付加した場合、 AudioSource に対する AudioFilter の効果が不安定になる GameObject GameObject AudioSource AudioSource AudioSource Audio*Filter … Audio*Filter 46
  47. 47. ❖Tips Android端末でオンメモリ再生時に音飛びが発生する  Unity 4.1 以前  GCでオーディオスレッドが止められていたため、 GCが原因の場合は 4.2 へのアップデートで改善される可能性あり  Unity 4.2 以降  「特定端末における既知の不具合」の可能性あり  REGZA Phone, Galaxy Nexus など  頻度は 5~15分 に 1回 程度 (体感的にはそれほど高くない) Android端末でのBGMのオーバーライド  iOSの「Override iPod Music」のAndroid版は?  Unityの機能としては存在しない  プラグインを書けば実装可能 47
  48. 48. 御清聴ありがとうございました 48

×