3.3 Растягивание сэмплов

# Растягиваем сэмплы

Теперь, когда мы умеем играть на разнообразных синтах и воспроизводить всевозможные сэмплы, пришло время научиться управлять ими обоими, чтобы музыка получалась ещё более уникальной и интересной. Вначале, давайте рассмотрим возможность *растягивать* и *сжимать* сэмплы.

## Представление сэмпла

Сэмплы - это предварительно записанные звуки в виде чисел, описывающих, как колеблется мембрана динамика, чтобы воспроизвести звук. Мембрана движется внутрь и наружу, так что числами всего лишь нужно задать насколько втянутой или выпуклой она должна быть в каждый момент времени. Для правдоподобного воспроизведения звука, обычно сэмпл хранит много тысяч чисел для каждой секунды! Sonic Pi берет список этих чисел и передаёт их с нужной скоростью, чтобы двигать мембраной динамика наружу и внутрь так, чтобы получился нужный звук. Но можно неплохо поразвлечься, меняя звук за счет изменения скорости, с которой числа идут в динамик.

## Меняем скорость

Попробуем проверить это на одном из природных звуков: `:ambi_choir`. Чтобы воспроизвести его с обычной скоростью, можно передавать команде `sample` настройку `rate:`:

```
sample :ambi_choir, rate: 1
```

Этот пример воспроизводит сэмпл с нормальной скоростью (1). Пока что ничего особенного. Однако, мы можем свободно изменить это число на что-то другое. Как насчет `0.5`:

```
sample :ambi_choir, rate: 0.5
```

Ого! Это что такое происходит? Ну, две вещи. Во-первых - сэмпл воспроизводится в два раза дольше. Во-вторых - звук стал ниже на октаву. Давайте разберём это более детально.

## Давайте растянем

Сэмпл, который забавно растягивать и сжимать, - это амен-брейк. С нормальной скоростью мы можем легко себе представить его в составе трека драм-н-бейс:

```
sample :loop_amen
```

Но, задавая скорость, можно переключать и жанры. Попробуй половинное значение, чтобы получить *старый-добрый хип-хоп*:

```
sample :loop_amen, rate: 0.5
```

А если ускориться, то мы попадаем на территорию *джангл*:

```
sample :loop_amen, rate: 1.5
```

А теперь гвоздь программы - проверим, что произойдет, если мы зададим отрицательную скорость:

```
sample :loop_amen, rate: -1
```

Ничего себе! Он стал играть *задом-наперёд*! Попробуйте воспроизвести разные сэмплы на разных скоростях. Попробуйте очень быстрые скорости. Попробуйте несуразно медленные. Узнайте, какие интересные звуки можно создать.

## Простое объяснение скорости сэмпла

Полезная мысленная аналогия сэмплам - пружина. Темп воспроизведения - это как сжатие и растягивание пружины. Если воспроизводить сэмпл со скоростью 2, то вы будете *сжимать пружину* до половины ее нормальной длины. Следовательно, воспроизведение сэмпла займёт половину времени, ведь он стал короче. Если играть сэмпл на половине обычной скорости, то вы *растягиваете пружину* в два раза. Поэтому сэмпл длится в два раза дольше, ведь он стал длиннее. Чем больше вы сдавливаете, тем короче он получается (скорость выше), а чем больше вы растягиваете, тем длиннее он становится (скорость ниже).

Сжатие пружины увеличивает ее плотность (число витков на сантиметр) - это совпадает с тем, почему сэмпл начинает звучать с *высокой частотой*. Растягивание пружины снижает ее плотность, и это похоже на то, как *частота звука понижается*.


## Математика, объясняющая скорость сэмпла

(Эта часть приведена для тех, кому интересны детали. Всем остальным её можно пропустить...)

Как мы видели раньше, представление сэмпла - это очень длинный список чисел, которые описывают движение мембраны динамика во времени. Можно взять эту последовательность чисел и нарисовать по ней график, который будет выглядеть примерно так:

![граф сэмплирования](../../../etc/doc/images/tutorial/sample.png)

Вы могли видеть похожие картинки до этого. Они называются *волновой формой* сэмпла. Это просто числовой график. Обычно подобные формы включают 44100 точек с данными на каждую секунду времени (из-за теоремы сэмплирования Найквиста-Шэннона). Итак, если сэмпл длится две секунды, то форма волны будет состоять из 88200 чисел, которые мы бы передавали динамической головке со скоростью 44100 значения в секунду. Конечно, мы могли бы удвоить темп передачи, тогда воспроизведение бы заняло всего одну секунду. А еще мы могли бы проигрывать его в два раза медленнее, что означало бы 22500 точек в секунду, и весь процесс бы занял четыре секунды.

На длительность сэмпла влияет скорость воспроизведения:

* Удвоение темпа уполовинивает время воспроизведения,
* Сокращение темпа вдвое удваивает время воспроизведения,
* Если задать темп, равный четверти от нормального, то время учетверится,
* Если скорость воспроизведения равна 1/10 от нормальной, то время воспроизведения увеличится в 10 раз.

Мы можем представить это отношение формулой:

```
новая_длительность_сэмпла = (1 / скорость) * длительность_сэмпла 
```

Изменение темпа воспроизведения, к тому же, влияет на высоту сэмпла. Частота формы сигнала и высота звука определяются тем, как часто сигнал движется вверх и вниз. Наш мозг каким-то образом превращает быстрые перемещения мембраны в высокие ноты, а медленные - в низкие. Именно поэтому иногда вы можете видеть вибрации большого басового динамика, когда он издает чрезвыйчайно низкие звуки. На самом деле он перемещается намного медленнее внутрь и наружу, чем динамик, воспроизводящий высокие ноты.

Если взять форму сигнала и сжать ее, то она будет колебаться вверх и вниз большее количество раз за секунду. За счет этого звук получится более высоким. Выходит, что удвоение движений вверх-вниз (колебаний) удваивает частоту. Поэтому *проигрывание сэмпла на удвоенной скорости удваивает его слышимую частоту*. Точно так же *половинная скорость уменьшает частоту вдвое*. Другие значения скорости влияют на частоту соответствующим образом.
