Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1268 connectés 

 


Dernière réponse
Sujet : programmation directsound
chrisbk Lecture d'un .wav (bout de code a moi un peu rectif pour que ca soit comprehensible ...)
 
c pas ce qui se fait de mieux mais si ca peut aider....
 
 

Code :
  1. class soundBuffer
  2. {
  3. ..
  4.     unsigned char *dataBuffer;
  5.     unsigned short numberOfChannel;
  6.     unsigned short avgBytePerSec;
  7.     unsigned int blockAlign;
  8.     unsigned int   sampleRate;
  9.     unsigned short nbBits;
  10.     unsigned int size;
  11. }
  12. int soundBuffer::loadFromWav(FILE *in)
  13. {
  14.     if (!in)
  15.         return SB_FILENOTFOUND;
  16.    int start = ftell(in);
  17.     //on commence la lecture du .wav
  18.     char header[10];
  19.     memset(header,0,10);
  20.     unsigned int formatLenght;
  21.     /////////////////////////////
  22.     // lecture de l'header
  23.     /////////////////////////////
  24.    
  25.     fread(header,4,1,in);
  26.     if (strcmp(header,"RIFF" ))
  27.     {
  28.         writeError("file is not a valid RIFF file" );
  29.         return SB_BADFORMAT;
  30.     }
  31.     unsigned int tInt;
  32.     fread(&tInt,4,1,in);
  33.     fread(header,4,1,in);
  34.     if (strcmp(header,"WAVE" ))
  35.     {
  36.         writeError("file  is not a valid WAV file" );
  37.         return SB_BADFORMAT;
  38.     }
  39.    
  40.     fread(header,4,1,in);       //contient "fmt "
  41.     //////////////////////////////////////
  42.     // lecture des infos relative au son
  43.     /////////////////////////////////////
  44.     fread(&formatLenght,4,1,in);
  45.     unsigned short machin;
  46.     fread(&machin,2,1,in);
  47.  
  48.    
  49.     fread(&numberOfChannel, sizeof(short),1,in);  //1 mono, 2 stereo
  50.     fread(&sampleRate, sizeof(DWORD), 1, in);   //genre 44100, 22050, etc...
  51.     fread(&avgBytePerSec, sizeof(WORD), 1, in);
  52.     fread(&blockAlign, sizeof(DWORD), 1, in);     //alignement (?)
  53.     int tttt = ftell(in);
  54.     fread(&nbBits, sizeof(WORD), 1, in);    //8 bit ou 16 bit ?
  55. ///////////////////////////////////
  56. //saut pour changer de chunk
  57. ///////////////////////////////////
  58.     fseek(in,formatLenght + 20 + start,SEEK_SET);
  59.     fread(header, sizeof(BYTE), 4, in);    //contient 'data'
  60.     fread(&size, sizeof(DWORD), 1, in);    //taille du son
  61. if (!strcmp(header,"fact" ))
  62. {
  63.  //pas la moindre idée de ce qu'est le chunk 'fact'
  64.  //je le saute  
  65.  fseek(in,size,SEEK_CUR);
  66.  fread(header, sizeof(BYTE), 4, in);    //contient 'data'
  67.  fread(&size, sizeof(DWORD), 1, in);    //taille du son
  68. }
  69. //donc la, on est sur le chunk 'data'
  70. //contenant le son  
  71.     //allocation du son
  72.     dataBuffer = new unsigned char[size];
  73.     fread(dataBuffer,size,1,in);
  74.      
  75.     return SB_OK;
  76. }


 
 
Ensuite t'as plus qu'a creer un buffer dsound qui correspont au infos, recopier le champ dataBuffer dedans  et vala

 

[edtdd]--Message édité par chrisbk--[/edtdd]


Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
chrisbk Lecture d'un .wav (bout de code a moi un peu rectif pour que ca soit comprehensible ...)
 
c pas ce qui se fait de mieux mais si ca peut aider....
 
 

