WaveSoundBuffer.PhaseVocoder¶
WaveSoundBuffer.PhaseVocoder クラスは、このインスタンスを WaveSoundBuffer.filters に登録して使用するためのフィルタで、Phase Vocoder (位相ボコーダ) の機能を提供します。
Phase Vocoder では、再生速度を保ったままでの音程の変更 (ピッチ・シフタ) や、音程を保ったままでの再生速度の変更 (タイム・シフタ) を行うことができます。
メンバー一覧¶
コンストラクタ¶
プロパティ¶
PhaseVocoder¶
コンストラクタ
解説
PhaseVocoder オブジェクトの構築
WaveSoundBuffer.PhaseVocoder クラスのオブジェクトを構築します。
作成したインスタンスは WaveSoundBuffer.filters で WaveSoundBuffer の インスタンスに登録してください。
interface¶
プロパティ \ アクセス: r/w
解説
インターフェースオブジェクトを取得
内部的に使用されます。スクリプトからは使用しないでください。
time¶
プロパティ \ アクセス: r/w
解説
時間軸方向のスケール
時間軸方向のスケールを表します。値を設定することもできます。
指定可能な数値は 0 を超える実数です。ただし、あまりに小さい数値はCPU負荷が高くなり、最悪の場合は再生ができない場合があります。また、1.95を超えたあたりから音質が悪くなり、overlapを大きくしても音質を改善できない場合があります(内部アルゴリズムの特性に起因しています)。
1.0 を指定すると 時間軸方向のスケールは変わりません(再生速度は変わりません)。
たとえば 1.5 を指定すると、時間軸方向のスケールが1.5倍になり、遅く再生されます (再生に1.5倍の時間がかかるようになります)。
たとえば 0.5 を指定すると、時間軸方向のスケールが0.5倍になり、速く再生されます (倍速で再生されます)。 time プロパティも pitch プロパティも 1 の場合でも Phase Vocoder フィルタは動作し、音質は多少劣化し、CPU 時間も使用します。両方とも 1 のまま使うのであれば、フィルタ配列からこのフィルタをはずしておいたほうがよいでしょう。
このプロパティへの変更はリアルタイムに反映されますが、バッファリングの関係で、実際にそれが再生されるまでに2秒程度の時間がかかります。また、切り替わり時にノイズが乗る事があります。
pitch¶
プロパティ \ アクセス: r/w
解説
周波数軸方向のスケール
周波数軸方向のスケールを表します。値を設定することもできます。
指定可能な数値は 0.0 を超える数値です。
1.0 を指定すると 周波数軸方向のスケールは変わりません(音程は変わりません)。
たとえば 1.0594630943593 を指定すると、半音分、音程があがります。
たとえば 0.9438743126817 を指定すると、半音分、音程が下がります。
time プロパティも pitch プロパティも 1 の場合でも Phase Vocoder フィルタは動作し、音質は多少劣化し、CPU 時間も使用します。両方とも 1 のまま使うのであれば、フィルタ配列からこのフィルタをはずしておいたほうがよいでしょう。
このプロパティへの変更はリアルタイムに反映されますが、バッファリングの関係で、実際にそれが再生されるまでに2秒程度の時間がかかります。
window¶
プロパティ \ アクセス: r/w
解説
ウィンドウサイズ
PhaseVocoder内部で使用している FFT (高速フーリエ変換) のウィンドウサイズ(フレームサイズ)を表します。 64~32768の間の2の累乗の数値を指定してください。デフォルトは4096です。
この数値を大きくすると、周波数軸方向の分解能は高くなります(音程が狂いにくくなります)が、時間軸方向の分解能が低くなります(音のアタックがにぶくなります)。
値を大きくするとCPUをより使用するようになります。音質を落とさずにすむ、最低の値を探してください。
44.1KHzの音声ではウィンドウサイズ=256ぐらいがよいでしょう。楽曲ではウィンドウサイズ=4096ぐらいが良いでしょう。
このプロパティへの変更は、WaveSoundBuffer.openメソッドが実行されたときに反映されます。
overlap¶
プロパティ \ アクセス: r/w
解説
オーバーラップカウント
オーバーラップカウント (オーバーサンプリング係数) を表します。
0か2~32の間の2の累乗の数値を指定してください。デフォルトは0です。
0を指定すると、現在のtimeプロパティの値に従って、適切な値が設定されます。
この数値を大きくすると、時間軸方向の分解能が高くなります。とくに再生速度を遅くする場合は多めの数値をしていすると良いでしょう。
値を大きくするとCPUをより使用するようになります。
このプロパティへの変更はリアルタイムに反映されますが、バッファリングの関係で、実際にそれが再生されるまでに2秒程度の時間がかかります。また、切り替わり時にノイズが乗る事があります。