【问题标题】:Play raw audio with JavaScript使用 JavaScript 播放原始音频
【发布时间】:2018-08-21 02:01:47
【问题描述】:

我有一串这样的数字

-0.00015259254737998596,-0.00009155552842799158,0.00009155552842799158,0.00021362956633198035,0.0003662221137119663,0.0003967406231879635,0.00024414807580797754,0.00012207403790398877,0.00012207403790398877,0.00012207403790398877,0.0003357036042359691,0.0003357036042359691,0.00018311105685598315,0.00003051850947599719,0,-0.00012207403790398877,0.00006103701895199438,0.00027466658528397473,0.0003967406231879635,0.0003967406231879635,0.0003967406231879635,0.0003967406231879635,0.0003967406231879635,0.0003662221137119663,0.0004882961516159551,0.0004577776421399579,0.00027466658528397473,0.00003051850947599719,-0.00027466658528397473....

这应该代表一个音频流。我从here 得到了它们,我已经通过网络传输了它们,现在我正在尝试播放实际的声音,我从here 得到了一个 sn-p,但我得到了Uncaught (in promise) DOMException: Unable to decode audio data

我觉得我错过了很多我只是希望这能像魔术一样工作,但事实并非如此......

我的代码

var ws = new WebSocket("ws://....");
ws.onmessage = function (event) {
  playByteArray(event.data);
}

var context = new AudioContext();
function playByteArray(byteArray) {

  var arrayBuffer = new ArrayBuffer(byteArray.length);
  var bufferView = new Uint8Array(arrayBuffer);
  for (var i = 0; i < byteArray.length; i++) {
    bufferView[i] = byteArray[i];
  }

  context.decodeAudioData(arrayBuffer, function (buffer) {
    buf = buffer;
    play();
  });
}

// Play the loaded file
function play() {
  // Create a source node from the buffer
  var source = context.createBufferSource();
  source.buffer = buf;
  // Connect to the final output node (the speakers)
  source.connect(context.destination);
  // Play immediately
  source.start(0);
}

还有广播部分

var ws = new WebSocket("ws://.....");
window.addEventListener("audioinput", function onAudioInput(evt) {
  if (ws) {
    ws.send(evt.data);
  }
}, false);

audioinput.start({
    bufferSize: 8192
});

【问题讨论】:

    标签: javascript audio


    【解决方案1】:

    您处理的似乎不是兼容的音频数据格式。您链接到的代码用于播放字节数组,在这种情况下,您的音频数据应该是一个(更长的)从 0 到 255 的整数字符串。

    你得到的是一个相当短的(如音频数据那样)浮点数字符串。我不知道应该是什么音频格式,但它需要不同的播放器。

    【讨论】:

    • 是的,每条消息大约 170kb 很长,我只是为了发帖截断了它。
    • 来自科尔多瓦插件自述文件:The audio format. Currently PCM_16BIT and PCM_8BIT are supported. 我想我使用的是 16 位的
    • 您可以尝试将这些带符号的浮点数缩放到无符号的 0-255 范围内,看看当您推送数据时会发出什么样的可怕噪音。 :) 至少我们知道它是 PCM 数据。剩下的就是找出采样率和这些浮点数应该覆盖的范围。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多