Code :
  1. class soundBuffer
  2. {
  3. ..
  4.     unsigned char *dataBuffer;
  5.     unsigned short numberOfChannel;
  6.     unsigned short avgBytePerSec;
  7.     unsigned int blockAlign;
  8.     unsigned int   sampleRate;
  9.     unsigned short nbBits;
  10.     unsigned int size;
  11. }
  12. int soundBuffer::loadFromWav(FILE *in)
  13. {
  14.     if (!in)
  15.         return SB_FILENOTFOUND;
  16.    int start = ftell(in);
  17.     //on commence la lecture du .wav
  18.     char header[10];
  19.     memset(header,0,10);
  20.     unsigned int formatLenght;
  21.     /////////////////////////////
  22.     // lecture de l'header
  23.     /////////////////////////////
  24.    
  25.     fread(header,4,1,in);
  26.     if (strcmp(header,"RIFF" ))
  27.     {
  28.         writeError("file is not a valid RIFF file" );
  29.         return SB_BADFORMAT;
  30.     }
  31.     unsigned int tInt;
  32.     fread(&tInt,4,1,in);
  33.     fread(header,4,1,in);
  34.     if (strcmp(header,"WAVE" ))
  35.     {
  36.         writeError("file  is not a valid WAV file" );
  37.         return SB_BADFORMAT;
  38.     }
  39.    
  40.     fread(header,4,1,in);       //contient "fmt "
  41.     //////////////////////////////////////
  42.     // lecture des infos relative au son
  43.     /////////////////////////////////////
  44.     fread(&formatLenght,4,1,in);
  45.     unsigned short machin;
  46.     fread(&machin,2,1,in);
  47.  
  48.    
  49.     fread(&numberOfChannel, sizeof(short),1,in);  //1 mono, 2 stereo
  50.     fread(&sampleRate, sizeof(DWORD), 1, in);   //genre 44100, 22050, etc...
  51.     fread(&avgBytePerSec, sizeof(WORD), 1, in);
  52.     fread(&blockAlign, sizeof(DWORD), 1, in);     //alignement (?)
  53.     int tttt = ftell(in);
  54.     fread(&nbBits, sizeof(WORD), 1, in);    //8 bit ou 16 bit ?
  55. ///////////////////////////////////
  56. //saut pour changer de chunk
  57. ///////////////////////////////////
  58.     fseek(in,formatLenght + 20 + start,SEEK_SET);
  59.     fread(header, sizeof(BYTE), 4, in);    //contient 'data'
  60.     fread(&size, sizeof(DWORD), 1, in);    //taille du son
  61. if (!strcmp(header,"fact" ))
  62. {
  63.  //pas la moindre idée de ce qu'est le chunk 'fact'
  64.  //je le saute  
  65.  fseek(in,size,SEEK_CUR);
  66.  fread(header, sizeof(BYTE), 4, in);    //contient 'data'
  67.  fread(&size, sizeof(DWORD), 1, in);    //taille du son
  68. }
  69. //donc la, on est sur le chunk 'data'
  70. //contenant le son  
  71.     //allocation du son
  72.     dataBuffer = new unsigned char[size];
  73.     fread(dataBuffer,size,1,in);
  74.      
  75.     return SB_OK;
  76. }


 
 
Ensuite t'as plus qu'a creer un buffer dsound qui correspont au infos, recopier le champ dataBuffer dedans  et vala

 

[edtdd]--Message édité par chrisbk--[/edtdd]

karlkox Sinon tu as aussi le SDK (outils de développement) ou l'on explique tout ca, exemple a l'appuye (me SDK se trouve sur le site de Microsoft)
Jcom sinon t'as un cours en anglais là :
 
http://www.2dgame.nl/Tutorial_sound_music.asp
Jcom je connais pas spécialement directsound mais si tu veut juste lire un fichier .wav, tu peut aussi bien te servir de l'api win32 avec la fonction PlaySound. bien sur, ça n'a rien à voir au niveau perfs :)
ddr128 bonjour,  
je voudrais savoir comment faire pour jouer un fichier wav avec directsound.
quelqu'un aurait-il un bout de code ? merci

Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR