March 22, 2022

Выражение: Beat counter

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

Выражение: Audio Animation
Выражение: Колебание с аудио

То, что нам нужно здесь, очень похоже (на самом деле мы позаимствуем много кода из предыдущей темы). В предыдущем случае наш код зацикливался на текущем времени компиляции, пока не нашел «такт» (переход от нижнего порога к верхнему порогу). На этот раз, однако, нам нужно зациклиться от текущего времени композиции до нулевого времени и подсчитать количество ударов на этом пути.

Таким образом, процесс будет по существу таким же, как и в предыдущем примере, за исключением того, что вместо вычисления того, сколько времени прошло с момента последнего перехода, мы будем вычислять общее количество переходов. Мы выполним это вычисление в выражении для ползунка, примененного к нулевому слою. В этом примере мы назовем нулевой слой «control». Мы будем использовать выражение управления ползунком, чтобы «опубликовать» результаты подсчета ударов для использования выражениями, применяемыми к свойству непрозрачности других наших слоев.

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

n = 6;
slider = thisComp.layer("control").effect("Slider Control")("Slider");
if (slider > (n - index)){ 100 }else{ 0 } 

Обратите внимание, что это простое выражение непрозрачности делает некоторые предположения о слоях, к которым оно применяется. Одно предположение состоит в том, что слои находятся в той же композиции, что и «управляющий» слой. Другое предположение заключается в том, что слои находятся наверху стека слоев (то есть это слои с 1 по n (6 в этом примере). Если вы хотите, чтобы слои находились в другой композиции или где-то еще, верхней части стека слоев, вам придется изменить выражение.

На рисунке ниже показано, как счетчик ударов увеличивается на единицу всякий раз, когда амплитуда звука превышает пороговое значение.

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

threshold = 10.0;

audioLev = thisComp.layer("Audio Amplitude").effect("Both Channels")("Slider");

above = false;
frame = Math.round(time / thisComp.frameDuration);
n = 0;
while (frame >= 0){
  t = frame * thisComp.frameDuration;
  if (above){
    if (audioLev.valueAtTime(t) < threshold){
      above = false;
    }
 
  }else if (audioLev.valueAtTime(t) >= threshold){
    above = true;
    n++;
  }
  frame--
}
 
n

🖤Спасибо за внимание!

Блог Motion Richy — Создавай иначе!