Generer un son d'une frequence donnee en parametre sous Windows

Generer un son d'une frequence donnee en parametre sous Windows - C++ - Programmation

Marsh Posté le 30-03-2004 à 00:58:54    

Bonjour,
Voila je dois developper un petit soft qui doit me generer un son en fonction de la position des mains de l'utilisateur:
Si il se trouve a droite de la camera:
il genere un son d'une frequence F1
Si il se trouve a gauche de la camera:
il genere un son d'une frequence F12
.....
 
Ces frequences F1..F2.....FN sont passees en parametre.
Connaissez vous la lib pour faire ca:
du genre :

Code :
  1. Beep(10255)


Fais moi un son de frequence 10255Hz
Merci


Message édité par PETOZAK le 30-03-2004 à 00:59:18
Reply

Marsh Posté le 30-03-2004 à 00:58:54   

Reply

Marsh Posté le 30-03-2004 à 01:14:30    


En C++ y'a une fonction Beep qui prend en paramètre la fréquence et la durée

Code :
  1. Beep(frequence, duree);

Reply

Marsh Posté le 30-03-2004 à 01:22:01    

Merci

Reply

Marsh Posté le 30-03-2004 à 01:22:11    

il faut inclure koi?

Reply

Marsh Posté le 30-03-2004 à 01:24:37    

au fait j'ai essaye et le son sort du HP de la Carte mere tu sais pas si c'est possible d'avoir un son meilleur et plus puissant surtout?

Reply

Marsh Posté le 30-03-2004 à 01:25:58    

PETOZAK a écrit :

il faut inclure koi?

J'ai regardé dans un vieux programme qui utilisais cette fonction et j'ai rien inclu:o
(a part les mfc vu que c'était une apps graphique)

Reply

Marsh Posté le 30-03-2004 à 01:28:11    

oui elle est dans WinBase.h donc rien a inclure....
mais le son sort pas du bon trou :)

Reply

Marsh Posté le 30-03-2004 à 01:34:34    

PETOZAK a écrit :

oui elle est dans WinBase.h donc rien a inclure....
mais le son sort pas du bon trou :)

Ah oui, en effet, ca sort du HP de la carte mère.
Si tu veux du son par les enceintes, faut voir avec DirectX j'imagine puisque que ca passe par la carte son....

Reply

Marsh Posté le 30-03-2004 à 16:53:51    

euh je sais que j'avais fais un programme pour gérer du son y'a longtemps, mais je me souviens que j'avais galéré avec des fonctions tordues de windows... je crois pas que ça utilisait DirectX, par contre. Pour faire un son, je passais un tableau de short int à ma fonction, où chaque élément représentait l'amplitude du signal à sortir, donc ensuite, en remplissant le tableau comme il faut par rapport au taux d'échantillonage, on peut faire le son qu'on veut, dont un son de fréquence fixe (en gros, le tableau contient les différentes ordonnées des points de la courbe du signal à sortir, comme dans un WAV, quoi). Si ça intéresse quelqu'un je pourrais essayer de replonger dans mes vieux codes voir si je retrouve le truc...


---------------
~~ Yawen ~~
Reply

Marsh Posté le 30-03-2004 à 17:07:36    

jai creer une classe qui joue de snotes a partir de ca :

