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

В этом месяце мы собираемся погрузиться в `: 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:` изменяют количество изменений амплитуды за такт.

Продолжительность фазы - это продолжительность одного цикла включения / выключения. Поэтому меньшие значения заставят эффект включаться и выключаться намного быстрее, чем большие значения. Хорошие значения для начала игры: `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`, вы можете кардинально изменить способ изменения амплитуды во времени.

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

По умолчанию `: 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