ADX2情報

 

 

 

 

 

 

このページは古いです。→新しいページ

 

 

 

 

 

 

 

ーーー

ADX2 LE情報(facebook ADX2ユーザー助け合い所からコピー)

検索にひっかかるようにwikiにADX2LEでのスクリプトのヒント集をwikiにまとめてみました。

■効果音を作りたい

http://www.slideshare.net/tatmos/adx2le-ggj13/33
の33ページから「爆発音」「レーザー音」「サイレン音」など作ってみましょう。

↑チップチューン風の音が作れます。

ツールの基本的な使い方動画

■初期化手順

UnityでPluginをインストールした後に以下の手順でシーンに最低限必要なオブジェクトを作成します。

「CRI」メニューからCreate CRIWARE Libraly Initializerを選択し、ADX2システム初期化の為のオブジェクトをシーンに追加する。
「CRI」メニューからCreate CRIWARE Error Handlerを選択し、エラーハンドラをシーン追加
「CRI」メニューからOpen CRI Atom Window ...でCRIウィンドウを開きそのウィンドウ内の
Select Assets Rootボタンで[Atom Craftの出力したAssetsフォルダ]を指定します。
Update Assets of "CRI Atom Craft"ボタンでACF,ACBを更新します。
この手順でツール「CRI Atom Craft」で作ったデータを更新する事ができます。

 ■CriAtomSouceコンポーネントの追加

atomSourceSe = gameObject.AddComponent ();
atomSourceSe.cueSheet = cueSheetName; //キューシート名指定

AtomSouceコンポーネントをスクリプトで作りたい場合はStart()内などに上記のスクリプトで追加すると、
実行時にCriAtomSourceが追加されます。複数のAtomSouceをつけたい場合など上記のようなやり方もできるという例になります。

■再生/停止/ポーズ/ポーズ解除

atomSourceSe.Play(4); // キューID指定再生
atomSourceSe.Play(“orchehit”); //キュー名指定再生
atomSourceSe.Stop();
atomSourceSe.Pause(true);
atomSourceSe.Pause(false);

 

再生関数には、番号(ID)指定と名前(ラベル)指定の二種類があり、どちらでも好みのものを利用できます。

Pitch/Volume変更

atomSourceSe.pitch = 100; // cent(100で半音)
atomSourceSe.volume = 1.0f;   // 1.0で原音と同じ振幅レベル
ピッチやボリュームは変更してすぐには反映せず、次の再生時に反映します。再生中の音にすぐに反映させたい場合はピッチベンドの項目を参考にしてみてください。

■AISAC変更

atomSourceSe.SetAisac(aisac_id,value);//AISACコントロールID指定
atomSourceSe.SetAisac(“Any”,value); //AISACコントロール名指定

AISACはゲームの状況を音に影響させたい場合に使います。ピッチやボリューム変更と同じようなコントロール値という0.0~1.0の値で、ツールで作成したAISAC変化をプログラムから呼び出す事ができます。
持続音などの変化(エンジン音)やBGM、環境音に対するフィルター処理など様々な用途に使う事ができます。

カテゴリボリューム変更

CriAtom.SetCategoryVolume("BGM",bgmVolume);

カテゴリはツールでキューに設定しておくことができます。キューに適切にカテゴリを設定することで、ゲーム中のサウンドコンフィグとして使う事ができます。

■バスセンド(リバーブ量変化等)

float depth = 1.0f;
int busNo = 1; //reverb
atomSourceSe.SetBusSendLevelOffset(busNo,depth);

 

センドエフェクトは比較的重いDSP処理を行う目的で使用します。上記の関数はデータ設定に対して加算します。トンネルに入った時にdepthを大きくするという使い方ができます。ツールで他のバス(バスは0~7まで)にエフェクトを追加しておく事で、音に変化を与える事ができます。

【状態取得】

 ■再生時刻の取得

GUILayout.Label(atomSourceBgm.time.ToString());

 

 上記のはOnGUI()なっで呼ぶと再生時刻を表示します。

■再生状態の取得

