【问题标题】:How can I convert JavaScript float PCM audio array to little endian byte string?如何将 JavaScript 浮点 PCM 音频数组转换为小端字节字符串?
【发布时间】:2016-09-01 15:08:58
【问题描述】:

我想在 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;
}

【问题讨论】:

    标签: javascript arrays audio pcm endianness


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2012-05-06
      • 1970-01-01
      • 2012-04-06
      • 2011-09-08
      • 1970-01-01
      • 2011-11-25
      • 2019-09-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多