A.14 Амплитудная модуляция

# Амплитудная модуляция

В этом месяце мы собираемся погрузиться в `: slicer` - один из самых мощных и гибких звуковых эффектов Sonic Pi. К концу этой статьи вы узнаете, как манипулировать общей громкостью частей вашего закодированного вживую звука новыми мощными способами. Это позволит вам расширить звуковые возможности, создавая новые ритмические и тембральные структуры.

## Нарезая амплитуду

Итак, что же на самом деле делает эффект `: slicer`? Один из способов думать об этом - это то же самое, как когда кто-то играет с регулятором громкости на телевизоре или домашнем хай-фай. Давайте посмотрим, но сначала послушаем следующий код, который заставит прорычать для нас синтезатор `: prophet`:

```
synth :prophet, note: :e1, release: 8, cutoff: 70
synth :prophet, note: :e1 + 4, release: 8, cutoff: 80
```

Теперь давайте пропустим это через эффект `: slicer` :

```

with_fx :slicer do
  synth :prophet, note: :e1, release: 8, cutoff: 70
  synth :prophet, note: :e1 + 4, release: 8, cutoff: 80
end
```

Послушайте, как работает слайсер - он как будто заглушает и включает звук в регулярном ритме. Также обратите внимание, как `: slicer` влияет на все аудио, сгенерированное между блоками` do` / `end`. Вы можете контролировать скорость, с которой он включает и выключает звук, с помощью опции `phase:`, которая сокращает длительность фазы. Его значение по умолчанию равно `0.25`, что означает 4 раза в секунду при значении BPM по умолчанию 60. Давайте сделаем это быстрее:

```
with_fx :slicer, phase: 0.125 do
  synth :prophet, note: :e1, release: 8, cutoff: 70
  synth :prophet, note: :e1 + 4, release: 8, cutoff: 80
end
```

Теперь поиграйте с разными значениями продолжительности `phase:` сами. Попробуйте более длинные и короткие значения. Посмотрите, что происходит, когда вы выбираете действительно короткое значение. Кроме того, попробуйте различные синтезаторы, такие как `: beep` или`: dsaw` и другие ноты. Взгляните на следующую диаграмму, чтобы увидеть, как различные значения `phase:` изменяют количество изменений амплитуды за такт.

![Длительность фазы](../../../etc/doc/images/tutorial/articles/A.14-amplitude-modulation/slicer_phase_durations.png)

Продолжительность фазы - это продолжительность одного цикла включения / выключения. Поэтому меньшие значения заставят эффект включаться и выключаться намного быстрее, чем большие значения. Хорошие значения для начала игры: `0.125`,` 0.25`, `0.5` и` 1`.


## Контролируя волны

По умолчанию эффект `: slicer` использует прямоугольную волну для управления амплитудой во времени. Вот почему мы слышим, как амплитуда включается на некоторое время, затем сразу отключается на некоторое время, затем снова включается. Оказывается, прямоугольная волна - это всего лишь одна из 4 различных управляющих волн, которые поддерживаются `: slicer`. Другие это пила, треугольник и (ко)синус. Посмотрите на диаграмму ниже, чтобы увидеть, как они выглядят. Мы также можем услышать, как они звучат. Например, следующий код использует (кo)синус в качестве управляющей волны. Послушайте, как звук не включается и не выключается внезапно, а плавно затухает:

```
with_fx :slicer, phase: 0.5, wave: 3 do
  synth :dsaw, note: :e3, release: 8, cutoff: 120
  synth :dsaw, note: :e2, release: 8, cutoff: 100
end
```

Поиграйте с разными формами волн, изменив параметр `wave:` на `0` для пилы,` 1` для квадрата, `2` для треугольника и` 3` для синуса. Посмотрите, как звучат разные волны с разными параметрами `phase:`.

Каждая из этих волн может быть инвертирована с помощью опции `invert_wave:`, который переворачивает ее на оси y. Например, в одной фазе пилообразная волна обычно начинается с высокой отметки и медленно опускается, а затем возвращается к вершине. С помощью `invert_wave: 1` он медленно поднимется, прежде чем снова спрыгнуть вниз. Кроме того, управляющая волна может быть запущена в разных точках с помощью параметра `phase_offset:`, который должен быть значением между `0` и` 1`. Играя с параметрами `phase:`, `wave:`, `invert_wave:` и `phase_offset`, вы можете кардинально изменить способ изменения амплитуды во времени.

