CRIWARE Unity Plugin Manual  Last Updated: 2024-04-24
倍速再生を行う
ADX の「倍速」再生には以下のような、使用用途に合わせた各手法が提供されています。
  • キューのシーケンス速度を早める
  • ピッチを変化させつつ再生速度をあげる
  • ピッチを変化させず再生速度をあげる

キューのシーケンス速度を早める

CriWare.CriAtomExPlayer::SetPlaybackRatio によって、キューに設定されているシーケンスの再生速度をあげます。

波形の発音や各イベントの発行タイミングが早くなりますが、ピッチに変更はありません。
キューに配置されている各イベントの発行タイミングを早回しにしたい場合に活用できます。

ピッチを変化させつつ再生速度をあげる

CriWare.CriAtomExPlayer::SetPitch によって、ピッチを変化させつつ再生速度をあげます。

上記 API はプレーヤーのパラメーターを変更させるだけの API となります。
すでに再生中の音声に対して、パラメーターを適用させたい場合は CriWare.CriAtomExPlayer::Update などでパラメーター更新を行う必要があります。
詳しい注意点については、リファレンスコメントを参照してください。

ピッチを変化させず再生速度をあげる

CriWare.CriAtomExPlayer::SetDspTimeStretchRatio によってピッチを変化させず、もとのピッチを維持したまま再生速度をあげます。

上記 API は、事前にプレーヤーで使用する予定のボイスプールに対してアタッチしておき、
プレーヤーとボイスプール紐付けておく必要があります(※1)

ボイスプールの作成時は次の点にご注意ください。
  • 明示的にボイスプール識別子を与える
  • 再生波形の倍以上のサンプリング周波数を指定する
プレーヤーに対して明示的にボイスプール識別子がセットされていない場合、 CriWareInitializer の初期化時にて作成されたボイスプール(識別子 0 のボイスプール)を使用して発音を行います。
このため、タイムストレッチがアタッチされたボイスプールから必ず発音をさせるには
作成するボイスプールに任意の識別子を与え作成する必要があります。(※2)

このとき、ボイスプールの最大サンプリングレートには再生波形のサンプリング周波数の2倍以上の値を指定する必要があります。(※3)
更に、上記のピッチシフトを併用する場合はピッチシフトによる倍速分も掛けた値を指定してください。

例えば、CriAtomSourceを使用する場合には以下のようなコードとなります。
CriAtomSource criAtomSource = gameObject.AddComponent<CriAtomSource>();
CriAtomExStandardVoicePool pool = new CriAtomExStandardVoicePool(1, 2, 64000 /* ※3 */, true, 2104 /* ※2 */);
pool.AttachDspTimeStretch();
criAtomSource.player.SetVoicePoolIdentifier(pool.identifier) //※1
criAtomSource.player.SetDspTimeStretchRatio(0.5f);