adx2le ggj13向けワークショップ

Post on 02-Jul-2015

4.248 Views

Category:

Education

8 Downloads

Preview:

Click to see full reader

DESCRIPTION

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

TRANSCRIPT

ADX2 LE ワークショップGGJ2013向け2013-01-25 田中孝

この資料は1/22~24に行われたワークショップの資料を元にしています。

1

このワークショップについて

•ADX2 LEをGGJで導入する紹介になります。•後半のアラカルトでADX2の機能を紹介します。資料に先に目を通しておいてください。

2

レジュメ• おいしいところ/落とし穴• ADX2 LEダウンロード/インストール(紹介のみ)• ツール紹介• Unityプラグイン紹介• 基本ワークフロー紹介• 自由課題(アラカルト)

3

ADX2 LEおいしいところ

4

何がおいしいのか?•圧縮波形でサイズ小さく起動も速く• BGMループが楽•効果音が多くなっても管理が楽•エフェクトで手軽に豪華に•他にも便利機能いろいろ

5

• Unity Webプレーヤで動かない→バウンス(波形出力)でWeb版、 本気はPCまたはMac版として

•Windowsのツールしかない→MacのUnityでランタイムライブラリは動く→Parallelsで問題ない

Macの人は仮想環境があると便利

落とし穴

6

ADX2 LEをダウンロード※本ワークショップでは既にインストール済なので紹介だけ

7

ADX2 LEのダウンロード

GGJ特設サイトのリンク先からダウンロード

CRI GGJ特設サイト

GGJ会場WEBサイト

8

ADX2 LEのインストール• zipファイルを展開し、展開したcriフォルダをC:/ADX2LE_Workshop/に置いてください。(windowsの場合パス名に日本語が含まれていると正しく動作しない場合があります。)

• Macの場合は、Unityのプラグインだけ使用しますので好きなところに展開して下さい。

9

ツールを紹介

10

ツール紹介• CRI Atom Craft は、波形を登録し音を管理する。• 音リクエスト(プログラムからのコール)をキューと呼ぶ• 複数キューをパッキングしたものをキューシートとよび、キューシートをACB出力する。

元波形波形エディタ

キューシートACB

CRI Atom Craft

11

ACBとは何か?

• CRI Atom Cuesheet BinaryAtomキューシートバイナリ

• 圧縮された波形(1/4~1/12)と設定(音の鳴らし方)をパッキングしたファイル

• これをメモリに読み込んで再生する

12

ツールを起動

13

起動• CRI Atom Craft アイコンをダブルクリックで起動。

※本ワークショップではデスクトップにショートカットがあります

14

Undoできます•ツール操作のUndo

15

プロジェクトを作成し波形を登録

16

プロジェクト作成

17

プロジェクト名をつける

18

プロジェクトをとりあえず保存

19

登録する波形をダウンロード※本ワークショップでは既にダウンロード済なので紹介だけ

20

デモプロジェクトのあるサイトへアクセス

21

フリー波形素材をダウンロード

22

任意のフォルダに展開

※本ワークショップではデスクトップにショートカットがありますそこからアクセスして下さい。

23

SoundIcons参考:他に素材を手に入れたい場合

http://www.brainstorm-inc.jp/24

波形を登録して、ACBビルド(単純に圧縮のみ)

25

波形をキューシートへドロップ

なお、Windows7などセキュリティレベルの関係でデスクトップからのD&Dがうまくいかない場合は適宜変更して下さい。

26

キューシートを選択しビルドダイアログを開く

27

チェックを確認し、ビルド

28

ACB出力した音を確認(圧縮音声の品質確認)

29

初回再生時に警告がでたら

• セキュリティ関連のダイアログが出た時は「ブロックを解除する」を選択してください。

プレビューでアプリケーション間の通信処理を行うため、ブロックを解除する必要があります。

30

キューをプレビュー(再生)

F5キーで再生、F6キーで停止31

圧縮率を変えてみる

32

効果音作成の基本

•爆発音•レーザー音•サイレン音

33

爆発音を作る• ノイズにトラックオートメーションでボリュームの変化を表現

• ボイスビヘイビアでボイス停止(ボリューム0時)と設定する。

34

レーザー音を作る• sqにトラックオートメーションでピッチの変化を表現

• 右クリックでイベントの追加でシーケンスエンドを追加

35

サイレン音を作る• TranceにAISACオートモジュレーションでピッチの周期的変化

②③ ④

• AISAC:キューやトラックに対して条件による音の変化を設定できる

36

キューをバウンス(波形出力)してみるwav形式で保存する

37

キューをバウンス(波形出力)

自動で再生され記録開始されます。

F6で音を停止して

バウンスを停止します

38

バウンスしたファイルの確認

