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

Когда люди открывают для себя Sonic Pi, первое, что они узнают, это то, как проиграть предварительно записанные звуки с помощью функции `sample`. Например, вы можете сыграть индустриальную барабанную петлю, услышать звук хора или даже прослушать виниловой скретч через одну единственную строку кода. Однако многие люди не понимают, что могут изменить скорость воспроизведения сэмпла для получения некоторых мощных эффектов и совершенно нового уровня контроля над записанными звуками. Итак, запустите Sonic Pi и давайте начнем растягивать некоторые сэмплы!

## Замедление сэмплов

Чтобы изменить скорость воспроизведения сэмпла, нам нужно использовать параметр `rate:`:

    sample :guit_em9, rate: 1

Если мы укажем `rate:` значение `1`, то сэмпл воспроизведется с нормальной скоростью. Если мы хотим воспроизвести его с половиной начальной скорости, мы просто используем для `rate:` значение `0.5`:

    sample :guit_em9, rate: 0.5

Обратите внимание, что это производит два эффекта на аудио. Во-первых, сэмпл звучит ниже по высоте, а во-вторых, для воспроизведения требуется вдвое больше времени. Мы можем выбрать все более низкие значения, двигаясь в сторону `0`. Так`rate:` в значении ` 0.25`- это четверть скорости,` 0.1` - это десятая часть скорости и т. д. Попробуйте поиграть с некоторыми низкими значениями и посмотрите, как вы можете превратить звук в низкий грохот.

## Ускорение сэмплов

Помимо удлинения звука и его тональности посредством низких значений `rate`, мы можем использовать высокие значения, чтобы сделать звук короче и выше. Давайте на этот раз поиграем с барабанной петлей. Сначала послушайте, как это звучит со скоростью по умолчанию `1`:

    sample :loop_amen, rate: 1

Теперь давайте немного ускорим:

    sample :loop_amen, rate: 1.5

Ха! Мы просто сменили музыкальные жанры из техно-стиля в джангл. Обратите внимание, что высота каждого удара барабана стала выше, а также как ускоряется и весь ритм. Теперь попробуйте еще более высокие значения и посмотрите, насколько высокими и короткими вы можете сделать барабанную петлю. Например, если вы используете значение `100`, барабанная петля превращается в щелчок!

## Обратная передача

Теперь, я уверен, что многие из вас думают об одном и том же прямо сейчас … «что если вы используете отрицательное значение для `rate:`?». Отличный вопрос! Давайте подумаем об этом на мгновение. Если наш параметр `rate:` обозначает скорость, с которой воспроизводится сэмпл, где `1` - нормальная скорость,`2` - двойная скорость, `0.5` - половинная скорость,`-1` должно означать задом наперед! Давайте попробуем это на малом барабане. Сначала воспроизведите его с нормальной скоростью:

    sample :elec_filt_snare, rate: 1

Теперь проиграем это в обратном направлении:

    sample :elec_filt_snare, rate: -1

Конечно, вы можете играть в обратном направлении в два раза быстрее со значением `-2` или назад в половину скорости со значением `-0.5`. Теперь поиграйте с разными отрицательными значениями и получайте удовольствие. Это особенно забавно с сэмплом `: misc_burp`!

## Сэмпл, его скорость воспроизведения и высота тона

Одним из эффектов изменения скорости на сэмплах является то, что более высокие значения приводят к тому, что сэмплы звучат выше по высоте, а более медленные скорости приводят к тому, что сэмплы звучат ниже по высоте. Другая ситуация, в которой вы, возможно, слышали этот эффект в повседневной жизни, - это когда вы едете на велосипеде или проезжаете мимо громкого пешеходного перехода - когда вы направляетесь к источнику звука, высота звука выше, чем при удалении от звука - это так называемый эффект Доплера. Почему это так?

Давайте рассмотрим простой звуковой сигнал, который представлен синусоидальной волной. Если мы используем осциллограф для построения звукового сигнала, мы увидим что-то вроде рисунка А. Если мы построим звуковой сигнал на октаву выше, мы увидим рисунок Б, а октава ниже будет выглядеть как на рисунке С. Обратите внимание, что волны более высокого уровня ноты более компактны, а волны нижних нот более длинные.

Сэмпл аналогового сигнала - это не что иное, как множество чисел (x, y, координаты), которые при перенесении на график воссоздают с той или иной точностью исходную звуковую волну. Смотрите рисунок D, где каждая точка представляет координату. Чтобы преобразовать координаты обратно в звук, компьютер соединяет каждое значение x с со соответствующим значением y и отправляет в динамики. Хитрость в том, что скорость, с которой компьютер работает с числами х, не обязательно должна совпадать со скоростью, с которой они были записаны. Другими словами, пространство (представляющее количество времени) между каждой точкой координат может быть растянуто или сжато. Таким образом, если компьютер будет проходить через значения x быстрее, чем исходная скорость, это приведет к сжатию координат ближе друг к другу, что приведет к более высокому тону сигнала. Также это сделает звуковой сигнал короче, так как мы будем проходить все координаты быстрее. Это показано на рисунке E.

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

## Модуляция тональности звука

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

    sample :bass_trance_c, rate: 1
    sample :bass_trance_c, rate: 2
    sample :bass_trance_c, rate: 0.5

Однако что, если мы просто хотим изменить скорость так, чтобы высота звука повышалась на один полутон (одна клавиша на фортепиано)? Sonic Pi делает это очень легко с помощью параметра `rpitch:`:

    sample :bass_trance_c
    sample :bass_trance_c, rpitch: 3
    sample :bass_trance_c, rpitch: 7

Если вы посмотрите в журнал, то заметите, что `rpitch:` в значении `3` фактически соответствует скорости`1.1892`, а `rpitch:` в значении `7` соответствует скорости `1.4983`. Наконец, мы можем даже объединить параметры`rate:` и `rpitch:`:

    sample :ambi_choir, rate: 0.25, rpitch: 3
    sleep 3
    sample :ambi_choir, rate: 0.25, rpitch: 5
    sleep 2
    sample :ambi_choir, rate: 0.25, rpitch: 6
    sleep 1
    sample :ambi_choir, rate: 0.25, rpitch: 1

## Соединим всё вместе

Давайте посмотрим на простую пьесу, которая объединяет в себе эти идеи. Скопируйте ее в свободный буфер Sonic Pi, нажмите play, послушайте некоторое время, а затем используйте его в качестве отправной точки для вашего собственного произведения. Посмотрите, как весело управлять скоростью воспроизведения сэмплов. В качестве дополнительного упражнения попробуйте записать свои собственные сэмплы и поиграйте со скоростью, чтобы увидеть, какие сумасшедшие звуки вы можете издавать.

    live_loop :beats do
      sample :guit_em9, rate: [0.25, 0.5, -1].choose, amp: 2
      sample :loop_garzul, rate: [0.5, 1].choose
      sleep 8
    end

    live_loop :melody do
      oct = [-1, 1, 2].choose * 12
      with_fx :reverb, amp: 2 do
        16.times do
          n = (scale 0, :minor_pentatonic).choose
          sample :bass_voxy_hit_c, rpitch: n + 4 + oct
          sleep 0.125
        end
      end
    end