Code :
  1. /*
  2. FILE    : Mucic.h   
  3. AUTHOR  : coulix, TAGMC21     v0.3     12/07/03
  4. PURPOSE : An easy way to translate music sheets into computer-speaker output sounds.
  5. ENLISH NOTE SYSTEM EQUIVALENCE
  6. ------------------------------
  7. DO -> C     DO#/REb -> C#/Db
  8. RE -> D     RE#/MIb -> D#/Eb
  9. MI -> E     FA#/SOLb-> F#/Gb
  10. FA -> F     SOL#/LAb-> G#/Ab
  11. SOL-> G     LA#/SIb -> A#/Bb
  12. LA -> A
  13. SI -> B
  14. ENGLISH RYTHMIC SYSTEM EQUIVALENCE
  15. ----------------------------------
  16. On hold
  17. */
  18. #ifndef MUSIC_BEEP_H
  19. #define MUSIC_BEEP_H
  20. class Music 
  21. {
  22.   public :
  23.     enum sound_freq          //link a frequencie to a note
  24.                  {oDO=16    ,oRE=18    ,oMI=20    ,oFA=22    ,oSOL=24   ,oLA=27   ,oSI=31,
  25.                   oDOd=17   ,oREd=20   ,oFAd=23   ,oSOLd=26  ,oLAd=29,
  26.                   IDO=33    ,IRE=37    ,IMI=41    ,IFA=44    ,ISOL=49   ,ILA=55   ,ISI=62,
  27.                   IDOd=35   ,IREd=39   ,IFAd=46   ,ISOLd=52  ,ILAd=58,
  28.                   IIDO=65   ,IIRE=73   ,IIMI=82   ,IIFA=87   ,IISOL=98  ,IILA=110 ,IISI=123,
  29.                   IIDOd=69  ,IIREd=78  ,IIFAd=92  ,IISOLd=104,IILAd=117,
  30.                   IIIDO=131  ,IIIRE=147  ,IIIMI=165   ,IIIFA=175   ,IIISOL=196 ,IIILA=220 ,IIISI=247,
  31.                   IIIDOd=139 ,IIIREd=156 ,IIIFAd=185  ,IIISOLd=208 ,IIILAd=233,
  32.                   IVDO=262   ,IVRE=294   ,IVMI=329  ,IVFA=349 ,IVSOL=392 ,IVLA=440 ,IVSI=494,
  33.                   IVDOd=277 ,IVREd=311 ,IVFAd=370 ,IVSOLd=415 ,IVLAd=466,
  34.                   VDO=523  ,VRE=587  ,VMI=659  ,VFA=698   ,VSOL=784 ,VLA=880 ,VSI=988,
  35.                   VDOd=554 ,VREd=622 ,VFAd=740 ,VSOLd=831 ,VLAd=932,
  36.                   VIDO=1046  ,VIRE=1175  ,VIMI=1319  ,VIFA=1397   ,VISOL=1568 ,VILA=1760 ,VISI=1976,
  37.                   VIDOd=1109 ,VIREd=1245 ,VIFAd=1480 ,VISOLd=1661 ,VILAd=1865,
  38.                   VIIDO=2094  ,VIIRE=2349  ,VIIMI=2637  ,VIIFA=2793   ,VIISOL=3135 ,VIILA=3520 ,VIISI=3951,
  39.                   VIIDOd=2217 ,VIIREd=2489 ,VIIFAd=2959 ,VIISOLd=3322 ,VIILAd=3729,
  40.                   VIIIDO=4186  ,VIIIRE=4698,
  41.                   VIIIDOd=4434 ,VIIIREd=4978,};
  42.                  
  43.     enum type                  //lenght of a note
  44.          {ronde=32, blanche_pointe=24 ,blanche=16, noire_pointe=12,
  45.           noire=8, croche_pointe=6 , croche=4, triolet=3, demi_croche=2,
  46.           quart_croche=1 };
  47.          
  48.     enum stop                  //lenght of a pause
  49.          {soupir=8 , demi_soupir= 4, pause=32 , demi_pause = 16, quart_soupir=2};
  50.                  
  51.     void assign_tempo(int x);  //Assign tempo for one "noire" (60 =1s )
  52.     void note(sound_freq freq,type lenght); //play the wanted note
  53.     void silence(stop stp);               
  54.     void sample(int var); //loop sound sanple
  55.    
  56.     //small created music
  57.    
  58.     void winner();
  59.     void intro ();
  60.     void error();
  61.    
  62.     private :
  63.     int tempo; 
  64.  
  65. };
  66. #endif


 

Code :
  1. #include "MUSIC_BEEP.h"
  2. #include <cstdlib>
  3. using namespace std;
  4. void Music::assign_tempo(int x)
  5. {
  6.     tempo=x;
  7. }
  8. void Music::error()
  9. {
  10.     assign_tempo(100);
  11.     note(Music::IIIDO, Music::croche);
  12.     note(Music::IIRE, Music::croche);
  13. }
  14. void Music::note(sound_freq freq,type lenght)
  15. {
  16.     _beep(freq,(7500/tempo*lenght));
  17. }
  18. void Music::silence(stop stp)
  19. {
  20.     _sleep((7500/tempo)*stp);
  21. }
  22.  
  23. void Music::sample(int var)
  24. {
  25.     for (int i=1; i <var; i++) {
  26.     _beep((5000/i), i*10);}
  27. }
  28. void Music::winner()
  29. {
  30.     assign_tempo(130);
  31.     note(Music::VSOL, Music::croche_pointe); 
  32.     note(Music::VSOL, Music::demi_croche); 
  33.     note(Music::VSOL, Music::demi_croche); 
  34.     note(Music::VLA, Music::croche); 
  35.     note(Music::VSOL, Music::croche); 
  36.     note(Music::VLA, Music::croche); 
  37.     note(Music::VSI, Music::blanche); 
  38. void Music::intro()
  39. {
  40.     assign_tempo(200);
  41.     note(Music::IVSOL, Music::croche); 
  42.     note(Music::IIIRE, Music::croche); 
  43.     note(Music::IIISI, Music::croche); 
  44.     note(Music::IIISOL, Music::croche); 
  45.    
  46. }

Reply

Marsh Posté le 30-03-2004 à 17:07:36   

Reply

Marsh Posté le 30-03-2004 à 19:02:41    

Merci xiluoc, je vais tenter de faire quelque chose de semblable :)

Reply

Sujets relatifs:

Leave a Replay

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