Time Stretchingとは
電子音響音楽やミュージックコンクレート、サンプリングを主体としたヒップホップやテクノを制作する場合、複数のテンポを持つ音響素材を一つの作品内で同時に利用したい場面に出くわすことが多いと思います。
コンピュータの出現以前はターンテーブルの回転数を調節し複数の音源のテンポを合わせる手法がDJ達の間では主流でしたが、このアプローチを使うと音源のピッチ(音の絶対的な高さ)も変化してしまいます。テンポを上げればターンテーブルの回転数が上がるためピッチも高くなり、テンポを下げればピッチも下がってしまいました。
もちろんこの音響的な変化の特性を武器として積極的に利用する場面も少なくありませんが、例えばヴォーカルパートの素材で極端にピッチが上がったり下がったりしすぎた場合、その歌詞の内容やメッセージを聞き取ることが難しくなるという問題点がありました。そのような音響変化を克服する手段がTime Stretchingタイムストレッチです。
タイムストレッチとは音の高さを変化させずに、音源の再生スピードのみをコントロールする技術です。Granular synthesisを応用したもの、Phase vocoder、Time domain shift、Sinusoidal/Spectral Modeling、Pitch scalingなど、その技術を実現するためのアルゴリズムには様々なものがあります。
ableton Live
タイムストレッチングやピッチシフティングの使い勝手を飛躍的に向上させたのはabletonのLiveというソフトです。当初はVSTなどの各種プラグインにも対応しておらず、MIDI機能もなく、オーディオのストレッチに専念していたソフトウェアですが、現在はLogicやCubaseといったDAWにひけをとらないほどシーケンス機能も充実しています。
最初期のLiveはMax/MSPを用いて開発が行われていたこともあって、Maxとの親和性も高く2009年にはMax for Liveという外部拡張がリリースされたことでMaxとLiveは相互に内部データをやり取りできるようになっています。
タイムストレッチのアルゴリズム
今回紹介するアルゴリズムは非常にシンプルなもので、リサンプリングとピッチシフトの組み合せです。
このアルゴリズムは音質には問題がありますが複雑なパッチを書かずとも手軽に利用可能なため用途に応じては有効だと思います。簡単に説明すると、[buffer~]オブジェクトでサウンドファイルを指定しgroove~オブジェクトで任意の再生スピードを決定し再生すると同時に、再生スピードの数値を使って補間するためのピッチシフトの幅を決定します。
上でも説明したとおり、音源は通常再生スピードを早くするとピッチが上がり、遅くすると下がります。具体的にはスピードが2倍になるとピッチは1オクターブ上昇、スピードが半分になるとピッチは1オクターブ下がります。
今回のmax/mspのアルゴリズムでは、この特性を利用し、再生スピードに左右されて変化してしまったピッチを後からピッチシフトによって修正しています。
ピッチシフトは周波数領域での処理が行えるgizmo~オブジェクトを採用しました。ここのオーバラップやFFTサイズ、窓関数の値を調整することでかかり具合が変わるので、音源の音色によってカスタマイズしてください。max/mspではfftin~とfftout~オブジェクトの第二引数としてsquare、triangle、hanning、hamming、blackman、nofftの窓関数の名前を指定することが可能です。
タイムストレッチのデモ映像
Max/MSPパッチのダウンロード
timestretching.pat (for Max4.x)
timestretching.maxpat (for Max5.x)
fftgizmo.pat (pfft用サブパッチ)
max5Runtime(上記のプログラムの実行用フリーソフトウェア for Mac)
max5Runtime(上記のプログラムの実行用フリーソフトウェア for win)
Time Stretching & Pitchshifting参考文献