エンベロープと発音制限

停止時のノイズを避ける

発音制限が行われると、音が「ブツ切れ」になることがあります。
こんな時に、サンプラーなどにあるような、エンベロープのリリースがあると便利です。

ADX2ではボイスレイヤーにADSR相当のボリュームエンベロープの機能があります。
(キューには無いので注意)

これは、音が停止した際に、リリース時間をかけて、音が自動で減衰していく処理などがおこなえます。

音が止まる時の発音数

この音が止まる時の発音数としては

  • ボイスの制限数に達した場合
  • キューの発音リミットに達した場合
  • ボイスリミットグループの制限に達した場合

などが考えられます。

キューの発音リミット数に達した場合でも、ボイスのリリース時の発音は重なりが多い場合、ボイス数が枯渇してしまう場合があります。

つまり、オーバーラップ分の制御も必要になります。

ボイスのリミットと、キューのリミットの関係

ボイスのリミットと、キューのリミットの関係を今一度検討する必要がでてきます。

  • ボイスのリミット = ボイスプールの数、ボイスリミットグループのリミット数
  • キューのリミット = キューのリミット数、キューの所属するカテゴリのキューリミット数

ざっくりと、

キューリミットで、全体の発音数を設定(これ以上ならなくて良いという演出上のアバウトな設定)
ボイスリミットで確実なリソース数の制限(ストリーム数や処理負荷など処理スペック要因でのリミット)

を行います。

設定例

例えば、曲再生などで、少し長めのリリースなどがある場合には、

  • BGMカテゴリのキューリミット数を1(制御として1曲だけ鳴らしたい)
  • ボイスリミット数を2、ストリーム数を2(リリース分含めて)

こうすると、プログラムから再生リクエストがきた時、自動でリリース付きで停止しつつ、次の発音開始が入り、
一時的に2音再生している時に対応しつつ、演出上の発音数を1に抑えることができます。

間違った設定例

ボイスリミットが1で、キューリミットが2といった場合、
ボイスの後着優先で、前の音がブツ切れ(リリースなし)で奪い取られてしまう。