## TimeStretch

`TimeStretch` (clip, float "tempo", float "rate",float "pitch", int "sequence", int "seekwindow",int "overlap", bool "quickseek", int "aa")

`TimeStretch` は、音のテンポ(tempo)*1、ピッチ(pitch)*2、再生レート(rate)の各パラメータを、それぞれ独立して変更することを可能にします。すなわち:

- オリジナルのピッチを維持しながら、音のテンポ(tempo)を速くしたり、遅くしたりすることができます。
- オリジナルのテンポを維持しながら、音のピッチ(pitch)を上げたり、下げたりすることができます。
- テンポとピッチの両方に同時に影響する再生レートを変更することができます。
- テンポ/ピッチ/レートのあらゆる組み合わせを選択することができます。

パラメータ

速度に関するパラメータはパーセンテージで、デフォルトは 100 です。tempo が 200 なら 2 倍の速度で、50 なら半分の速度で再生されます。rate の調整は、AssumeSampleRate や ResampleAudio を使用するのと同等です。

タイムストレッチ*3アルゴリズムは、一部のアプリケーション向けに音質を最適化するために調整することが可能ないくつかのパラメータを持っています。ポップミュージックまたはロックミュージックの処理において主観的な最高の音質を得るために、現在のデフォルトのパラメータは、IF-THEN 形式*4の分析の繰り返し（すなわち「試行錯誤」）によって選択されています。しかし、異なる種類の音を処理するアプリケーションでは、デフォルトのパラメータは最適とは言えない結果をもたらすかもしれません。

タイムストレッチアルゴリズムのデフォルトのパラメータ値は、以下のとおりです:

>     Sequence     82
>     SeekWindow   28
>     Overlap      12

これらのパラメータは、次のようにタイムストレッチアルゴリズムに影響します:

- Sequence: オリジナルの音がタイムストレッチアルゴリズムでどのようにチョップされるかを決定する、単一の処理シークエンスの長さ（ミリ秒単位）です。この値が大きいほど、処理で使用されるシークエンスが少なくなります。原理上は、値が大きいほど、テンポを遅くするときは音が良くなり、テンポを速くするときは悪くなります。逆に値が小さい場合も同様です。
- SeekWindow: シーク窓長（ミリ秒単位）は、最良のオーバーラップ位置を検索するアルゴリズムのためのものです。これは、音のシークエンスがリンクし直されるときに、そのアルゴリズムが最適なミキシング位置を見つけるために使用できるサンプル「窓」の幅から決定します。
  この窓の設定が大きいほど、良いミキシング位置が見つかる可能性が高くなります。しかし同時に、近傍のシークエンスがより不規則な間隔で選択されるため、大きな値は「ドリフトする*5」音声ノイズを引き起こすかもしれません。一定の周波数があちこちにドリフトしていたように聞こえる騒がしいノイズがある場合は、この設定を下げてみてください。
- Overlap: オーバーラップの長さ（ミリ秒単位）。連続した音声ストリームを再構成するために音のシークエンスが再結合されるとき、このパラメータは連続したシークエンスの両端をどれだけオーバーラップさせるかを定義します。
  これは、それほど重要なパラメータではありません。もし Sequence の設定を大きく下げたら、この値を小さくしてみるといいかもしれません。
- QuickSeek: タイムストレッチルーチンには「クイック」モードがあり、これはアルゴリズムをかなりスピードアップさせますが、音質を下げるかもしれません。
- aa: アンチエイリアスフィルタがレート変換に使用するタップ数を制御します。このフィルタを無効化するには 0 に設定してください。値は、4 の倍数でなければなりません。

下の表は、パラメータが異なるアプリケーションに対してどのように調節されるかを要約したものです:

パラメータ名 | デフォルト値の大きさ | 大きい値の影響 | 小さい値の影響 | ミュージック | スピーチ | CPU 負荷への影響
    Sequence
| デフォルト値は比較的大きく、音楽のテンポを遅くするために選ばれている。 | 通常、大きい値はテンポを遅くするには良い。値を大きくすると、テンポを遅くする際に「エコー」ノイズを減速する。 | 小さい値はテンポを速くするのに良いかもしれません。値を小さくすると、テンポを遅くする際に「エコー」ノイズを加速する。 | 通常はデフォルト値が良い。 | デフォルトより小さい値が良いかもしれない。 | パラメータ値の増加は計算負荷を減少させる。
    SeekWindow
| デフォルト値は比較的大きく、音楽のテンポを遅くするために選ばれている。 | 大きい値は良いミキシング位置を見つけることを容易にするが、「ドリフト」ノイズを引き起こすかもしれない。 | 小さい値は良いミキシング位置を見つける可能性を減らすが、「ドリフト」ノイズを減少させる。 | 「ドリフト」ノイズが騒がしくない限り、通常はデフォルト値が良い。 | 通常はデフォルト値が良い。 | パラメータ値の増加は計算負荷を増大させる。
    Overlap
| デフォルト値は比較的大きく、上記のパラメータに合わせるために選ばれている。 |  | 「Sequence ミリ秒」の設定を引き下げた場合は、小さめの値を試しても良いかもしれない。 |  |  | パラメータ値の増加は計算負荷を増大させる。

注

これは、サンプルアキュレートなプラグインではありません。使用すれば、わずかな誤差が発生するかもしれません。浮動小数点数値を扱っているため、とりわけ大きなサンプルに関して、丸め誤差が生じるかもしれません。しかし一般的には、映画の長さのサンプルに対し、誤差は数十ミリ秒を超えることはありません。

SoundTouch は、浮動小数点サンプルモードで使用されます。

使用例:

    TimeStretch(pitch = 200)

オリジナルのサンプルの長さを維持しながら、pitch を 1 オクターブ上げます。

    TimeStretch(pitch = 100.0*pow(2.0, 1.0/12.0))

オリジナルのサンプルの長さを維持しながら、pitch を 1 セミトーン*6上げます。

    TimeStretch(tempo = (100.0*25.0*1001.0)/24000.0)

ピッチを変更せずに、映画のスピードから PAL 方式のスピードへ tempo を変更します。

クレジット:

この関数は以下のライブラリを使用しています:

SoundTouch library Copyright (c) Olli Parviainen 2002-2006

http://www.iki.fi/oparviai/soundtouch
http://www.surina.net/soundtouch

更新履歴:

v2.55 | 初版
v2.57 | soundtouch パラメータを公開

`原文 Date: 2006/04/08 10:43:32`
`日本語訳 $Date: 2008/07/19 03:50:15 $`

- 訳者註:
  - *1 参考: テンポ(DTM(デスクトップミュージック)用語集)
  - *2 参考: ピッチ(DTM(デスクトップミュージック)用語集), ピッチとは 用語説明
  - *3 参考: 海苔のDTM生活 ＞ 用語集 ＞ 索引 - た ＞ タイムストレッチとは
  - *4 「IF ～ THEN ….」から、「もし ～ なら … する（である）」という形式のルールのことを指していると考えられます。
  - *5 周波数のズレ（ふらつき）を意味する言葉に「frequency drift（周波数ドリフト）」があります。
  - *6 半音。参考: せ - よいこのぎたぁ用語辞典