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.

ADX2LE GGJ13向けワークショップ

5,596 views

Published on

GlobalGameJam2013直前に行われたADX2LEワークショップの配布資料をまとめたものです。
ADX2LEの導入方法、Unityとの連携動作の詳細、エラーで困った場合や、インゲームプレビューで困った場合など、
何をするものなのかなどの一通りの解説となっています。
サイト→ http://www.adx2le.com/
ウィキ→ http://www53.atwiki.jp/soundtasukeai/pages/22.html

Published in: Education
  • Be the first to comment

ADX2LE GGJ13向けワークショップ

  1. 1. ADX2 LE ワークショップ GGJ2013向け 2013-01-25 田中孝 この資料は1/22 24に行われたワークショップの資料を元にしています。 1
  2. 2. このワークショップについて• ADX2 LEをGGJで導入する紹介になります。• 後半のアラカルトでADX2の機能を紹介します。 資料に先に目を通しておいてください。 2
  3. 3. レジュメ• おいしいところ/落とし穴• ADX2 LEダウンロード/インストール(紹介のみ)• ツール紹介• Unityプラグイン紹介• 基本ワークフロー紹介• 自由課題(アラカルト) 3
  4. 4. ADX2 LEおいしいところ 4
  5. 5. 何がおいしいのか?• 圧縮波形でサイズ小さく起動も速く• BGMループが楽• 効果音が多くなっても管理が楽• エフェクトで手軽に豪華に• 他にも便利機能いろいろ 5
  6. 6. 落とし穴• Unity Webプレーヤで動かない →バウンス(波形出力)でWeb版、  本気はPCまたはMac版として• Windowsのツールしかない →MacのUnityでランタイムライブラリは動く →Parallelsで問題ない Macの人は仮想環境があると便利 6
  7. 7. ADX2 LEをダウンロード※本ワークショップでは既にインストール済なので紹介だけ 7
  8. 8. ADX2 LEのダウンロードGGJ会場WEBサイト CRI GGJ特設サイト GGJ特設サイトのリンク先から ダウンロード 8
  9. 9. ADX2 LEのインストール• zipファイルを展開し、展開したcriフォルダを C:/ADX2LE_Workshop/に置いてください。 (windowsの場合パス名に日本語が含まれていると正しく動作しない場合があります。)• Macの場合は、Unityのプラグインだけ使用しますので好きなところに展開して 下さい。 9
  10. 10. ツールを紹介 10
  11. 11. ツール紹介• CRI Atom Craft は、波形を登録し音を管理する。• 音リクエスト(プログラムからのコール)をキューと呼ぶ• 複数キューをパッキングしたものをキューシートとよび、 キューシートをACB出力する。波形エディタ CRI Atom Craft元波形 キューシート ACB 11
  12. 12. ACBとは何か?• CRI Atom Cuesheet Binary Atomキューシートバイナリ• 圧縮された波形(1/4 1/12)と 設定(音の鳴らし方)をパッキングしたファイル• これをメモリに読み込んで再生する 12
  13. 13. ツールを起動 13
  14. 14. 起動• CRI Atom Craft アイコンをダブルク リックで起動。 ※本ワークショップではデスクトップにショートカットがあります 14
  15. 15. Undoできます• ツール操作のUndo 15
  16. 16. プロジェクトを作成し波形を登録 16
  17. 17. プロジェクト作成 17
  18. 18. プロジェクト名をつける 18
  19. 19. プロジェクトをとりあえず保存 19
  20. 20. 登録する波形をダウンロード※本ワークショップでは既にダウンロード済なので紹介だけ 20
  21. 21. デモプロジェクトのあるサイトへアクセス 21
  22. 22. フリー波形素材をダウンロード 22
  23. 23. 任意のフォルダに展開※本ワークショップではデスクトップにショートカットがあります そこからアクセスして下さい。 23
  24. 24. 参考:他に素材を手に入れたい場合 SoundIconshttp://www.brainstorm-inc.jp/ 24
  25. 25. 波形を登録して、ACBビルド (単純に圧縮のみ) 25
  26. 26. 波形をキューシートへドロップ なお、Windows7などセキュリティレベルの関係でデスクトップからのD&Dがうまくいかない場合は適宜変更して下さい。 26
  27. 27. キューシートを選択し ビルドダイアログを開く ②① 27
  28. 28. チェックを確認し、ビルド 28
  29. 29. ACB出力した音を確認(圧縮音声の品質確認) 29
  30. 30. 初回再生時に警告がでたら• セキュリティ関連のダイアログが出た時は「ブロックを解除する」 を選択してください。 プレビューでアプリケーション間の通信処理を行うため、 ブロックを解除する必要があります。 30
  31. 31. キューをプレビュー(再生)F5キーで再生、F6キーで停止 31
  32. 32. 圧縮率を変えてみる 32
  33. 33. 効果音作成の基本• 爆発音• レーザー音• サイレン音 33
  34. 34. 爆発音を作る• ノイズにトラックオートメーションで ボリュームの変化を表現• ボイスビヘイビアでボイス停止(ボリューム0時) と設定する。 34
  35. 35. レーザー音を作る• sqにトラックオートメーションでピッチの変化を表現 • 右クリックで イベントの追加でシー ケンスエンドを追加 35
  36. 36. サイレン音を作る• TranceにAISACオートモジュレーションでピッチの周期的変化① ③ ④② • AISAC:キューやトラックに対して条件による音の変化を設定できる 36
  37. 37. キューをバウンス(波形出力)してみる wav形式で保存する 37
  38. 38. キューをバウンス(波形出力) 自動で再生され 記録開始されます。 F6で音を停止して バウンスを停止します 38
  39. 39. バウンスしたファイルの確認 出力先が開きbounceフォルダ内に キュー名でwavが作成されます。 39
  40. 40. バウンスしたファイルは リネームすると良い同じ名前のファイルで内容が異なるものがあると混乱しがちなので、なるべく名前を変更しておき ましょう。 40
  41. 41. 波形エディタを登録しておくと便利 キューをバウンス直後にすぐ編集 バウンスを停止してエ ディタを開きます 41
  42. 42. Audacityフリー波形編集ソフト モノラル化、 レート変更、 トリミングなど 42
  43. 43. ツールはとりあえずここまで 43
  44. 44. Unityプラグイン紹介 44
  45. 45. Unityプラグインとは何か?• ランタイムライブラリ(実行時にゲームに 組み込まれて動作するプログラム)• エディタ拡張(Unityエディタ上で動作)• 最小限のスクリプトが含まれています。 45
  46. 46. Unityプロジェクトの準備 46
  47. 47. Unityプロジェクトの作成 • Unityを起動し、空のプロジェクトを作成 デスクトップにショートカットが あります。 47
  48. 48. レイアウトは2 by 3で 48
  49. 49. シーン作成• とりあえず保存 名前はtestで。 49
  50. 50. • はじめにUnityプロジェクトに CRIWARE Unity Pluginをインス トールする 50
  51. 51. • Unityプラグインのパッケージは C:/ADX2LE_Workshop/cri/unity/ pluginにあります。 51
  52. 52. パッケージのインポート 52
  53. 53. Assetsフォルダの確認• 3つフォルダがインストールされます。 53
  54. 54. Unityプロジェクトの準備• メニューにCRIが追加されます。 初回出てこないときはメニューのどこかを クリックするとでてきます。 54
  55. 55. ADX2で作ったACBファイルを UnityのAssetsへ書き込む 55
  56. 56. CRIメニューからOpen CRI Atom Window ... を選択 56
  57. 57. CRI Atom Windowを使ってUnityのAssetsに書き込む ① ACB出力先のAssets フォルダを指定 実行 ② 57
  58. 58. 実行後のCRI Atom Window更新されない場合は、一度デスクトップを表示した後に再表示する 58
  59. 59. StreamingAssetsフォルダが作成される ACB 他にもACFファイル(NewProject.acf)と CriAtomProjInfo_Unity.csが追加されている。 59
  60. 60. ACFとは何か?• CRI Atom Config File Atomコンフィグファイル• ACBに含まれない、再生をするために必要な 情報が書き込まれたファイル (DSPエフェクト設定、カテゴリなどの全体設定情報) 60
  61. 61. CriAtomProjInfo_Unity.csとは何か?• Unityエディタ用のC#スクリプト• ADX2で作成した音をUnityが認識するた めの情報。 61
  62. 62. 手動でLE側のAssetsフォルダを UnityのAssetsへ書き込む 参考情報 62
  63. 63. CRI Atom Craftツールに戻り ACBをエクスプローラで開くキューシートを右クリック 63
  64. 64. プロジェクト直下の Public/inGamePreview/Assets を UnityのAssetsへ上書きコピー Assetsのある余白のところへドロップコピーしてペーストでも可 64
  65. 65. すべて上書きをするMacの場合、置き換えになってしまう場合があるので、 Windows側で行うと間違いない 65
  66. 66. Unityのシーン上で音を確認 とりあえずUnity上で音を再生する 66
  67. 67. Initializerを追加ADX2の初期化処理を行うためのオブジェクトを シーンに追加します。 67
  68. 68. CRIメニューからCreate CRIWARE Library Initializer ... を選択 68
  69. 69. CriWareLibraryInitializerが作られる ランタイムライブラリの設定で発音数、インゲームプレビュー設定、サーバー周期(FPS)など設定できます。 69
  70. 70. CriAtomSourceを追加ADX2の音を鳴らすためのオブジェクトを シーンに追加します。 70
  71. 71. CriAtomSourceの追加 ④ 2つオブジェク トが追加されるAtom Windowを開き①余白をクリックして 選択を解除し② orchehitを選択 ③ Create GameObject を押す 71
  72. 72. Play On Startをチェック① orchehit(CriAtomSource)の ② Play On Startをチェック 72
  73. 73. Unityのシーンを再生すると 音が鳴る 73
  74. 74. さらにボタンを押すと音が鳴るようにする SoundManagerを使う 74
  75. 75. スクリプトを追加して音をならす /samplecode/SoundManager.cs UnityのAssetsに① SoundManager.csをドロップして追加 Assetsの ③ SoundManager(C#)を GameObjectへドロップ ② Unityで 空のゲームオブジェクトを作る 75
  76. 76. Unityのシーンを再生しボタンを押すと任意の音が鳴らせます 76
  77. 77. 基本的なワークフロー 77
  78. 78. 波形を用意、 CRI Atom Craftでキューにして 音を調整、アレンジし ACBをビルドし、UnityのAssetsへ上書き波形エディタ CRI Atom Craft Unity元波形 キューシート CriAtomSource ACB ACB スクリプト 最低1つ 最低1つ ACB分割したい場合 個別コントロールしたい場合は複数持てる 複数持てる 1つで複数音鳴らせます 音を調整、アレンジ 78
  79. 79. 音の調整とアレンジ 79
  80. 80. ボリューム変更、ピッチ変更タイムラインでタイミング変更いろいろできます 80
  81. 81. 知ってると得する情報 81
  82. 82. ※本ワークショップでは アラカルト 時間の都合で2つ紹介スクリプトサンプル 解説 SoundManager AISAC基本オリジナル音作りたい ブロック再生基本(ツール紹介でやった内容) 効果音作成基本 手軽ににぎやかに ランダム基本おすすめ コンボシーケンシャル エフェクトの基本 音数制限の基本 おすすめ REACTの基本 インゲームで調整 82
  83. 83. SoundManager• スクリプトで鳴らす方法• CriAtomSource管理• キュー名取得• 再生 83
  84. 84. サウンドマネージャとは? using UnityEngine; using System.Collections; using System.Collections.Generic; // 配列用 public class SoundManager : MonoBehaviour { }サウンドを管理するゲーム独自のクラスで、再生や停止、リソース管理などを行う。ゲームに応じたギミックを埋め込む目的で用意。サウンドマネージャを作っておくと後で拡張したり、デバッグしやすくなるので便利です。 84
  85. 85. SoundManagerよりも先に、 CriWareInitializerが動作するようにUnityのオブジェクトでAwake()内でCriの関数を呼び出す場合などUnityのオブジェクトの初期化順番をコントロールするExecutionOrderを変更しておくと良いです。 85
  86. 86. CriAtomSource � private string cueSheetName = "CueSheet_0";��// キューシート名 ���� �������CriAtomSource atomSourceSe; � CriAtomSource atomSourceBgm; � void Awake () � { ��// CriAtomSourceコンポーネントを追加 � � atomSourceSe = gameObject.AddComponent<CriAtomSource> (); � � atomSourceSe.cueSheet = cueSheetName;� � � � // CriAtomSourceコンポーネントを追加 � � atomSourceBgm = gameObject.AddComponent<CriAtomSource> (); � � atomSourceBgm.cueSheet = cueSheetName; � }ここでは、コントロール対象として、おおまかにSEとBGM用のCriAtomSourceを追加しています。 86
  87. 87. ACB情報取得� private string cueSheetName = "CueSheet_0";��// キューシート名� �� private List<string> cueNameList = new List<string> (); //キュー名リスト� void Awake ()� { // ACBを取得しキュー情報を得る�� � CriAtomExAcb acb = CriAtom.GetAcb (cueSheetName);�� � CriAtomEx.CueInfo[] cueInfoList = acb.GetCueInfoList ();� � foreach (CriAtomEx.CueInfo cueInfo in cueInfoList) {� � � cueNameList.Add (cueInfo.name);�� � }�������} デバッグなどでキュー名一覧が欲しい場合はこのように取り出 せます。 名前以外にも様々な情報が取り出せます。 87
  88. 88. DSPバス設定関連� void Start () {� � ��// DSPバス設定名を指定� � CriAtomEx.AttachDspBusSetting("DspBusSetting_0");� �� � CriAtom.SetBusAnalyzer(true); // レベルメータを有効化� }DSPエフェクトを使用する場合にツールで作成したDspBusSetting_0をセットしておきます。BusAnalyzerは振幅レベルの測定用です。これを有効にすると、インゲームプレビュー時にレベルがツール側に通知されます。 88
  89. 89. ラップの工夫 �������// キューを再生する関数サンプル � public void PlaybackCue(int index) � { � � atomSourceSe.Play(index); � }ラップ方法も様々な方法がありますが、この例では単純にラップしただけ、(AtomSourceを隠す)呼び出し側の引数によって鳴る音が変化します。 � // ゲームオーバー時の再生関数 � public void PlayGameOver() � { � � atomSourceSe.Play(4); � }この例では、ゲームオーバーのイベントに対して、何をするかをこちらで決める事ができます。合わせて他の音止めたりといった拡張がこちらで可能です。 89
  90. 90. 再生状態の取得�� public void ResumeBGM()� { �//�再生中かどうかの取得� � CriAtomSource.Status status = atomSourceBgm.status; if ((status == CriAtomSource.Status.Stop) || ����(status == CriAtomSource.Status.PlayEnd)) {� � � PlayBGM(); //止まっていた時に再生� � }� }再生状態を取得して、止まっていたら再生するという例です。インゲーム等で音が停止された場合に、BGMを復帰する用にUpdate()内で呼び続ける事で復帰します。 90
  91. 91. ポーズ、レジューム � public void Pause() � { � � atomSourceBgm.Pause(true); � } � public void Resume() � { � � atomSourceBgm.Pause(false); � }ゲームのポーズ時などで、atomSourceで再生中の音をポーズします。 91
  92. 92. 簡易ビューワー � private string cueSheetName = "CueSheet_0"; ������CriAtomEx.CueInfo[] cueInfoList;� � void Start () � { � � CriAtomExAcb acb = CriAtom.GetAcb (cueSheetName);�� � � � cueInfoList = acb.GetCueInfoList (); � } ������public bool soundDebug = true; � void OnGUI() � { � � if(soundDebug){ � � � foreach (CriAtomEx.CueInfo cueInfo in cueInfoList) { � � � � if(GUILayout.Button(cueInfo.name)){ � � � � � atomSourceSe.Stop(); � � � � � atomSourceSe.Play(cueInfo.name);� � � � � � � � } � � � } � � } � }キューの数だけボタンを生成して音が鳴らせます。 92
  93. 93. AISAC基本• 距離減衰カーブ• ヘリコプターの回転数変化音• エンジン音的なもの 93
  94. 94. AISACとは何か? • Advanced Interactive Sound and Active Controller キューやトラックに対して条件による音の変化を設定できるコントロールタイプ:AISAC動作の仕方•オフ(手動)…  プログラムの関数SetAisac(コントロールID、コントロール値);から トラックオートメーション、3Dポジションの距離減衰やパン角度から•オートモジュレーション(自動)… 再生トリガ同期モジュレーション、 LFOとして、REACTトリガキー同期などで自動化(アニメーション)•ランダム(半自動) … 完全ランダム、またはプログラムから中心値指定プログラムやタイムライン、再生状態等から操作する目的で、音色変化を任意の値で抽象化します。直接パラメータ弄らせないことで、デザインの幅が広がります。 94
  95. 95. AISACのスクリプト例� float lastPlaybackBallTime = 0;�������// AISACの例� public void PlaybackBall(int index,float velocity)� {� � if(lastPlaybackBallTime+0.25 < Time.timeSinceLevelLoad){� � � velocity = Mathf.Min(velocity,1.0f);� � � atomSourceBall.SetAisac(0,velocity);� � � atomSourceBall.Play(index);� � � lastPlaybackBallTime = Time.timeSinceLevelLoad;� � }� }AISACを設定しつつ音を鳴らす関数の例です。atomSource.SetAisac(0,velocity); AISACコントロールID AISACコントロール値(0.0 1.0) 95
  96. 96. ブロック再生基本• インタラクティブミュージックとは?• ブロックのループ設定• ブロックの分割設定• 遷移する時のみ再生するトラック• 遷移初回時のみ再生するトラック 96
  97. 97. ブロック再生キューにする• キューの右クリックからブロックの作成を選択する 97
  98. 98. ブロック再生とは何か?• ブロックに分けて連続再生させる仕組み ① ② ③ブロックのループ回数を-1にすると無限ループ。ブロック分割数を指定すると、途中で切り替わるポイントが増える。遷移タイプを「指定分割で」にする。 ※「CRI ブロック再生」で検索すると、Youtube動画があります。 98
  99. 99. ブロック再生をプログラムから指定する� private CriAtomExPlayback playbackBGM;� CriAtomEx.CueInfo cueInfo;� public void PlayBGM()� {� � bool startFlag = false;� � CriAtomSource.Status status = atomSourceBgm.status;� � if ((status == CriAtomSource.Status.Stop) || (status == CriAtomSource.Status.PlayEnd)) {� � � this.playbackBGM = atomSourceBgm.Play(100);� � � startFlag = true;� � }� �� � if(startFlag == false){� � � int cur = this.playbackBGM.GetCurrentBlockIndex();�// 現在のブロックインデックスを得る� � � CriAtomExAcb acb = CriAtom.GetAcb("PinballMain");� � � if(acb != null){� � � � acb.GetCueInfo("BGM",out this.cueInfo);�// キュー情報� � � � cur++;� � � � if(this.cueInfo.numBlocks > 0){ //�ブロックがあれば // ブロックをセットする� � � � � this.playbackBGM.SetNextBlockIndex(cur % this.cueInfo.numBlocks);� � � � }� � � }� � }� }未再生なら再生、再生中ならブロックを次のブロックにすすめる 99
  100. 100. ランダムの基本• ピッチ• トラック• 再生確率 100
  101. 101. ピッチのランダムとは何か?• ピッチが再生リクエストのたびに変化する。 スライダにくぼみがあるものは縦にドラッグすると緑の幅が指定 できる。この範囲の中からランダムに設定されて再生される。 ① ② プロパティリストから直接値を入力もできます。 101
  102. 102. トラックのランダムとは何か?• ランダムに音が変わる 0 1 20 1 2 1 2 2 キューのシンセタイプをランダムに キューのシンセタイプをランダムノーリピート0 1 2 1 2 1 にすると、同じ番号が連続しない キューのシンセタイプをシーケンシャルに0 1 2 0 1 2 すると、順番に切り替わる 102
  103. 103. 再生確率とは何か?• 音が鳴ったり、鳴らなかったりする 100%で確実に再生されるが、 50%だと 2回に1回しか鳴らない。 103
  104. 104. コンボシーケンシャル おすすめ• 連続ヒット音について• コンボ間隔設定• コンボ戻り設定 104
  105. 105. コンボシーケンシャルとは何か? • 連続ヒット音 ① ② 0 1 2 ③トラックで段々オケもピッ キューのシンセタイプをコンボシーケンシャルにチが上がるように設定 コンボ間隔 … コンボの決まる間隔 コンボ戻り … 最後までいった後どのトラックに戻るか 500msec未満の時のみ次のトラックが再生される。0 1 2 2 2 0 500msec以上再生間隔が空くと0にリセットされる。 500msec以上 105
  106. 106. エフェクトの基本• リバーブ• エコーの追加• バスの仕組み 106
  107. 107. エフェクトとは何か?• DSPバスエフェクトで音を豪華に ① ②バスにエフェクトを追加し、センドでバス0に戻すようにする。 トラックのバスセンドを上げる と エコーがかかる。 ③ 107
  108. 108. 音数制限の基本• キューリミット• カテゴリによるリミット• ボイスリミットとの関係 108
  109. 109. 音数制限とは何か? • 適切な発音数制御をする3つの方法 キュー … その音そのものの発音数 カテゴリ … おおまかな発音数 ボイス … より低レベルでリアルタイムのリソース管理を目的とするキュー キュー単位で発音数制御 リリース有効カテゴリ カテゴリで発音数制御。 キュー単位。 リリース有効 ① リリース無効。(即時ボイス ボイスリソース単位 で解放) ② 109
  110. 110. REACTの基本 おすすめ• ダッキング効果について• カテゴリ間の音量作用• 自動レベル管理 110
  111. 111. REACTとは何か? • REACT = 反応する • カテゴリの発音状態による他のカテゴリ音の変化の自動化 声(Serif)が鳴ったら BGMを下げる。  といった事を設定する。 どれくらいの時間かけて(200msec) どのくらいの値に(0.2) どれくらい時間かけて戻る (1000msec)・音量制御を自動化します。・変化パラメータにAISACを指定する事で、他のパラメータもコントロールできます。(ピッチとか) 111
  112. 112. カテゴリはこんな感じで 112
  113. 113. REACTの確認BGM再生 声を再生 113
  114. 114. インゲームでさらに調整 114
  115. 115. CriWareLibraryInitializerのUses In Game Previewにチェックを入れる。 115
  116. 116. Unityエディタを実行状態にするとインゲーム用のポート(2002)が開きます。 デバッグ用の備考 IP ポートの確認方法 WinXP: netstat -an Mac: lsof -i -P 116
  117. 117. Unityエディタを実行状態にして、CRI Atom Craftで【F10キー】でインゲーム接続します。 117
  118. 118. Macの場合は、ツール/プロパティからリモートターゲットIPアドレスをMacのIPにすることで、Unityエディタに接続できます。 118
  119. 119. エラー対応 119
  120. 120. よくあるエラー例① ACFよりACBが先にロードされて問題 →だいたいExecution Orderの設定で直る※ACFはCriWareInitializerで設定される。 120
  121. 121. CRIWARE Error Handlerを追加すると 何かトラブルがあった時、Consoleでエラーメッセージが確認できます 121
  122. 122. よくあるエラー例② 音が鳴らない場合や、Nullアクセスが発生する場合 ExecutionOrderが正しく反映していない場合があるようです。 CRI Atom ウィンドウを一度閉じてから 再設定すると直ったりします。CRI Atom ウィンドウを閉 じる 122
  123. 123. Atom Windowの閉じ方 ACBの差し替え時や シーンを実行時にエラーが起った場合など 開いたままでもし問題が起る場合は閉じておいて下さい。 ウィンドウ化している場合はタブ化している場合はClose Tab Closeボタン 123
  124. 124. エラーは他にもいろいろ起きます バグの可能性もあります ゲームジャム期間中で 何か分からない事や 困った事があればtwitterで@tatmos宛につぶやいて下さい。 多いものから対処法をまとめたページとか用意するかも… 124
  125. 125. ADX2 LEをよろしくお願いします。ADX2ユーザー助け合い所 @facebookhttp://www.facebook.com/groups/adx2userj/ 125

×