ADX2情報

「ADX2情報」の編集履歴(バックアップ)一覧に戻る

ADX2情報 - (2013/04/17 (水) 23:40:51) の編集履歴(バックアップ)


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

■効果音を作りたい

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

■初期化手順

CRIメニューから
Create CRIWARE Libraly Initializer初期化オブジェクトをシーン追加
Create CRIWARE Error Handlerエラーハンドラをシーン追加
Open CRI Atom Window ...

から
Select Assets Rootで[Atom Craftの出力したAssetsフォルダ]を指定
Update Assets of "CRI Atom Craft"で更新
④Unityを一度バックグラウンドに(デスクトップ表示など)して戻し、
CRI Atomウィンドウをクリック

 

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

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

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

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

■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コントロール名指定

 ■カテゴリボリューム変更

CriAtom.SetCategoryVolume("BGM",bgmVolume);

 

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

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

 

■再生時刻の取得

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

 

■再生状態の取得

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 ();

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

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","");
 }

■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);
}

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

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)
}

 ■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);
}

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

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

 

■キューブをクリックすると再生/停止をする
- 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<CriAtomSource>();
                    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のSetStartTimeを呼び出すため、CriAtomExPlayerを呼び出す改良を施しておいて下さい。SetPitchにはcent値(100で半音、1200で1オクターブ)を指定します。