Programmation d'effet reverb en Langage C

Programmation d'effet reverb en Langage C - C - Programmation

Marsh Posté le 08-12-2006 à 15:33:51    

Bonjour à tous et à toutes, :hello:  
j'aurais aimé savoir si il y avait possibilité que l'on m'aide à créer un programme qui fera partie d'une bibliothèque en C dans mon IUT
On doit pour celà créer un fichier.c qui permettra aux futures personnes utilisant la bibliothèque en question de pouvoir faire des effets reverb,(delay et chorus) sur des sons
mais je ne sais pas exactement comment m'y prendre d'une part pour gérer des sons dans un programme en C et je ne sais pas non plus comment faire pour créer un programme qui ait cette fonctionnalité pourriez-vous m'éclairer un peu si ce n'est pas m'illuminer
 
Merci à tous et à toutes pour l'aide qui m'aura été apportée.
 :bounce:

Reply

Marsh Posté le 08-12-2006 à 15:33:51   

Reply

Marsh Posté le 08-12-2006 à 15:46:39    

Déja il faut que tu recherches les différents algorithmes pour générer les effets.
 
Le chorus, c'est une réinjection du signal avec une phase variable.
Le délai, c'est une réinjection pondérée et retardée temporellement.
Pour la réverb, soit tu te casses la tete, soit tu utilises plusieurs délais savamment réglés.
 
Mais je préfère te prévenir, ça va vraiment pas etre une partie de plaisir...
 
Le plus simple c'est encore de coder un conteneur de plugin DX ou VST, tu auras des miliers d'effets a dispo.

Reply

Marsh Posté le 08-12-2006 à 15:50:34    

Le problème c'est que vu que celà fait partie des cours je n'ai pas le droit à d'autre logiciel que le code que nous génerons nous c'est à dire sous linux avec du Kwrite et autre éditeurs de texte dans le genre lol.
Donc pas le droits à des plugins qu'on recoderait normalement...
voilà merci que même et si d'autres ont des solutions je veux bien
merci

Reply

Marsh Posté le 08-12-2006 à 16:40:44    

personne d'autres ne peut m'aider??

Reply

Marsh Posté le 08-12-2006 à 16:54:44    

Citation :

