## TimeStretch

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

`TimeStretch` позволяет изменять темп tempo, тональность pitch и скорость воспроизведения rate звука независимо один от другого, т.е.:

- tempo (темп) звука может увеличиваться и уменьшаться при поддержании исходной тональности звука.
- pitch (тональность) звука может увеличиваться и уменьшаться при поддержании неизменного темпа.
- Изменение параметра rate (скорость) воспроизведения приводит к одновременному изменению и темпа и тональности звучания.
- Можно выбрать любые комбинации параметров tempo/pitch/rate.

Параметры:

Параметры скорости задаются в процентах и по умолчанию равны 100. Если tempo задать 200, это приведет к ускоренному вдвое воспроизведению, если же tempo 50, воспроизведение замедлится вдвое. Регулировка параметра rate эквивалентна использованию команд AssumeSampleRate и ResampleAudio.

Алгоритм time-stretch (растяжения во времени) имеет несколько параметров, подбирая которые можно оптимизировать качество звука под определенные приложения. Текущие параметры по умолчанию должны подбираться методом итерационного анализа "если-то" (читай: "методом проб и ошибок") с целью достижения лучшего субъективного качества звучания при обработке поп/рок музыки, но в прикладной обработке звука различного вида установки параметров по умолчанию могут дать не совсем оптимальный результат.

Значения параметров по умолчанию time-stretch алгоритма:

>     Sequence     82
>     SeekWindow   28
>     Overlap      12

Влияние этих параметров таково:

- Sequence: Это длина единичной обрабатываемой последовательности в миллисекундах, которая определяет, как исходный звук нарезается в time-stretch алгоритме. БОльшие значения дают меньшее количество последовательностей при обработке. В принципе бОльшие значения лучше при замедлении темпа звука, и наоборот хуже при увеличении.
- SeekWindow: Длительность окна поиска в миллисекундах для алгоритма, который ищет лучшее возможное положение мест перекрытия. Параметр определяет начальную ширину окна выборки, используемого алгоритмом для нахождения оптимального положения мест перекрытия при объединении последовательностей.
  Чем больше значение длительности окна, тем выше возможность нахождения лучшего положения мест перекрытия, но в тоже время больше и вероятность артефактов "дрейфа" (плавания) звука из-за отбора соседних последовательностей более неровными интервалами. Если эти артефакты раздражают - звуки постоянной частоты как бы дрейфуют относительно своего значения, попробуйте уменьшить это значение.
- Overlap: Длительность перекрытия в миллисекундах. Когда звуковые последовательности вновь смешиваются в непрерывный поток звука, этот параметр определяет, насколько будут перекрываться следующие друг за другом последовательности.
  Это не слишком критичный параметр. Если вы уменьшаете значение Sequence от большей величины, вы можете попробовать меньшие значения Overlap.
- QuickSeek: Процедура time-stretch имеет быстрый режим, который существенно увеличивает скорость работы алгоритма, но приводит к ухудшению качества звучания.
- aa: Управляет количеством отводов (tap) противопомехового (Anti-alias) фильтра, используемого при изменении скорости следования отсчетов. Устанавливается в 0 для запрета фильтра. Значение должно быть кратным 4.

Следующая таблица подводит итог в подборе параметров в случае разных приложений:

Имя параметра | Значение по умолчанию | Влияние максимального значения... | Влияние минимального значения... | Музыка | Речь | Влияние на загрузку процессора
    Sequence
| Значение по умолчанию относительно большое, выбрано для замедления темпа музыки | Большее значение обычно лучше для замедления темпа. Увеличение значения притормаживает "эхо"-артефакты при замедлении темпа. | Меньшие значения должны быть лучше при увеличении темпа. Уменьшение значения убыстряет "эхо"-артефакты при увеличении темпа. | Значение по умолчанию обычно подходит | Меньшее относительно значения по умолчанию может быть лучше | Увеличение параметра уменьшает вычислительную сложность
    SeekWindow
| Значение по умолчанию относительно большое, выбрано для замедления темпа музыки | С большими значениями лучше находятся хорошие места перекрытия, но могут вызывать артефакты дрейфа | Меньшие значения снижают возможность находить хорошие места перекрытия, но уменьшают артефакты дрейфа. | Значение по умолчанию обычно подходит, если не беспокоят артефакты дрейфа. | Значение по умолчанию обычно подходит | Увеличение параметра увеличивает вычислительную сложность
    Overlap
| Значение по умолчанию относительно большое, выбрано пригодным для вышеприведенных параметров. |  | Если Вы уменьшите "sequence ms", то можете попробовать меньшее значение. |  |  | Увеличение параметра увеличивает вычислительную сложность

Примечание:

Плагин НЕ является вполне точным в отношении аудио-выборки. При его использовании возможны некоторые неточности. Учитывая использование чисел с дробной частью (float) возможно проявление ошибок округления, особенно на длинных аудио-выборках. В целом, однако, неточность не должна превышать 10-ов миллисекунд на выборках длинной в фильм.

SoundTouch используется в режиме выборок с дробной частью.

Примеры:

    TimeStretch(pitch = 200)

Это приведет к повышению тональности звука pitch на одну октаву при неизменной длине исходной выборки.

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

Это приведет к повышению тональности звука pitch на один полу-тон при неизменной длине исходной выборки.

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

Это приведет к изменению темпа tempo воспроизведения звука для преобразования из кинофильма в PAL без изменения тональности.

Благодарности:

Эта функция использует:

SoundTouch library Copyright (c) Olli Parviainen 2002-2006

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

История изменений:

v2.55 | Исходная реализация
v2.57 | Задокументированы ряд параметров soundtouch

`$English Date: 2006/04/08 10:43:32 $
Русский перевод 15.05.2005-12.04.2006 Turyst04 Turyst04@nm.ru`