![Длительность фаз](../../../etc/doc/images/tutorial/articles/A.14-amplitude-modulation/slicer_control_waves.png)


## Настройка уровня вашего звука

По умолчанию `: slicer` переключает значения амплитуды` 1` (максимальная громкость) и `0` (беззвучно). Это можно изменить с помощью параметров `amp_min:` и `amp_max:`. Вы можете использовать это вместе с синусоидальной волной, чтобы создать простой эффект тремоло:

```
with_fx :slicer, amp_min: 0.25, amp_max: 0.75, wave: 3, phase: 0.25 do
  synth :saw, release: 8
end
```

Это как если бы взять ручку регулировки громкости на своем hi-fi и немного переместить ее вверх и вниз, чтобы звук «качался» внутрь и наружу динамика.


## Вероятности

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

```
with_fx :slicer, phase: 0.125, probability: 0.6  do
  synth :tb303, note: :e1, cutoff_attack: 8, release: 8
  synth :tb303, note: :e2, cutoff_attack: 4, release: 8
  synth :tb303, note: :e3, cutoff_attack: 2, release: 8
end
```

Послушайте, как у нас сейчас интересно пульсирует ритм. Попробуйте изменить параметр `probability:` на другое значение между` 0` и `1`. Значения, близкие к `0`, будут иметь больше места между каждым отдельным звуком, поскольку вероятность того, что звук будет срабатывать, будет намного ниже.

Следует также отметить, что система вероятностей в этом эффекте подобна системе рандомизации, доступной через такие функции, как `rand` и` shuffle`. Они все полностью детерминированы. Это означает, что каждый раз, когда вы нажимаете Выполнить, вы слышите точно такой же пульсирующий ритм для данной вероятности. Если вы хотите что-то изменить, вы можете использовать параметр `seed:`, чтобы выбрать другое начальное число. Это работает точно так же, как `use_random_seed`, но влияет только на этот конкретный эффект.

Наконец, с помощью параметра `prob_pos:`, вы можете изменить положение 'resting'  для управляющей волны с `0` на любую другую позицию, когда проверка вероятности возвращает ложь, а не истину:

```
with_fx :slicer, phase: 0.125, probability: 0.6, prob_pos: 1  do
  synth :tb303, note: :e1, cutoff_attack: 8, release: 8
  synth :tb303, note: :e2, cutoff_attack: 4, release: 8
  synth :tb303, note: :e3, cutoff_attack: 2, release: 8
end
```

## Нарезаем биты

Есть одна очень забавная вещь - использовать `: slicer` для нарезки барабанного ритма:

```
with_fx :slicer, phase: 0.125 do
  sample :loop_mika
end
```

Это позволяет нам брать любой сэмпл и создавать новые ритмические возможности, что очень весело. Однако следует быть осторожным и убедиться, что темп сэмпла соответствует текущему BPM в Sonic Pi, иначе слайсы будут звучать криво относительно ритма этого сэмпла. Например, попробуйте поменять `: loop_mika` на сэмпл` loop_amen`, чтобы услышать, насколько плохо это может звучать, когда темпы не совпадают.

## Изменяем темп

Как мы уже видели, изменение значения BPM по умолчанию с помощью `use_bpm` приведет к увеличению или уменьшению времени ожидания и длительности огибающей синтезатора в соответствии с тактом. Эффект `: slicer` также учитывает это, поскольку параметр `phase: ` фактически измеряется в тактах, а не секундах. Поэтому мы можем исправить проблему, возникшую с loop_amen выше, изменив BPM в соответствии с примером:

```
use_sample_bpm :loop_amen
with_fx :slicer, phase: 0.125 do
  sample :loop_amen
end
```

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

Давайте применим все эти идеи в заключительном примере, в который используем только эффект `:slicer` для создания интересной комбинации. Давайте, начните изменять его и сделайте из него свое собственное произведение!

```
live_loop :dark_mist do
  co = (line 70, 130, steps: 8).tick
  with_fx :slicer, probability: 0.7, prob_pos: 1 do
    synth :prophet, note: :e1, release: 8, cutoff: co
  end
  
  with_fx :slicer, phase: [0.125, 0.25].choose do
    sample :guit_em9, rate: 0.5
  end
  sleep 8
end
live_loop :crashing_waves do
  with_fx :slicer, wave: 0, phase: 0.25 do
    sample :loop_mika, rate: 0.5
  end
  sleep 16
end
```




