Mon application transmet les données binaires PCM du serveur à l'API Web Audio.Pourquoi mon code de diffusion audio JS est-il différent sur les systèmes x86 et x86_64?
Pour normaliser l'audio, j'utilise un DataView pour lancer les données entrantes à Int16, diviser chaque échantillon par 32768, avant de les jeter retour à Float32 pour la lecture:
var data = new DataView(arrayBuffer);
var tempArray = new Int16Array(data.byteLength/Int16Array.BYTES_PER_ELEMENT);
var len = tempArray.length;
for (var jj = 0; jj < len; ++jj) {
tempArray[jj] = data.getInt16(jj * Int16Array.BYTES_PER_ELEMENT, true);
}
var bufferToPlay = new Float32Array(tempArray.length);
var channelCounter = 0;
for (var i = 0; i < tempArray.length;) {
var normalizedAudio = tempArray[i]/32768;
i = i + 1;
bufferToPlay[channelCounter] = normalizedAudio;
channelCounter++;
}
Voici les bizarreries:
Lorsque je l'exécute sur ma machine Win 64 bits, l'audio est irréprochable. Mais quand j'utilise mon ancienne machine Win XP 32 bits, l'audio est plein de ce qui ressemble à des artefacts de rééchantillonnage/conversion de bits. J'ai lu beaucoup de choses sur l'endianness, mais les deux machines sont Pentium, alors les deux devraient être little-endian, n'est-ce pas? Alors, comment est-ce possible?
Merci de votre participation. Il s'avère que c'était un décalage de taux d'échantillonnage de carte son. – user3174541