如何将JavaScript float PCM音频数组转换为little endian字节字符串?

时间:2016-09-01 15:08:59

标签: javascript arrays audio pcm endianness

我想在JavaScript中将音频浮点数组转换为字节字符串。转换为字节后,我期待一个两位数字,然后我可以追加到一个字符串,看看这个例子的输出:

Input: [0.0007124987314455211, 0.0005752402357757092, -0.0010658394312486053, -0.0004562278045341372 ,...]
Output: '\x02\x04\x35...'

但我得到4位数字。如何正确转换为字节?

function floatToByteString(input){
  //first convert to 16 bit int array
  var intarray = new Int16Array(input.length);
  for (var i = 0; i < input.length; i++){
    var s = Math.max(-1, Math.min(1, input[i]));
    var newint = s < 0 ? s * 0x8000 : s * 0x7FFF;
    intarray[i] = newint;
  }

  //second: convert 16 bit int array to little endian byte string
  var bytestring = "";
  for (var i = 0; i < input.length; i++){
    var thisint = intarray[i]
    var bytel = thisint & 0xff;
    var byteb = (thisint >> 8) & 0xff;
    bytestring += "\\x"+bytel + "" + byteb
  }

  return bytestring;
}

1 个答案:

答案 0 :(得分:0)

您将以这种方式生成非常大的字符串,包含大量不必要的数据。如果它绝对必须是一个字符串,base64会更好。此外,您的临时int数组将使用不必要的内存并减慢速度。

16位值生成4位十六进制值。那么你想要的是4位数字吗?