Также возможно изменять длительность и амплитуду сэмпла, используя 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
А теперь, ступайте, и как следует позабавьтесь, добавляя огибающие к сэмплам. Попробуйте изменять и скорость, чтобы получить действительно интересные результаты.