AとBの曲をコントロールする12の方法

[難易度:低] AかBかCかわからないが、再生している時、Bが再生されたら再生中のものをフェードアウトしてほしい場合

  • Aにエンベロープでリリースを設定する。
  • AとBを同じカテゴリにして、カテゴリリミットを1音にする。
    プログラムは任意のタイミングでA,Bをリクエストするだけになる。

[難易度:低] Aが再生している時、Bが再生されたら、一時的にAを音量を下げて、Bが終わったらAの音量が上がってほしい場合

  • REACTを使う。
  • AとBを別のカテゴリにして、変化カテゴリAとトリガーカテゴリBを設定。
    サンプルプログラムの場所:/cri/pc/samples/criatomex/category_with_react
    プログラムは任意のタイミングでA,Bをリクエストするだけになる。

[難易度:低] AかBかCかわからないが、再生中の時だけフェード処理をしてほしい場合

  • プログラムでフェーダーをプレーヤーにアタッチする。
    サンプルプログラムの場所:/cri/pc/samples/criatomex/crossfade_playback
    プログラムは任意のタイミングで設定したプレーヤーでA,B,Cをリクエストするだけになる。

[難易度:中] AとBがクロスフェードの関係にある場合

  • AISACを使う。
  • AとBを同じキューの別トラックに用意し、それぞれ同じAISACでコントロール可能なボリュームカーブを書く。
    サンプルプログラムの場所:/cri/pc/samples/criatomex/control_aisac
    サンプルプログラムの場所:/cri/pc/samples/criatomex/tween
    プログラムではAISACをコントロールすることで、切り替えが可能。

[難易度:中] AとBとCがクロスフェードの関係にある、且つ、曲の長さが同じで、同じ再生場所にクロスフェードしてほしい場合。

  • セレクタによるトラック遷移を使う。
  • AとBとCを同じキューの別トラックに用意する。(A,B,Cは同じ長さ)
    サンプルプログラムの場所:/cri/pc/samples/criatomex/playback_track_transition_by_selector
    プログラムではセレクタラベルを変更するだけで切り替えが可能。

[難易度:中] AとBとCがクロスフェードの関係にある場合、且つ、曲の長さが異なっていて、頭出しで良い場合。

  • ブロックを使う。
  • キューにABCブロックを用意する。
    サンプルプログラムの場所:/cri/pc/samples/criatomex/playback_block
    プログラムではブロックのIDを変更するだけで切り替えが可能。

[難易度:中] Aが再生しているときBを再生したらAをフェードアウトし、Bを止めたらAを再生する場合

  • アクショントラックでB再生時のアクションでAをのボリュームを下げる。
  • Bを止めるアクションで、Aを再生する。
    プログラムはそれぞれのアクションキューをリクエストする。

[難易度:中] AとBとCがビートに同期して切り替わって欲しい場合

  • セレクタによるトラック遷移を使う。
  • AとBとCを同じキューの別トラックに用意する。(A,B,Cは同じ長さ)
  • ビート同期情報を追加する。
    プログラムではセレクタラベルを変更するだけで切り替えが可能。

[難易度:高] AとBとCが別のキューだけど、ビートに同期して切り替わって欲しい場合

  • 各キューにビート同期情報を設定する。
  • 各キューを再生するアクションキューを用意する。
    プログラムでは同じプレーヤーでこれらのアクションキューをリクエストするだけで、ビートに同期して切り替わる。

[難易度:低] Aが再生終わったらB、Bが再生終わったらCと再生する場合

  • キューの再生モードをPlayListに変更する。
  • ABCをトラックに設定する。
    プログラムではキューを再生するだけで、順番に切り替わって再生される。

[難易度:低] AかBかCか順番が固定ではないが、連続して再生する場合

  • プログラムでシームレス連結再生をする。
    サンプルプログラムの場所:/cri/pc/samples/criatomex/seamless_palyback

[難易度:低] AかBかCかわからないがそれぞれ個別にボリュームを変えて再生したい場合

  • ABCをカテゴリをそれぞれ別に設定する。
    サンプルプログラムの場所:/cri/pc/samples/criatomex/category
    プログラムではカテゴリに対してボリュームを変更する。

[余談]実際のゲームでの音楽の再生シチュエーションは12のパターンですら網羅できるものではなくもっと多くの組み合わせが存在します。
これらは、プログラムで行う場合やデータ側で制御する場合、両方で使う場合といろいろ考えられます。
より複雑な制御についての考える時に、既存の技術でできないものに対してのみプログラムで行い、
できものはなるべくデータ側で済ませてしまうのが良いかもしれません。