1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
|
Snd->getLength(&lenbytes, FMOD_TIMEUNIT_PCMBYTES);
FMOD_SOUND_FORMAT format;
FMOD_SOUND_TYPE type;
int channel, bits;
Snd->getFormat(&type, &format, &channel, &bits);
FMOD_RESULT result;
result = Snd->lock(0, lenbytes, &ptr1, &ptr2, &len1, &len2);
//lecture du fichier hexa
//le msb est en seconde position
//si plusieur channels, les lsb sont ensemble, suivi des msb.
std::vector<double> buffer;
if(channel==1 && format == FMOD_SOUND_FORMAT_PCM16){ //si un seul channel et donnée sur 16bits
buffer.resize(lenbytes/2);//nombre données sur 16bits est 2 fois plus petit que le nombre de données sur 8bits
unsigned char* p = (unsigned char*)ptr1;
for(int ii=0; ii<lenbytes/2; ii++){
//recuperation de la valeur binaire, et passage en double signée
buffer[ii]=(double)(((unsigned char)(*(p+1))<<8 | (unsigned char)(*p) )<<16)/pow(2,16);
//normalisation entre -1 et 1;
buffer[ii]/=32768;
p+=2;
}
}
Snd->unlock(ptr1, ptr2, len1, len2); |
Partager