キュー名でwavが作成されます。

出力先が開き

bounceフォルダ内に39

バウンスしたファイルはリネームすると良い

同じ名前のファイルで内容が異なるものがあると混乱しがちなので、なるべく名前を変更しておき

ましょう。

40

キューをバウンス直後にすぐ編集

バウンスを停止してエディタを開きます

波形エディタを登録しておくと便利

41

Audacityフリー波形編集ソフト

モノラル化、レート変更、トリミングなど

42

ツールはとりあえずここまで

43

Unityプラグイン紹介

44

Unityプラグインとは何か?

• ランタイムライブラリ(実行時にゲームに組み込まれて動作するプログラム)

• エディタ拡張(Unityエディタ上で動作)• 最小限のスクリプトが含まれています。

45

Unityプロジェクトの準備

46

Unityプロジェクトの作成

• Unityを起動し、空のプロジェクトを作成

デスクトップにショートカットがあります。

47

レイアウトは2 by 3で

48

シーン作成•とりあえず保存 名前はtestで。

49

•はじめにUnityプロジェクトにCRIWARE Unity Pluginをインストールする

50

• UnityプラグインのパッケージはC:/ADX2LE_Workshop/cri/unity/pluginにあります。

51

パッケージのインポート

52

• 3つフォルダがインストールされます。

Assetsフォルダの確認

53

•メニューにCRIが追加されます。

Unityプロジェクトの準備

初回出てこないときはメニューのどこかをクリックするとでてきます。

54

ADX2で作ったACBファイルをUnityのAssetsへ書き込む

55

CRIメニューからOpen CRI Atom Window ...

を選択

56

CRI Atom Windowを使ってUnityのAssetsに書き込む

ACB出力先のAssetsフォルダを指定

実行

57

実行後のCRI Atom Window

更新されない場合は、一度デスクトップを表示した後に再表示する

58

StreamingAssetsフォルダが作成される

他にもACFファイル(NewProject.acf)とCriAtomProjInfo_Unity.csが追加されている。

ACB

59

ACFとは何か?

• CRI Atom Config FileAtomコンフィグファイル

• ACBに含まれない、再生をするために必要な情報が書き込まれたファイル(DSPエフェクト設定、カテゴリなどの全体設定情報)

60

CriAtomProjInfo_Unity.csとは何か?

• Unityエディタ用のC#スクリプト• ADX2で作成した音をUnityが認識するための情報。

61

手動でLE側のAssetsフォルダをUnityのAssetsへ書き込む

参考情報

62

CRI Atom Craftツールに戻りACBをエクスプローラで開く

キューシートを右クリック

63

プロジェクト直下のPublic/inGamePreview/Assets

をUnityのAssetsへ上書きコピー

Assetsのある余白のところへドロップ

コピーしてペーストでも可64

すべて上書きをする

Macの場合、置き換えになってしまう場合があるので、Windows側で行うと間違いない

65

Unityのシーン上で音を確認

とりあえずUnity上で音を再生する

66

Initializerを追加

ADX2の初期化処理を行うためのオブジェクトをシーンに追加します。

67

CRIメニューからCreate CRIWARE Library Initializer ...

を選択

68

CriWareLibraryInitializerが作られる

ランタイムライブラリの設定で発音数、インゲームプレビュー設定、サーバー周期(FPS)など設定できます。

69

CriAtomSourceを追加

ADX2の音を鳴らすためのオブジェクトをシーンに追加します。

70

CriAtomSourceの追加

Atom Windowを開き余白をクリックして選択を解除し

Create GameObjectを押す

④2つオブジェクトが追加される

orchehitを選択②

71

Play On Startをチェック

orchehit(CriAtomSource)のPlay On Startをチェック

72

Unityのシーンを再生すると音が鳴る

73

さらにボタンを押すと音が鳴るようにする

SoundManagerを使う

74

スクリプトを追加して音をならす/samplecode/SoundManager.cs

Unityで空のゲームオブジェクトを作る

UnityのAssetsにSoundManager.csをドロップして追加

