数据类型间的转换
Float32Array;Float64Array
Int8Array;Int16Array;Int32Array
Uint8Array;Uint16Array
ArrayBuffer 转 Float32Array
var convertBlock(buffer) {
var incomingData = new Uint8Array(buffer);
var i, l = incomingData.length;
var outputData = new Float32Array(incomingData.length);
for (i = 0; i < l; i++) {
outputData[i] = (incomingData[i] - 128) / 128.0;
}
return outputData;
}
Float32Array 转 Int16Array
function Float32Array2Int16Array(float32Array) {
var data = float32Array;
var len = data.length, i = 0;
var dataAsInt16Array = new Int16Array(len);
while(i < len){
dataAsInt16Array[i] = convert(data[i++]);
}
function convert(n) {
var v = n < 0 ? n * 32768 : n * 32767;
return Math.max(-32768, Math.min(32768, v));
}
return dataAsInt16Array
}
Int16Array 转 Float32Array
function Int16Array2Float32Array(int16Array){
var data = int16Array;
var len = data.length, i = 0;
var dataAsFloat32Array = new Float32Array(len);
while(i < len){
dataAsFloat32Array[i] = convert(data[i++]);
}
function convert(n) {
var v = n < 0 ? n / 32768 : n / 32767;
return Math.max(-1, Math.min(1, v));
}
return dataAsFloat32Array
}
Float32Array 转 Uint16Array
function Float32Array2Uint16Array(float32Array) {
var data = float32Array;
var len = data.length, i = 0;
var dataAsUint16Array = new Int16Array(len);
while(i < len){
dataAsUint16Array[i] = convert(data[i++]);
}
function convert(n) {
var v = n < 0 ? n * 32768 : n * 32767;
return Math.max(-32768, Math.min(32768, v));
}
return dataAsUint16Array
}
Uint16Array 转 Float32Array
function Uint16Array2Float32Array(uint16Array){
var data = uint16Array;
var len = data.length, i = 0;
var dataAsFloat32Array = new Float32Array(len);
while(i < len){
dataAsFloat32Array[i] = convert(data[i++]);
}
function convert(n) {
var v = n < 0 ? n / 32768 : n / 32767;
return Math.max(-1, Math.min(1, v));
}
return dataAsFloat32Array
}
Float32Array 转 Uint8Array
function float32Array2Uint8Array(float32Array) {
const len = float32Array.length
var output = new Uint8Array(len)
for (var i = 0; i < len; i++) {
var tmp = Math.max(-1, Math.min(1, float32Array[i]))
tmp = tmp < 0 ? tmp * 0x8000 : tmp * 0x7fff
tmp = tmp / 256
output[i] = tmp + 128
}
return output
}
Uint8Array 转 Float32Array
function uint8Array2Float32Array(uint8Array) {
var i
var l = uint8Array.length
var outputData = new Float32Array(uint8Array.length)
for (i = 0; i < l; i++) {
outputData[i] = (uint8Array[i] - 128) / 128.0
}
return outputData
}
Float32Array 转 Int8Array
function float32Array2Int8Array(float32Array) {
const len = float32Array.length
var output = new Int8Array(len)
for (var i = 0; i < len; i++) {
var tmp = Math.max(-1, Math.min(1, float32Array[i]))
tmp = tmp < 0 ? tmp * 0x8000 : tmp * 0x7fff
tmp = tmp / 256
output[i] = tmp + 128
}
return output
}
Int8Array 转 Float32Array
function Int8Array2Float32Array(int8Array) {
var i
var l = int8Array.length
var outputData = new Float32Array(int8Array.length)
for (i = 0; i < l; i++) {
outputData[i] = (int8Array[i] - 128) / 128.0
}
return outputData
}