...

ADX2LE_WS_130124(21.9MB)

by user

on
Category: Documents
1

views

Report

Comments

Transcript

ADX2LE_WS_130124(21.9MB)
ADX2 LE ワークショップ
GGJ2013向け
2013-01-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会場WEBサイト
CRI GGJ特設サイト
GGJ特設サイトのリンク先から
ダウンロード
8
ADX2 LEのインストール
• zipファイルを展開し、展開したcriフォルダを
C:/ADX2LE_Workshop/に置いてください。
(windowsの場合パス名に日本語が含まれていると正しく動作しない場合があります。)
•
Macの場合は、Unityのプラグインだけ使用しますので好きなところに展開して
下さい。
9
ツールを紹介
10
ツール紹介
•
•
•
CRI Atom Craft は、波形を登録し音を管理する。
音リクエスト(プログラムからのコール)をキューと呼ぶ
複数キューをパッキングしたものをキューシートとよび、
キューシートをACB出力する。
波形エディタ
CRI Atom Craft
元波形
キューシート
ACB
11
ACBとは何か?
• CRI Atom Cuesheet Binary
Atomキューシートバイナリ
• 圧縮された波形(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
キューをバウンス(波形出力)してみる
37
キューをバウンス(波形出力)
自動で再生され
記録開始されます。
F6で音を停止して
バウンスを停止します
38
バウンスしたファイルの確認
出力先が開き
bounceフォルダ内に
キュー名でwavが作成されます。
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
Assetsフォルダの確認
• 3つフォルダがインストールされます。
53
Unityプロジェクトの準備
• メニューにCRIが追加されます。
初回出てこないときはメニューのどこかを
クリックするとでてきます。
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フォルダが作成される
ACB
他にもACFファイル(NewProject.acf)と
CriAtomProjInfo_Unity.csが追加されている。
59
ACFとは何か?
• CRI Atom Config File
Atomコンフィグファイル
• 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の追加
④
2つオブジェク
トが追加される
Atom Windowを開き
余白をクリックして
①
選択を解除し
②
orchehitを選択
③
Create GameObject
を押す
71
Play On Startをチェック
①
②
orchehit(CriAtomSource)の
Play On Startをチェック
72
Unityのシーンを再生すると
音が鳴る
73
さらに
ボタンを押すと音が鳴るようにする
SoundManagerを使う
74
スクリプトを追加して音をならす
/samplecode/SoundManager.cs
UnityのAssetsに
① SoundManager.csをドロップして追加
③
②
Assetsの
SoundManager(C#)を
GameObjectへドロップ
Unityで
空のゲームオブジェクトを作る
75
Unityのシーンを再生し
ボタンを押すと任意の音が鳴らせます
76
基本的なワークフロー
77
波形を用意、
CRI Atom Craftでキューにして
音を調整、アレンジし
ACBをビルドし、UnityのAssetsへ上書き
波形エディタ
CRI Atom Craft
Unity
元波形
キューシート
CriAtomSource
ACB
スクリプト
ACB
最低1つ
ACB分割したい場合
複数持てる
最低1つ
個別コントロールしたい場合は複数持てる
1つで複数音鳴らせます
音を調整、アレンジ
78
音の調整とアレンジ
79
ボリューム変更、ピッチ変更
タイムラインでタイミング変更
いろいろできます
80
知ってると得する情報
81
アラカルト
スクリプトサンプル
解説
オリジナル音作りたい
(ツール紹介でやった内容)
手軽ににぎやかに
おすすめ
おすすめ
※本ワークショップでは
時間の都合で2つ紹介
SoundManager
AISAC基本
ブロック再生基本
効果音作成基本
ランダム基本
コンボシーケンシャル
エフェクトの基本
音数制限の基本
REACTの基本
インゲームで調整
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);
� }
ラップ方法も様々な方法がありますが、
この例では単純にラップしただけ、(AtomSourceを隠す)
呼び出し側の引数によって鳴る音が変化します。
�
�
�
�
�
// ゲームオーバー時の再生関数
public void PlayGameOver()
{
� atomSourceSe.Play(4);
}
この例では、ゲームオーバーのイベントに対して、何をするか
をこちらで決める事ができます。
合わせて他の音止めたりといった拡張がこちらで可能です。
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;
� � }
� }
AISACを設定しつつ音を鳴らす関数の例です。
atomSource.SetAisac(0,velocity);
AISACコントロールID
AISACコントロール値(0.0 1.0)
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
トラックのランダムとは何か?
•
ランダムに音が変わる
0
1
2
0 1 2 1 2 2
キューのシンセタイプをランダムに
0 1 2 1 2 1
キューのシンセタイプをランダムノーリピート
0 1 2 0 1 2
キューのシンセタイプをシーケンシャルに
にすると、同じ番号が連続しない
すると、順番に切り替わる
102
再生確率とは何か?
•
音が鳴ったり、鳴らなかったりする
100%で確実に再生されるが、
50%だと 2回に1回しか鳴らない。
103
コンボシーケンシャル
おすすめ
• 連続ヒット音について
• コンボ間隔設定
• コンボ戻り設定
104
コンボシーケンシャルとは何か?
•
①
連続ヒット音
②
0
1
2
トラックで段々オケもピッ
チが上がるように設定
③
キューのシンセタイプをコンボシーケンシャルに
コンボ間隔 … コンボの決まる間隔
コンボ戻り … 最後までいった後どのトラックに戻るか
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 -an
Mac: 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をよろしくお願いします。
ADX2ユーザー助け合い所 @facebook
http://www.facebook.com/groups/adx2userj/
125
Fly UP