【问题标题】:play pcm data by webAudio API通过 webAudio API 播放 pcm 数据
【发布时间】:2012-02-01 09:48:42
【问题描述】:

您好,我正在研究 WebAudio API。我阅读了HTML5 Web Audio API, porting from javax.sound and getting distortion 链接,但没有像在 java API 中那样获得良好的质量。我正在从服务器以有符号字节获取 PCM 数据。然后我必须把它改成 16 位格式。为了改变我正在使用( firstbyte

【问题讨论】:

  • 代码 sn-ps 总是有帮助的。
  • 谁能告诉我如何将有符号字节数组转换为 Float32Array ?
  • 不太自豪地对此表示赞同,但这是一个很好的问题,因为官方文档跳过了 play PCM 部分,这将是直接函数,而专注于 decodeAudioData(),这更像是一个“帮手”。

标签: html google-chrome javascript web-audio-api


【解决方案1】:

Web Audio API 使用从 -1 到 1 的 32 位签名浮点数,因此我将(希望)向您展示如何操作,而不是您在问题中提到的 16 位。

假设您的样本数组称为 samples 并存储为从 -128 到 127 的 2 的补码,我认为这应该可行:

var floats = new Float32Array(samples.length);
samples.forEach(function( sample, i ) {
  floats[i] = sample < 0 ? sample / 0x80 : sample / 0x7F;
});

然后你可以这样做:

var ac = new webkitAudioContext()
  , ab = ac.createBuffer(1, floats.length, ac.sampleRate)
  , bs = ac.createBufferSource();
ab.getChannelData(0).set(floats);
bs.buffer = ab;
bs.connect(ac.destination);
bs.start(0);

【讨论】:

  • 我认为您缺少“bs.buffer = ab;”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多