ADX2でフェードインフェードアウト

「ADX2でフェードインフェードアウト」の編集履歴(バックアップ)一覧に戻る

ADX2でフェードインフェードアウト - (2018/06/29 (金) 10:45:32) のソース

ADX2(LE)でフェードインフェードアウトの方法
いくつか紹介
*目次
#contents()

* Envelopeで行う
** データで
- Craftでタイムラインから曲などのwaveformを選択してFX2タブかエンベロープのアタック、リリースを変更する。
- Craftでキューシートを選択してリスト表示した項目からエンベーロープのアタック、リリースを変更する。

この方法は、ローテクですが、効果は大きい。リリースを少しだけ長めにするだけで、「プツッ」と切れない。

ただし長過ぎるリリースをつけると、なかなか音が止まらなかったりして、発音数を多くとってしまったり、
オーバーラップが多くて音が重なって割れたりなど注意。短めなら問題ない。

** プログラムで
- SetEnvelopeAttackTime
- SetEnvelopeReleaseTime
プログラムから操作する場合、キューの中のすべてのウェーブフォーム(ボイス)のエンベロープが上書きされます。
以後同一のプレーヤで再生するキューもすべて上書き状態です。
プレーヤに対して、リセットすれば初期状態(データのエンベロープ値参照)に戻ります。
少し強引なやり方ですが、キューの中身が1波形に限っている時は有用です。

* AISACを使う
トラックにAISACを追加してボリュームカーブを書いて、プログラムからはAISACを操作する。
AISACは非常に強力な機能ですが、こういったシンプルな事にも使えます。
他のシステムで言うとMultiFunctionやRPCのようなものに近いです。

トラックのボリュームを直接変更できれば...と考えるかもしれません。
実はADX2ではトラックがあるかどうかすら、隠蔽されてしまいます。
エディット時にはトラックがあっても、実際のキューが必ずしもトラックを持っているとは限りません。
(トラックのパラメータはビルド時に焼き込まれているかもしれません)

* フェーダーを使う
** プログラムで
- AttachFader、DetachFader、SetFadeInTime、SetFadeOutTimeを使う。
Fader機能を使うと、プレーヤーは次の音が再生されるたびにクロスフェードをします。
(ただし停止時はフェードアウトはしないので、無音を鳴らすとか工夫が必要。

あくまで連続再生時のクロスフェードをサポートするフェーダーです。)
ホールド時間(間をおく・・・どちらかというとWaitかな?)なども指定できるので、クロスしないフェードもできそうです。

playbackIdで停止するとフェードアウトします。
PlayerにStopを呼ぶと即時停止します。(カットアウト)

こちらは、キューの中身が複雑であっても利用できます。(ボイスが多用された複雑なキューなど)


* 音量のなめらかな変化
SetVolumeなどで音量を変更するとき、
1.0から0.0へがつっと下げる場合におこる現象として、「プツッ」という音が鳴る場合があります。

ADX2の処理では次のVolume値はなめらかに変化している様子で、この「プツッ」というノイズは発生しない様子です。

最小のサンプルバッファ分の補間が行われている。
もし「プツプツ」とした音が演出として欲しい場合は、サンプルとして用意するとノイズの音が作れるはず。

しかし、あまりに急激な変化には対応しきれません。また、ゲームエンジンなど更新フレーム間隔が音の変化に影響(階段状に変化するのがわかってしまう場合など)があります。


* ダッキングで自動化
REACTでボリュームパラメータをカテゴリ間で変化させる事で、他カテゴリの発音に応じ、自動でフェード効果が発生させられます。
あらかじめ、REACT元のカテゴリ、REACT先のカテゴリを決めておく必要があります。
おおまかなカテゴリという単位で、音をグループ化しておく必要がありますが(たいていやっているはず)グループ間の音量制御を自動化する時に手頃にあつかえます。

* アクションで自動化(ADX2 PRO)
アクショントラックに、キューまたはトラックのボリューム変更と変化時間を与えるイベントを置く事で、キューの再生で他のキューのフェードを行う事ができます。
サンプルが無いのでそのうち用意する予定。(CRI Atom Craft V1では開けない・・・)
アクショントラックでは、先のキューまたは先のキューの任意のトラックを指定する必要があります。

アクションを持つキューの利点は、サウンドデザイナ側でキュー同士の動的な変化を作れる事で、
プログラマやスクリプトからの呼び出しは、キューのスタートだけで行えるようになる点です。(昨今のゲームエンジンはこっちの方がやりやすいかも)
どのようにふるまうかまでサウンドデザインできるので、より細かい制御が可能となります。

REACTを使わずにカテゴリ制御が行える予定です。