Управление длительностью при помощи огибающих

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

В качестве простого и мощного способа управления длительностью наших звуков Sonic Pi предоставляет нам понятие ADSR амплитудной огибающей (Дальше в этой главе - ADSR). Амплитудная огибающая предлагает контроль по двум параметрам:

Длительность

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

Амплитуда

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

Итак, как мы видели раньше, амплитуда 0 - это тишина, а амплитуда 1 - нормальная громкость.

Теперь, пришла пора взглянуть на каждую часть огибающей по порядку.

Фаза затухания (Release Phase)

Единственная часть огибающей, установленная по умолчанию, - это время затухания. Оно обозначает продолжительность времени, за которое звук полностью исчезнет. У всех синтов затухание настроено на 1, что значит по умолчанию звук длится в течение одной доли такта (что при темпе по умолчанию в 60 составляет 1 секунду):

play 70

Ноту будет слышно одну секунду. Можете измерить сами :-) В полной, и более явной записи, то же самое будет выглядеть так:

play 70, release: 1

Заметьте, что звук получился точно таким же (длился ровно 1 секунду). Очень легко изменять длительность, изменяя значение регулировки release::

play 60, release: 2

Можно cделать звучание синта крайне непродолжительным, указав очень маленькое значение затухания:

play 60, release: 0.2

Длительность затухания звука называется фазой затухания (release phase) и, по умолчанию, представляет из себя линейный переход (т.e. прямую линию). Следующая диаграмма иллюстрирует такой переход:

release envelope

Вертикальная линия на левом краю диаграммы показывает, что звук начинается при амплитуде 0, но сразу после этого начинает выводиться на полной громкости (это фаза атаки, которую мы рассмотрим далее). Как только достигнута максимальная амплитуда, она спадает прямой линией до нуля, занимая время, указанное для release:. Чем продолжительнее время затухания, тем дольше будет стихать синт

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

Фаза атаки (Attack Phase)

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

play 60, attack: 2
sleep 3
play 65, attack: 0.5

Можно пользоваться несколькими регуляторами в одно и то же время. Например, для короткой атаки и долгого затухания попробуйте:

play 60, attack: 0.7, release: 4

Эта краткая атака и длинное затухание иллюстрируются следующей диаграммой:

огибающая атаки и затухания

Конечно, можно и наоборот. Попробуйте долгую атаку и короткое затухание:

play 60, attack: 4, release: 0.7

огибающая с долгой атакой и быстрым стиханием

В конце-концов, для кратких звуков можно сделать короткими и атаку, и затухание.

play 60, attack: 0.5, release: 0.5

огибающая с короткой атакой и коротким стиханием

Фаза задержки (Sustain Phase)

Вдобавок, к заданию времени атаки и затухания, можно указать время задержки, чтобы управлять фазой задержки. Это отрезок времени, в течение которого звук остается на полной громкости в промежутке между фазами атаки и затухания.

play 60, attack: 0.3, sustain: 1, release: 1

ASR огибающая

Задержка полезна для важных звуков, которые вы хотели бы полностью выделить при сведении, прежде чем они перейдут в необязательную фазу затухания. Конечно же, совершенно допустимо устанавливать и attack: и release: в 0 и попросту использовать задержку, чтобы не иметь абсолютно никакого нарастания и затухания у звука. Но стоит заметить, что затухание 0 может давать щелчки в аудио, и часто лучше все-таки указывать очень маленькое значение, такое как 0.2.

Фаза спада (Decay Phase)

Для дополнительного уровня контроля можно указать время спада. Это фаза огибающей, которая помещается между фазами атаки и задержки. Она задает участок времени, когда амплитуда будет падать от уровня attack_level: до decay_level: (если явно не установить его, то он будет совпадать с sustain_level:). По умолчанию, уровни decay: и attack: установлена в 0, а уровень затухания в 1, поэтому надо указывать время спада, чтобы оно имело какой-либо эффект:

play 60, attack: 0.1, attack_level: 1, decay: 0.2, sustain_level: 0.4, sustain: 1, release: 0.5

ADSR огибающая

Уровень спада (Decay Level)

Еще один, последний трюк, состоит в том, что хотя настройки decay_level: изначально совпадают со значением sustain_level:, вы можете явно присвоить им разные значения для полного контроля над огибающей. Это позволяет создавать огибающие наподобие следующей:

play 60, attack: 0.1, attack_level: 1, decay: 0.2, decay_level: 0.3, sustain: 1, sustain_level: 0.4, release: 0.5

ASR огибающая

Можно, к тому же, устанавливать decay_level: выше, чем sustain_level::

play 60, attack: 0.1, attack_level: 0.1, decay: 0.2, decay_level: 1, sustain: 0.5, sustain_level: 0.8, release: 1.5

ASR огибающая

ADSR-огибающие

Итак, подведем итог. ADSR-огибающие в Sonic Pi состоят из следующих фаз:

  1. Attack - атака - время, за которое амплитуда растет от 0 до attack_level,
  2. Decay - спад - время, когда амплитуда переходит от attack_level до decay_level,
  3. Sustain - задержка - время изменения амплитуды с decay_level на sustain_level,
  4. Release - затухание - время падения амплитуда с sustain_level до 0

Важно помнить, что длительность звука - это сумма продолжительностей всех фаз. Соответственно, такой звук будет длиться 0.5 + 1 + 2 + 0.5 = 4 доли такта:

play 60, attack: 0.5, attack_level: 1, decay: 1, sustain_level: 0.4, sustain: 2, release: 0.5

Теперь пришло время поиграть с огибающими, добавляя их в свои звуки…