revert exponential adsr

This commit is contained in:
Felix Roos 2022-09-18 22:55:33 +02:00
parent d3645f6c63
commit 8977c5cef4

View File

@ -33,7 +33,13 @@ const getFilter = (type, frequency, Q) => {
const getADSR = (attack, decay, sustain, release, velocity, begin, end) => {
const gainNode = getAudioContext().createGain();
let t = begin;
gainNode.gain.setValueAtTime(0, begin);
gainNode.gain.linearRampToValueAtTime(velocity, begin + attack); // attack
gainNode.gain.linearRampToValueAtTime(sustain * velocity, begin + attack + decay); // sustain start
gainNode.gain.setValueAtTime(sustain * velocity, end); // sustain end
gainNode.gain.linearRampToValueAtTime(0, end + release); // release
// for some reason, using exponential ramping creates little cracklings
/* let t = begin;
gainNode.gain.setValueAtTime(0, t);
gainNode.gain.exponentialRampToValueAtTime(velocity, (t += attack));
const sustainGain = Math.max(sustain * velocity, 0.001);
@ -43,7 +49,7 @@ const getADSR = (attack, decay, sustain, release, velocity, begin, end) => {
} else {
gainNode.gain.setValueAtTime(sustainGain, end);
}
gainNode.gain.exponentialRampToValueAtTime(0.001, end + release); // release
gainNode.gain.exponentialRampToValueAtTime(0.001, end + release); // release */
return gainNode;
};