【问题标题】:BinaryJs + Audio API schedule array buffersBinaryJs + 音频 API 调度数组缓冲区
【发布时间】:2014-10-14 04:44:36
【问题描述】:

我有一个 node.js 服务器流式传输一些 ArrayBuffers:

var BinaryServer = require('binaryjs').BinaryServer;
var fs = require('fs');

var server = BinaryServer({port: 2000});

server.on('connection', function(client){
  var file = fs.createReadStream(__dirname + '/music/02 Enter Sandman.mp3');
  client.send(file);
});

在客户端,我正在听这些块并尝试一个接一个地播放它们:

var client = new BinaryClient('ws://localhost:2000');

var context = new AudioContext();

var source = context.createBufferSource();
source.connect(context.destination);

var audioStart = 0;
var audioStop = 0;

client.on('stream', function(stream, meta)
{
    stream.on('data', function(data)
    {
        var audio = new Float32Array(data);
        var audioBuffer = context.createBuffer(1, audio.length, 44100);

        audioBuffer.getChannelData(0).set(audio);

        audioBuffer = context.createBuffer(data, true);

        audioStop += audioBuffer.duration;

        source = context.createBufferSource();
        source.connect(context.destination);
        source.buffer = audioBuffer;
        source.start(audioStart);
        //source.stop(audioStop);

        console.log(audioStart + " - " + audioStop);

        audioStart += audioBuffer.duration;
    });
});

我经常收到此错误:Uncaught InvalidStateError: Failed to execute 'start' on 'AudioBufferSourceNode': cannot call start more than once.

只播放第一个块

有人可以解释一下这应该如何工作吗?

谢谢!

【问题讨论】:

    标签: javascript node.js api audio web


    【解决方案1】:

    问题来自 Web Audio API,您无法在同一频道中加载两个或多个源。

    您可以通过以下方式断开源:source.disconnect(); 并重新联系他:source.connect(context.destination);

    更多信息在这里:https://developer.mozilla.org/en-US/docs/Web/API/Web_Audio_API

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-02
      • 2016-04-26
      相关资源
      最近更新 更多