История изменений
Исправление uin, (текущая версия) :
Короче, давай поговорим об этом в другой раз, ок?
Проблема решена следующим образом
var length = io.sampleFrames, channels = io.channels, data = $.getBytesArray('Uint8', byteOffset, byteLength)
for (let i = 0, x = 0; i < length; i++) {
for (let c = 0; c < channels; c++, x += 4)
bufObj[c][i] = Bytes2Float32((data[x] << 24) + (data[(x + 1)] << 16) + (data[(x + 2)] << 8) + data[(x + 3)]);
}
function Bytes2Float32(bytes) {
var sign = (bytes & 0x80000000) ? -1 : 1;
var exponent = ((bytes >> 23) & 0xFF) - 127;
var significand = (bytes & ~(-1 << 23));
if (exponent == 128)
return sign * ((significand) ? Number.NaN : Number.POSITIVE_INFINITY);
if (exponent == -127) {
if (significand == 0) return sign * 0.0;
exponent = -126;
significand /= (1 << 22);
} else significand = (significand | (1 << 23)) / (1 << 23);
return sign * significand * Math.pow(2, exponent);
}
То есть преобразовывать следовало беззнаковые числа, о чем подсказал оригинальный код на Си
Вот теперь я вижу плюсы статической типизации
Тебе спасибо за наводку, я что то на ту страницу не натыкался при гуглении
Исправление uin, :
Короче, давай поговорим об этом в другой раз, ок?
Проблема решена следующим образом
var length = io.sampleFrames, channels = io.channels, data = $.getBytesArray('Uint8', byteOffset, byteLength)
for (let i = 0, x = 0; i < length; i++) {
for (let c = 0; c < channels; c++, x += 4)
bufObj[c][i] = Bytes2Float32((data[x] << 24) + (data[(x + 1)] << 16) + (data[(x + 2)] << 8) + data[(x + 3)]);
}
}
function Bytes2Float32(bytes) {
var sign = (bytes & 0x80000000) ? -1 : 1;
var exponent = ((bytes >> 23) & 0xFF) - 127;
var significand = (bytes & ~(-1 << 23));
if (exponent == 128)
return sign * ((significand) ? Number.NaN : Number.POSITIVE_INFINITY);
if (exponent == -127) {
if (significand == 0) return sign * 0.0;
exponent = -126;
significand /= (1 << 22);
} else significand = (significand | (1 << 23)) / (1 << 23);
return sign * significand * Math.pow(2, exponent);
}
То есть преобразовывать следовало беззнаковые числа, о чем подсказал оригинальный код на Си
Вот теперь я вижу плюсы статической типизации
Тебе спасибо за наводку, я что то на ту страницу не натыкался при гуглении
Исправление uin, :
Короче, давай поговорим об этом в другой раз, ок?
Проблема решена следующим образом
var length = io.sampleFrames, channels = io.channels, data = $.getBytesArray('Uint8', byteOffset, byteLength)
for (let i = 0, x = 0; i < length; i++) {
for (let c = 0; c < channels; c++, x += 4)
bufObj[c][i] = Bytes2Float32((data[x] << 24) + (data[(x + 1)] << 16) + (data[(x + 2)] << 8) + data[(x + 3)]);
}
}
function Bytes2Float32(bytes) {
var sign = (bytes & 0x80000000) ? -1 : 1;
var exponent = ((bytes >> 23) & 0xFF) - 127;
var significand = (bytes & ~(-1 << 23));
if (exponent == 128)
return sign * ((significand) ? Number.NaN : Number.POSITIVE_INFINITY);
if (exponent == -127) {
if (significand == 0) return sign * 0.0;
exponent = -126;
significand /= (1 << 22);
} else significand = (significand | (1 << 23)) / (1 << 23);
return sign * significand * Math.pow(2, exponent);
}
То есть преобразовывать следовало беззнаковые числа, о чем подсказал оригинальный код на Си
Вот теперь я вижу плюсы статической типазации
Тебе спасибо за наводку, я что то на ту страницу не натыкался при гуглении
Исходная версия uin, :
Короче, давай поговорим об этом в другой раз, ок?
Проблема решена следующим образом
var length = io.sampleFrames, channels = io.channels, data = $.getBytesArray('Uint8', byteOffset, byteLength)
for (let i = 0, x = 0; i < length; i++) {
for (let c = 0; c < channels; c++, x += 4)
bufObj[c][i] = Bytes2Float32((data[x] << 24) + (data[(x + 1)] << 16) + (data[(x + 2)] << 8) + data[(x + 3)]);
}
}
function Bytes2Float32(bytes) {
var sign = (bytes & 0x80000000) ? -1 : 1;
var exponent = ((bytes >> 23) & 0xFF) - 127;
var significand = (bytes & ~(-1 << 23));
if (exponent == 128)
return sign * ((significand) ? Number.NaN : Number.POSITIVE_INFINITY);
if (exponent == -127) {
if (significand == 0) return sign * 0.0;
exponent = -126;
significand /= (1 << 22);
} else significand = (significand | (1 << 23)) / (1 << 23);
return sign * significand * Math.pow(2, exponent);
}
То есть преобразовывать следовало беззнаковые числа, о чем подсказал оригинальный код на Си
Вот теперь я вижу кое какие положительные от статической типазации
Тепбе спасибо за наводку, я что то на ту страницу не натыкался при гуглении