La lecture des sons sur les machines SGI fonctionnait bien pour
quasiment tous les sons sauf pour ceux échantillonné en flottants, et
nécessitant une inversion des octets (Big Little
Endian).
Après étude du code existant, je me suis apperçu que la fonction
copyShortToPlay effectue la conversion en short et l'inversion
éventuelle de l'ordre des octets.
Il s'est avéré qu'elle était éronnée dans le cas des échantillons en
float. En effet, 2 erreurs se trouvaient dans la partie
DATA_TYPE_FLOAT :
J'ai donc aboutit au code suivant (où pvalues pointe sur le buffer à jouer) :
case DATA_TYPE_FLOAT: if (buffer->swap) for (i = 0; i < length && pvalues < pvaluesMax; i++) { float tmp = *((float *) pvalues); swapFloat(&tmp); tmp = tmp * 32768.0 * level; pvalues += step; *(ptr++) = (short) tmp; } else for (i = 0; i < length && pvalues < pvaluesMax; i++) { *(ptr++) = (short) (*((float *) pvalues) * 32768.0 * level); pvalues += step; } break;