Контекст: Я пытаюсь реализовать конверт ADSR в WebAudioAPI, где Attack, Decay, Sustain и Release - все AudioParams
, а «note on» и «note off» представлено входом значение 1 и 0 соответственно. Я использую четыре узла DynamicCompressor
и много манипуляций с увеличением, чтобы добиться этого, поскольку компрессоры являются технически конвертирующими устройствами для атаки.WebAudioAPI: разделение двух выходов AudioNodes
Все идет хорошо, за исключением того факта, что мне нужно разделить уровень одного сигнала на уровень другого сигнала, чтобы получить коэффициент усиления для достижения смещения уровня в сочетании с DynamicCompressor, который создает градиент распада.
Если это помогает, вот формула:
decayOffsetY = (1 - sustainLevel) * (attackDur + decayDur)/decayDur
Обратите внимание, что sustainLevel
, attackDur
и decayDur
все AudioParams.
Сложение, вычитание и умножение все довольно легко достижимы с использованием некоторых ConstantSourceNodes
и GainNodes
, но как мне пойти на деление?
Примечание: Я думал об использовании другого DynamicCompressorNode
выполнить деление, так как компрессоры технически разделить сигнал на отношение, но это отношение в логарифмическом масштабе, и я в конечном итоге с коэффициентом сжатия
log(decayDur)/5
для достижения значения 1/decayDur
, который будет подключен к другому GainNode
. Но возможно ли даже выполнить команду Math.log
, используя только AudioNodes?
Ничего себе, я полностью упускал из виду волнорез как инструмент искажения. Я понимаю, что вход 'WaveShaperNode' ограничен диапазоном от -1 до 1, но этот лимит также применим и к выходу? – euwbah
Хороший вопрос. Выход не ограничивается одним и тем же диапазоном; он должен быть произвольным, более или менее. –