AssetsのSoundManager(C#)をGameObjectへドロップ

75

Unityのシーンを再生し

ボタンを押すと任意の音が鳴らせます

76

基本的なワークフロー

77

元波形 CriAtomSourceUnity波形エディタ

キューシートACB

CRI Atom Craft

波形を用意、CRI Atom Craftでキューにして音を調整、アレンジしACBをビルドし、UnityのAssetsへ上書き

スクリプト

最低1つ個別コントロールしたい場合は複数持てる

最低1つACB分割したい場合

複数持てる

1つで複数音鳴らせます

音を調整、アレンジ

ACB

78

音の調整とアレンジ

79

ボリューム変更、ピッチ変更

タイムラインでタイミング変更

いろいろできます

80

知ってると得する情報

81

アラカルト

SoundManagerAISAC基本

ブロック再生基本効果音作成基本ランダム基本

コンボシーケンシャルエフェクトの基本音数制限の基本REACTの基本インゲームで調整

おすすめ

おすすめ

※本ワークショップでは時間の都合で2つ紹介

オリジナル音作りたい(ツール紹介でやった内容)

手軽ににぎやかに

スクリプトサンプル解説

82

SoundManager

•スクリプトで鳴らす方法• CriAtomSource管理•キュー名取得•再生

83

サウンドマネージャとは?using UnityEngine;using System.Collections;using System.Collections.Generic; // 配列用

public class SoundManager : MonoBehaviour {

}

サウンドを管理するゲーム独自のクラスで、再生や停止、リソース管理などを行う。

ゲームに応じたギミックを埋め込む目的で用意。

サウンドマネージャを作っておくと後で拡張したり、デバッグしやすくなるので便利です。

84

SoundManagerよりも先に、CriWareInitializerが動作するように

UnityのオブジェクトでAwake()内でCriの関数を呼び出す場合などUnityのオブジェクトの初期化順番をコントロールする ExecutionOrderを変更しておくと良いです。

85

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

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

DSPバス設定関連� void Start () {� �

��// DSPバス設定名を指定� � CriAtomEx.AttachDspBusSetting("DspBusSetting_0");� �� � CriAtom.SetBusAnalyzer(true); // レベルメータを有効化� }

DSPエフェクトを使用する場合にツールで作成したDspBusSetting_0をセットしておきます。

BusAnalyzerは振幅レベルの測定用です。これを有効にすると、インゲームプレビュー時にレベルがツール側に通知されます。

88

ラップの工夫�������// キューを再生する関数サンプル� public void PlaybackCue(int index)� {� � atomSourceSe.Play(index);� }

この例では、ゲームオーバーのイベントに対して、何をするかをこちらで決める事ができます。合わせて他の音止めたりといった拡張がこちらで可能です。

� // ゲームオーバー時の再生関数� public void PlayGameOver()� {� � atomSourceSe.Play(4);� }

ラップ方法も様々な方法がありますが、この例では単純にラップしただけ、(AtomSourceを隠す)呼び出し側の引数によって鳴る音が変化します。

89

再生状態の取得�� public void ResumeBGM()� {

�//�再生中かどうかの取得� � CriAtomSource.Status status = atomSourceBgm.status;

if ((status == CriAtomSource.Status.Stop) || ����(status == CriAtomSource.Status.PlayEnd)) {

� � � PlayBGM(); //止まっていた時に再生� � }� }

再生状態を取得して、止まっていたら再生するという例です。

インゲーム等で音が停止された場合に、BGMを復帰する用にUpdate()内で呼び続ける事で復帰します。

90

ポーズ、レジューム� public void Pause()� {� � atomSourceBgm.Pause(true);� }� public void Resume()� {� � atomSourceBgm.Pause(false);� }

ゲームのポーズ時などで、atomSourceで再生中の音をポーズします。

91

簡易ビューワー� 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

AISAC基本

•距離減衰カーブ•ヘリコプターの回転数変化音•エンジン音的なもの

93

AISACとは何か?• Advanced Interactive Sound and Active Controllerキューやトラックに対して条件による音の変化を設定できる

コントロールタイプ:AISAC動作の仕方•オフ(手動)…  プログラムの関数SetAisac(コントロールID、コントロール値);から トラックオートメーション、3Dポジションの距離減衰やパン角度から•オートモジュレーション(自動)… 再生トリガ同期モジュレーション、 LFOとして、REACTトリガキー同期などで自動化(アニメーション)•ランダム(半自動) … 完全ランダム、またはプログラムから中心値指定プログラムやタイムライン、再生状態等から操作する目的で、音色変化を任意の値で抽象化します。直接パラメータ弄らせないことで、デザインの幅が広がります。

94

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;� � }� }

atomSource.SetAisac(0,velocity);

AISACコントロールIDAISACコントロール値(0.0~1.0)

AISACを設定しつつ音を鳴らす関数の例です。

95

ブロック再生基本•インタラクティブミュージックとは?•ブロックのループ設定•ブロックの分割設定•遷移する時のみ再生するトラック•遷移初回時のみ再生するトラック

96

ブロック再生キューにする

• キューの右クリックからブロックの作成を選択する

97

ブロック再生とは何か?

• ブロックに分けて連続再生させる仕組み

ブロックのループ回数を-1にすると無限ループ。ブロック分割数を指定すると、途中で切り替わるポイントが増える。遷移タイプを「指定分割で」にする。

※「CRI ブロック再生」で検索すると、Youtube動画があります。

①②

98

ブロック再生をプログラムから指定する� 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

ピッチのランダムとは何か?• ピッチが再生リクエストのたびに変化する。

スライダにくぼみがあるものは縦にドラッグすると緑の幅が指定できる。この範囲の中からランダムに設定されて再生される。

プロパティリストから直接値を入力もできます。

101

トラックのランダムとは何か?• ランダムに音が変わる

キューのシンセタイプをランダムに

012

0 1 2 1 2 キューのシンセタイプをランダムノーリピートにすると、同じ番号が連続しない1

0 1 2 1 2 2

0 1 2 0 1 2 キューのシンセタイプをシーケンシャルにすると、順番に切り替わる

102

再生確率とは何か?• 音が鳴ったり、鳴らなかったりする

100%で確実に再生されるが、50%だと 2回に1回しか鳴らない。

103

コンボシーケンシャル

•連続ヒット音について•コンボ間隔設定•コンボ戻り設定

おすすめ

104

コンボシーケンシャルとは何か?• 連続ヒット音

トラックで段々オケもピッチが上がるように設定

キューのシンセタイプをコンボシーケンシャルにコンボ間隔 … コンボの決まる間隔コンボ戻り … 最後までいった後どのトラックに戻るか

012

0 1 2 2 2 0 500msec未満の時のみ次のトラックが再生される。500msec以上再生間隔が空くと0にリセットされる。

500msec以上

105

エフェクトの基本

•リバーブ•エコーの追加•バスの仕組み

106

エフェクトとは何か?• DSPバスエフェクトで音を豪華に

バスにエフェクトを追加し、センドでバス0に戻すようにする。 トラックのバスセンドを上げる

とエコーがかかる。

③107

音数制限の基本

•キューリミット•カテゴリによるリミット•ボイスリミットとの関係

108

音数制限とは何か?• 適切な発音数制御をする3つの方法キュー … その音そのものの発音数カテゴリ … おおまかな発音数ボイス … より低レベルでリアルタイムのリソース管理を目的とする

キュー キュー単位で発音数制御 リリース有効

カテゴリカテゴリで発音数制御。キュー単位。 リリース有効

ボイス ボイスリソース単位リリース無効。(即時で解放)

②109

REACTの基本

•ダッキング効果について•カテゴリ間の音量作用•自動レベル管理

おすすめ

110

REACTとは何か?• REACT = 反応する• カテゴリの発音状態による他のカテゴリ音の変化の自動化

声(Serif)が鳴ったらBGMを下げる。 といった事を設定する。

どれくらいの時間かけて(200msec)どのくらいの値に(0.2)どれくらい時間かけて戻る(1000msec)

・音量制御を自動化します。・変化パラメータにAISACを指定する事で、他のパラメータもコントロールできます。(ピッチとか)

111

カテゴリはこんな感じで

112

REACTの確認

BGM再生 声を再生

113

インゲームでさらに調整

114

CriWareLibraryInitializerのUses In Game Previewにチェックを入れる。

115

Unityエディタを実行状態にすると

インゲーム用のポート(2002)が開きます。

デバッグ用の備考 IP ポートの確認方法WinXP: netstat -anMac: lsof -i -P

116

Unityエディタを実行状態にして、

CRI Atom Craftで【F10キー】でインゲーム接続します。

117

Macの場合は、ツール/プロパティからリモートターゲットIPアドレスをMacのIPにすることで、Unityエディタに接続できます。

118

エラー対応

119

よくあるエラー例①

ACFよりACBが先にロードされて問題→だいたいExecution Orderの設定で直る※ACFはCriWareInitializerで設定される。

120

CRIWARE Error Handlerを追加すると何かトラブルがあった時、

Consoleでエラーメッセージが確認できます

121

よくあるエラー例②音が鳴らない場合や、Nullアクセスが発生する場合

ExecutionOrderが正しく反映していない場合があるようです。CRI Atom ウィンドウを一度閉じてから

再設定すると直ったりします。

CRI Atom ウィンドウを閉じる

122

Atom Windowの閉じ方ACBの差し替え時や

シーンを実行時にエラーが起った場合など開いたままでもし問題が起る場合は閉じておいて下さい。

タブ化している場合はClose Tabウィンドウ化している場合は

Closeボタン

123

エラーは他にもいろいろ起きますバグの可能性もあります

ゲームジャム期間中で何か分からない事や困った事があれば

twitterで@tatmos宛につぶやいて下さい。

多いものから対処法をまとめたページとか用意するかも…

124

ADX2 LEをよろしくお願いします。

http://www.facebook.com/groups/adx2userj/

ADX2ユーザー助け合い所 @facebook

125

top related