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 :
- class soundBuffer
- {
- ..
- unsigned char *dataBuffer;
- unsigned short numberOfChannel;
- unsigned short avgBytePerSec;
- unsigned int blockAlign;
- unsigned int sampleRate;
- unsigned short nbBits;
- unsigned int size;
- }
- int soundBuffer::loadFromWav(FILE *in)
- {
- if (!in)
- return SB_FILENOTFOUND;
- int start = ftell(in);
- //on commence la lecture du .wav
- char header[10];
- memset(header,0,10);
- unsigned int formatLenght;
- /////////////////////////////
- // lecture de l'header
- /////////////////////////////
-
- fread(header,4,1,in);
- if (strcmp(header,"RIFF" ))
- {
- writeError("file is not a valid RIFF file" );
- return SB_BADFORMAT;
- }
- unsigned int tInt;
- fread(&tInt,4,1,in);
- fread(header,4,1,in);
- if (strcmp(header,"WAVE" ))
- {
- writeError("file is not a valid WAV file" );
- return SB_BADFORMAT;
- }
-
- fread(header,4,1,in); //contient "fmt "
- //////////////////////////////////////
- // lecture des infos relative au son
- /////////////////////////////////////
- fread(&formatLenght,4,1,in);
- unsigned short machin;
- fread(&machin,2,1,in);
-
-
- fread(&numberOfChannel, sizeof(short),1,in); //1 mono, 2 stereo
- fread(&sampleRate, sizeof(DWORD), 1, in); //genre 44100, 22050, etc...
- fread(&avgBytePerSec, sizeof(WORD), 1, in);
- fread(&blockAlign, sizeof(DWORD), 1, in); //alignement (?)
- int tttt = ftell(in);
- fread(&nbBits, sizeof(WORD), 1, in); //8 bit ou 16 bit ?
- ///////////////////////////////////
- //saut pour changer de chunk
- ///////////////////////////////////
- fseek(in,formatLenght + 20 + start,SEEK_SET);
- fread(header, sizeof(BYTE), 4, in); //contient 'data'
- fread(&size, sizeof(DWORD), 1, in); //taille du son
- if (!strcmp(header,"fact" ))
- {
- //pas la moindre idée de ce qu'est le chunk 'fact'
- //je le saute
- fseek(in,size,SEEK_CUR);
- fread(header, sizeof(BYTE), 4, in); //contient 'data'
- fread(&size, sizeof(DWORD), 1, in); //taille du son
- }
- //donc la, on est sur le chunk 'data'
- //contenant le son
- //allocation du son
- dataBuffer = new unsigned char[size];
- fread(dataBuffer,size,1,in);
-
- return SB_OK;
- }
|
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] |