[07] Dans l'absence de réponses, il n'est pas nécessaire de 'upper' le topic toutes les 5 minutes.

  • Si les gens sont là et qu'ils peuvent vous aider, ils vous aideront. Autrement, soit ils ne sont pas là, soit ils ne peuvent pas vous aider, n'insistez donc pas.
  • Si après plusieures heures personne n'a répondu et que votre topic n'est plus sur la première page, vous pouvez éventuellement envisager de le faire remonter (mais pas d'en créer un autre juste parce qu'on n'a pas répondu au premier !)

Reply

Marsh Posté le 08-12-2006 à 17:03:54    

d'accord excuser moi
merci du conseil
THX

Reply

Marsh Posté le 08-12-2006 à 17:04:01    

<hors topic>
 
-Thx- jessaie de recoder les principaux instruments de la TR808 (a coup de sin , square wave etc) , pour les trucs simples (BD, CB,hats) ca marche bien mais ca manque un peu de punch, tu pourrait peut etre maider....
</hors topic>

Reply

Marsh Posté le 08-12-2006 à 17:13:49    

red faction a écrit :

<hors topic>
 
-Thx- jessaie de recoder les principaux instruments de la TR808 (a coup de sin , square wave etc) , pour les trucs simples (BD, CB,hats) ca marche bien mais ca manque un peu de punch, tu pourrait peut etre maider....
</hors topic>


 
Ca manque de punch dans quel sens ? Si tu parles de la dynamique de ton signal généré, pourquoi tu n'implémentes pas un compresseur-expenseur de base ? Quitte à tricher, pour gagner en dynamique sur tes attaques, tu peux multiplier ta sortie par :
 
1 + exp(-t / l )
 
avec t le temps actuel de ton signal, l la longueur de ton signal généré.
 
Ca va multiplier par 2 ton signal de sortie pendant un temps, puis doucement redescendre a ton signal de base.. une compression d'escroc

Reply

Marsh Posté le 08-12-2006 à 17:23:10    

non enfait je me suis mal exprimmé: en fait les sons ne ressemble pas toujours a ceux de la 808  , par exemple les hats claquent beacoup moins fort que sur la vraie machine, j'ai essaye de plusieurs manières avec des filtres , white noise etc, mais comme je suis pas un expert la dedans...
 
en plus jessaie de coder ca avec le minimum de lignes possibles , car le but est de mettre tout ca dans ma demo 4k , (et pq pas faire une boite a ryhtme soft par apres)
 
je posterai le code au soir des instru que j'ai deja refait c pas tres long ...

Reply

Marsh Posté le 08-12-2006 à 17:26:08    

-ThX- a écrit :

Ca manque de punch dans quel sens ? Si tu parles de la dynamique de ton signal généré, pourquoi tu n'implémentes pas un compresseur-expenseur de base ? Quitte à tricher, pour gagner en dynamique sur tes attaques, tu peux multiplier ta sortie par :
 
1 + exp(-t / l )
 
avec t le temps actuel de ton signal, l la longueur de ton signal généré.
 
Ca va multiplier par 2 ton signal de sortie pendant un temps, puis doucement redescendre a ton signal de base.. une compression d'escroc


faut que jessaie ce truc , ca a lair terrible!! j'aime les trucs simple qui font de leffet!!
 
l'autre jour j'ai trouve un low/highpass filter qui faisait seulement qq lignes (et qui marche , teste et approuvé)

Reply

Marsh Posté le 08-12-2006 à 17:26:08   

Reply

Marsh Posté le 08-12-2006 à 17:48:03    

le lowpass le plus simple a coder amha c'est le moyenneur... le b.a.ba du traitement numérique: ( avec Yn signal sortie et Xn signal entree )
 
Yn = ( Xn + X(n-1) + X(n-2) ) / 3
 
Ca lisse ton signal, donc c'est un passe bas. Pour savoir la fréquence de coupure, faut calculer la transformée en Z de la fonction de transfert mais la c'est vraiment super-hs

Reply

Marsh Posté le 08-12-2006 à 18:46:07    

Code :
  1. //Filtre lowpass
  2. //dt = intervalle entre 2 samples
  3. //r= 100 par ex
  4. a= dt / ( rc + dt)
  5. yn = a*x + (1-a)* yn-1 //ici je fais juste un interpolation entre 2 frames


 
enfait ca ressemble fort a ta methode, en gros ca fait une moyenne aussi ...
 
 
sinon javais trouve ca aussi qui fait low pass filter egalement + resonance, (mais c pas de moi)
 

Code :
  1. //Resonant filter
  2. //This filter consists of two first order low-pass filters in
  3. //series, with some of the difference between the two filter
  4. //outputs fed back to give a resonant peak.
  5. //You can use more filter stages for a steeper cutoff but the
  6. //stability criteria get more complicated if the extra stages
  7. //are within the feedback loop.
  8. //set feedback amount given f and q between 0 and 1
  9. fb = q + q/(1.0 - f);
  10. //for each sample...
  11. buf0 = buf0 + f * (in - buf0 + fb * (buf0 - buf1));
  12. buf1 = buf1 + f * (buf0 - buf1);
  13. out = buf1;


 
je vais peut-etre creer un topic pour eviter de lui pourrir le sien....


Message édité par red faction le 08-12-2006 à 19:06:51
Reply

Marsh Posté le 08-12-2006 à 22:17:53    

J'utilise un filtre passe bas de second ordre comme ceci : (bon la, il y à deux filtres en cascade)
 

Code :
  1. float Temp  = (B0  * SampleValue + B1*I1  + B2*I2  - A1*O1   - A2*O2);
  2. float Temp2 = (B0B * SampleValue + B1B*I1 + B2B*I2 - A1B*O1B - A2B*O2B);
  3. I2 = I1;
  4. I1 = SampleValue;
  5. O2 = O1;
  6. O1 = Temp;
  7. O2B = O1B;
  8. O1B = Temp2;


 
Cf mon blog pour écouter ce que ça donne.
 
Pour répondre à la question initiale, je conseil la lecture de cet excellent article.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed