createEnvelope.m
function [y, t] = createEnvelope(TA, TS, TR, T)
% erzeugt eine Hüllkurve mit einer Anstiegszeit (Attack-Phase), einer
% Dauerzeit (Sustain-Phase) und einer Abklingzeit (Release-Phase)
% Parameter:
% TA Dauer der Attack-Phase in s
% TS Dauer der Sustain-Phase in s
% TR Dauer der Release-Phase in s
% T Gesamtdauer in s
% Ergebnisse:
% y Hüllkurve
% t Zeitwerte
dt = 1/44100; % feste Samplezeit 44.1 kHz
t = 0:dt:T;
% Berechnen der Index-Werte an den Grenzen
indexA = floor(TA/dt); % Ende der Attack-Phase
indexS = floor((TA+TS)/dt); % Ende der Sustain-Phase
indexR = floor((TA+TS+TR)/dt); % Ende der Release-Phase
% zunächst überall auf 0
y = zeros(size(t));
% Attack-Phase
index = 1:indexA;
tA = t(index);
y(index) = tA/TA;
% Sustain-Phase
index = (indexA + 1):(indexS);
y(index) = 1.0;
% Release-Phase
index = (indexS + 1):indexR;
tR = t(index);
y(index) = (TA + TS + TR - tR)/TR;