CriAtomSource.Status status = atomSourceBgm.status;
   if ((status == CriAtomSource.Status.Stop) || (status == CriAtomSource.Status.PlayEnd)) {//停止かエンドか
       this.playbackBGM = atomSourceBgm.Play(100);
 }

 

上記の例では停止かエンド時に再度トリガーします。

■キュー情報一括取得

string cueSheetName = “Pinball”;
CriAtomExAcb acb = CriAtom.GetAcb (cueSheetName);
CriAtomEx.CueInfo[] cueInfoList = acb.GetCueInfoList ();

 

キューにはツールで設定された様々な情報があります。これを再生前に取得する場合上記の関数を使います。名前やID、ユーザーデータ、カテゴリやAISAC使用有無、キューの長さなど取り出す事ができます。

■振幅レベルをとりだす(ピークメータ、口パク等)

void Start () {
    CriAtomEx.AttachDspBusSetting("DspBusSetting_0"); //バス変更
    CriAtom.SetBusAnalyzer(true); // バス解析器を有効化
}
void Update () {
    CriAtomExAsr.BusAnalyzerInfo lBusInfo = CriAtom.GetBusAnalyzerInfo(0); //バス0
    Debug.Log("level:" + lBusInfo.peakLevels[0].ToString()); //チャンネル0(Left)
}

8個あるバスのうちバス0はマスターアウトのバスで、全ての音がそのバスを経由します。
特定の音のみの振幅を検出したい場合は、専用のバスへもセンドして検出する事も可能。(声専用バス等)




【ブロック再生】

ブロック再生のデータ作成解説動画

■再生中のブロックインデックスの取得(ブロック再生)

CriAtomExPlayback playbackBGM;
playbackBGM = atomSourceBgm.Play(100);
int cur = this.playbackBGM.GetCurrentBlockIndex();

↑再生中のブロック番号を確認する方法。

 ■再生中のブロックインデックスの指定(ブロック再生)

playbackBGM.SetNextBlockIndex(cur % this.cueInfo.numBlocks);

再生中のブロックを含むキューに対して上記の関数を呼ぶと、ツールでブロックをクリックした時と同じような動作になります。

■再生開始前にブロックをセットして再生(ブロック再生)

atomSourceBgm.cueName = "mainBgm";
atomSourceBgm.SetFirstBlockIndex(1);
atomSourceBgm.Play();

 再生開始前にセットする方法。


■スクリプトでのacb解放の仕方

if(GUILayout.Button("Remove")){
       CriAtom.RemoveCueSheet("PinballMain");
 }
 if(GUILayout.Button("Add")){
       CriAtom.AddCueSheet("PinballMain","PinballMain.acb","");
 }

ACBを動的に切り替えたい(DLCなど)の特殊用途。


 

■BGMのビートを取り出す(ビート同期する処理)

void Start () {
    evBeatUpdate += beat; //(デリゲート)
}
void beat ()
{
    Debug.Log("beat" + beatNo.ToString());
}
static int beatNo = 0;

static int lastBeatNo = 0;
public delegate void BeatUpdate ();
static public BeatUpdate evBeatUpdate;

void Update () {
    beatNo = (int)(0.001f*(atomSourceBgm.time*82f/60f)); //BPM82
    if(lastBeatNo != beatNo){
        evBeatUpdate();
        lastBeatNo = beatNo;
    }
}

再生時間を元楽曲のテンポ(あらかじめ知っている)で割って拍を取り出し、デリゲートを使ってビートに合わせる処理。
拍に合わせた処理をする(音ゲーなど)に使えるかも。

■XYでAISACを変更する(カオシレータ風)

// TapPos(new Vector2(x/Screen.width,y/Screen.height));

static public void TapPos(Vector2 tapPos)
{
    atomSourceBgm.SetAisac("y",tapPos.y);
    atomSourceBgm.SetAisac("x",tapPos.x);
}

AISACを2つ使って音を面(2軸)で操作する。AISACは一つのキューで最大8個まで別のコントロールを持たせる事ができる。


■MIDIノートNoから音程を設定

static public void SetMidiNote(float note)
{
    atomSourceSe.pitch = (note-69)*100; // cent(100で半音,ベースノート A4=69)
}

セント値への変換

