Огибающие сэмплов

Также возможно изменять длительность и амплитуду сэмпла, используя ADSR-огибающие. Но это работает немного по-другому, чем ADSR-огибающие синтов. Огибающие сэмплов позволяют уменьшать громкость и длительность, но не увеличивать их. Сэмпл остановится, либо когда его воспроизведение завершено, либо когда огибающая закончилась - в зависимости от того, что произошло раньше. Так что если задать очень долгое затухание, то звучание сэмпла не удлинится.

Огибающие амен

Вернемся к нашему верному другу амен-брейку:

sample :loop_amen

Без дополнительных регулировок мы слышим полный сэмпл на полной громкости. Если мы хотим его постепенно усиливать в течение одной секунды, то можно задейстовать параметр attack::

sample :loop_amen, attack: 1

Для более краткого нарастания, выберите значение атаки поменьше:

sample :loop_amen, attack: 0.3

Автоудержание

Отличие поведения ADSR-огибающей сэмпла от стандартной огибающей синта лежит в значении сустейна. В обычной огибающей синта сустейн сам по себе устанавливался в 0, если мы не указывали его вручную. Для сэмплов оно также настраивается “автомагически”, и равняется времени, необходимому для завершения сэмпла. Поэтому мы слышим полный сэмпл, когда никаких настроек не задаётся. Если бы значения атаки, спада, удержания и затухания равнялись 0, то мы бы и намёка на сэмпл не услышали. Так что Sonic Pi вычисляет сколько времени длится сэмпл, вычитает длительности атаки, спада и затухания, и присваивает результат фазе удержания. Если атака, спад и затухание вместе дают значение больше продолжительности сэмпла, то удержание устанавливается в 0.

Постепенное затухание

Для изучения этого явления рассмотрим наш амен-брейк более детально. Если спросить Sonic Pi сколько длится сэмпл:

print sample_duration :loop_amen

Он напечатает 1.753310657596372, что означает собственное время звучания сэмпла в секундах. Просто для удобства округлим его до 1.75. Затем, если установить затухание в 0.75, произойдет кое-что неожиданное:

sample :loop_amen, release: 0.75

Первая секунда сэмпла будет воспроизводиться на полной громкости, а потом последует постепенное затухание в течение 0.75 секунды. Это и есть пример автоудержания в действии. Само по себе затухание всегда работает с конца сэмпла. Если бы наш сэмпл длился 10.75 секунды, то первые 10 секунд он бы играл с полной амплитудой, а потом затухал оставшиеся 0.75 секунды.

Запомните: по умолчанию release: отсчитывает затухание от конца сэмпла.

Постепенное усиление и затухание

Можно использовать вместе attack:, release: и поведение автоудержания для постепенного усиления и затухания при воспроизведении сэмпла:

sample :loop_amen, attack: 0.75, release: 0.75

Так как полная продолжительность равняется 1.75 секунды, а наши фазы атаки и затухания суммарно дают 1.5 секунды, то удержание автоматически устанавливается в 0.25 секунды. Так мы легко можем плавно усиливать и гасить сэмпл.

Точное удержание

Вернуться к нормальному режиму ADSR-огибающей довольно просто: достаточно вручную задать 0 для sustain::

sample :loop_amen, sustain: 0, release: 0.75

После этого сэмпл звучит в общей сложности всего лишь 0.75 секунды. При обычных нулевых значениях attack: и decay: громкость сэмпла сразу же достигает полного значения, удерживается там в течение 0 секунд, а потом за 0.75 секунды полностью затихает во время фазы затухания.

Тарелки

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

sample :drum_cymbal_open

Можно слышать, что тарелка продолжает звенеть некоторое время. С помощью огибающей можно сделать её более резкой:

sample :drum_cymbal_open, attack: 0.01, sustain: 0, release: 0.1

А еще можно изображать удар по тарелке и его глушение за счет увеличения периода удержания:

sample :drum_cymbal_open, attack: 0.01, sustain: 0.3, release: 0.1

А теперь, ступайте, и как следует позабавьтесь, добавляя огибающие к сэмплам. Попробуйте изменять и скорость, чтобы получить действительно интересные результаты.