Files
JaySynth/matlab/env/eval_adsr2.asv
T
2025-08-21 07:27:52 +02:00

52 lines
946 B
Plaintext
Executable File

function eval_adsr(Ta, Td, Vs, Tr)
% eval_adsr(0.1, 0.2, 0.2, 0.2)
fs = 1000;
a_a = 1/(Ta*fs);
a_d = -1/(Td*fs/log(Vs))
a_d = 5/(Td*fs)
a_r = 5/(Tr*fs)
state = 0;
s = 0;
tol = 1E-4;
target = 1;
n = 0;
p = 0;
k = 1/0.63;
while (1),
if state == 0 % Attack
s = a_a + (1-a_a)*s;
if s >= (0.63-tol)
state = 1
target = Vs;
end;
end;
if state == 1 % Decay
s = (1-a_d)*s;
if s <= (0.63*Vs+tol)
state = 2
target = 0;
p = 0;
end;
end;
if state == 2 % sustain
s = Vs/k;
if p >= 1*fs
state = 3
end;
p = p + 1;
end;
if state == 3 % Release
s = (1-a_r)*s;
if s <= (target+tol)
break;
end;
end;
n = n + 1;
y(n) = k*s;
end;
plot((0:n-1)/fs, y); grid;