■MIDIベロシティから音量を設定

static public void VelocityToVoluem(float velocity)
{
    atomSourceSe.volume = velocity/127f;
}

■周波数からピッチ(MIDIノート)の変換

static public float Ftom(float freq)
{
    return (69f + (1f/.057762265f) * Mathf.Log(freq/440f));
}

ピッチ(MIDIノート)から周波数の変換

static public float Mtof(float note)
{
    return (440f * Mathf.Exp(.057762265f * (note - 69f)));
}

■ピッチから再生速度へ変換

static public float PitchToSpeed(float pitch)
{
    return Mathf.Pow(2,pitch/12.0f);
}

Unityの標準再生などの再生速度指定系でピッチを指定したい場合に使います。ADX2LEでは再生速度指定AISACなどで使うかも。


■iOSなどバックグラウンドになった時にBGMを一時停止/復帰する

void OnApplicationPause(bool pause)
{
    atomSourceBgm.Pause(pause);
}

 iOSなどスプリングボードへ移動する瞬間などの若干のフェードアウトしている間も音は再生されています。これを使うことでほんの少し抑制できます。


■キューブをクリックすると再生/停止をする
- CubeにCriAtomSourceをつけて、cri/unity/samples/criatom/script/Unity3Project/ScriptSample01_ClickToPlay/Assets/Scripts/PlayAndStopSoundOnClick.csを使う。 

    void Update () {
        if (Input.GetMouseButtonDown(0)){
            Ray clkRay = Camera.main.ScreenPointToRay(Input.mousePosition);
            RaycastHit rh;
            // Collision Dectection

            if (Physics.Raycast(clkRay, out rh, 20)) {
                GameObject target = rh.collider.gameObject;
                if (target == this.gameObject) {

                    // Play Cue
                    CriAtomSource atom_src = target.GetComponent();
                    if (atom_src != null) {
                        CriAtomSource.Status status = atom_src.status;
                        if ((status == CriAtomSource.Status.Stop) || (status == CriAtomSource.Status.PlayEnd)) {
                            atom_src.Play();
                        } else {
                            atom_src.Stop();
                        }
                    }
                }
            }
        }
    }

 


■AtomSourceからCriAtomExPlayerを得る(CriAtomExPlayerを呼び出す改良
Plugins/CriWare/CriWare/CriAtomSource.csに以下の行を追加

    public CriAtomExPlayer Player
    {
        get {
            return player;   
        }
    }

CriAtomExPlayerはpitchの変更やtimeの設定など低レベルな隠されたリアルタイム処理を使用する場合に取得します。

■シークして再生(シーク再生)

atomSourceSe.Player.SetStartTime((long)settime);   
atomSourceSe.Stop();
atomSourceSe.Play(cueNo);  

CriAtomExPlayerのSetStartTimeを呼び出すため、CriAtomExPlayerを呼び出す改良を施しておいて下さい。SetStartTimeには開始msecを指定します。次回再生時に指定時刻から再生します。

再生中の音をピッチベンドする

CriAtomExPlayback playback;
void Playback(int cueNo)
{
  playback = atomSourceSe.Play(cueNo);
}
void PitchBend(float pitch){
  atomSourceSe.Player.SetPitch(pitch);   
  atomSourceSe.Player.Update(playback);
}

CriAtomExPlayerのSetPitchを呼び出すため、CriAtomExPlayerを呼び出す改良を施しておいて下さい。SetPitchにはcent値(100で半音、1200で1オクターブ)を指定します。
playbackを取得して、Updateしたタイミングで再生中の音に反映します。

 

 ■ADX2LEはApplication.temporaryCachePath等に保存してあるオーディオファイルを再生する・・・的な事は出来ますか?

Assets以下のフォルダにあるACBをロードして、再生するサンプルの動画作ってみました。
ここでは、今日のワークショップのとは無関係なゲームジャムのELISEのacbを読み込んで再生しています。http://www.youtube.com/watch?v=DyhujH43ozI&feature=youtu.be

 

 

 

#comment()





 

タグ:

+ タグ編集
  • タグ:

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約 が適用されます。

最終更新:2013年04月19日 04:19