vmagnin@univ

Accueil > Informatique [computer science] > Articles informatique > Format WAV et synthèse sonore

Format WAV et synthèse sonore

vendredi 6 novembre 2015, par Vincent MAGNIN

Fichiers des deux articles publiés dans GNU/Linux Magazine n°190 (fév. 2016).

Articles accessibles librement :
- p. 44 Format WAV : créez des ondes sonores en C
- p. 50 Format WAV : des sons de plus en plus complexes

Code source du programme en C : https://github.com/GLMF/GLMF190/tree/master/Dev/format_WAV

Sinusoïde à 440 Hz : Amp * sin(omega*t + phi)

Somme de 7 harmoniques décroissant d’autant plus vite qu’elles sont d’un ordre important (dents de scie descendantes) :

for(j=1 ; j<=7 ; j=j+1){
   gauche[i] = gauche[i] + Amp/(j*(1+pow(t,j)))*sin(j*omega*t) ;
   droite[i] = gauche[i] ;
}

Signal carré (harmoniques impaires) :

for(j=1 ; j<=14 ; j=j+2){
   gauche[i] = gauche[i] + Amp/(j*(1+pow(t,j)))*sin(j*omega*t) ;
}

Accord parfait majeur do mi sol :

for(j=1 ; j<=7 ; j=j+1){
   gauche[i] = gauche[i] + Amp/(pow(j, 2)*(1+pow(t,j)))*(sin(j*omega*t) + sin(j*omega*pow(2.0, 4/12.0)*t) + sin(j*omega*pow(2.0, 7/12.0)*t)) ;
}

Sinus cardinal à 110 Hz :

phi = -2*PI ;
if (omega*t+phi != 0.0) {
   gauche[i] = gauche[i] + Amp * sin(omega * t + phi) / (omega*t+phi) ;}
else {
     gauche[i] = gauche[i] + Amp ;
}

Son évoquant une clarinette (220 Hz) :

for(j=1 ; j<=11 ; j=j+2){
   gauche[i] = gauche[i] + Amp/pow(j, 0.7)*sin(j*omega*t) ;
}
...
mon_signal(0.0, 3.0, 220.0, 1.0) ;    
generateur_enveloppe(0.0, 3.0, 30.0, 20.0, 80.0, 30.0) ;

Son sinusoïdal avec un trémolo à 5 Hz :
gauche[i] = gauche[i] * (1.0-AmpLFO*sin(omegaLFO*t)) ;

Son sinusoïdal tournant (0,5 Hz, profondeur de modulation 0,5) :

gauche[i] = gauche[i] * (1.0-AmpLFO*sin(omegaLFO*t + phi)) ;
droite[i] = droite[i] * (1.0-AmpLFO*cos(omegaLFO*t + phi)) ;

Son sinusoïdal avec vibrato à 4 Hz :
gauche[i] = gauche[i] + Amp * sin(omega * t + phi*(1.0+0.5*sin(2*PI*4.0*t))) ;

Bourdonnement obtenu par modulation de phase :
gauche[i] = gauche[i] + Amp * sin(omega*t + phi*sin(omega*0.2*t)) ;

Son FM :
gauche[i] = gauche[i] + Amp * sin(omega*t + phi*cos(75*t)/(1+log(t/100+0.01))) ;

Autre son FM :
gauche[i] = gauche[i] + Amp * sin(omega*(1.0+0.001*sin(t*500)) * t + phi) ;

Autre son FM :
gauche[i] = gauche[i] + Amp * sin(omega*(1.0+0.001*sin(t*500*(1.0+0.0002*cos(t*50)))) * t + phi) ;

Site du logiciel Audacity : http://audacityteam.org/