Académique Documents
Professionnel Documents
Culture Documents
0594630943592952645618252949463417007792043174941856285592;
// convertit un code midi en frquence
// (on utilise principalement les notes midi de 21 108)
function [f]=midi2freq(m)
f = 55*(halftone^(m-33))
endfunction
// Fonctions pour crer les quatre sons donc les formes sont reprsentes :
// https://en.wikipedia.org/wiki/File:Waveforms.svg
// Son (courbe sinusodale) sans enveloppe de frquence f et de dure d
// (sans harmonique)
function [y]=sinesound(f,d)
t = soundsec(d,44100)
x = 2 * %pi * t * f;
y = sin(x);
endfunction
// Son (courbe en scie) sans enveloppe de frquence f et de dure d
function [y]=sawsound(f,d)
t = soundsec(d,44100)
x = t * f;
y = 2*(x+.5 - int(x+.5))-1
endfunction
// // Son (courbe en carr) sans enveloppe de frquence f et de dure d
function [y]=squaresound(f,d)
t = soundsec(d,44100)
x = t * f;
y = 2-2*int(2*(x-int(x)))-1;
endfunction
// function [y]=squaresound(f,d) // version avec squarewave()
// t = soundsec(d,44100)
// x = 2* %pi * t * f;
// y = squarewave(x);
// endfunction
// Son (courbe en triangle) sans enveloppe de frquence f et de dure d
function [y]=trianglesound(f,d)
t = soundsec(d,44100)
x = t * f;
y = (4-4*int(2*(x+.25-int(x+.25)))-2) .* ( 2*(x+.75 - int(x+.75))-1 ) -1
endfunction
// Enveloppe le son s avec une enveloppe ADSR
// iatt : dure de l'attaque
// idec : dure du decay
// islev : amplitude du sustain (entre 0 et 1)
// irel : dure du release
function [z]=mkenvelope(s,iatt,idec,islev,irel)
iatt = round(iatt*44100);
idec = round(idec*44100);
irel = round(irel*44100);
d = size(s,'*');
isus = d-iatt-idec-irel;
line1 = linspace(0, 1, iatt); // attack
line2 = linspace(1, islev, idec);
line3 = linspace(islev, islev, isus);
line4 = linspace(islev, 0, irel);