我有一个 Node.js 服务器流式传输一些 ArrayBuffer:
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);
});
在客户端上,我正在听这些 block 并尝试一个接一个地播放它们:
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: 无法在“AudioBufferSourceNode”上执行“start”:无法多次调用 start。
仅播放第一个 block
有人可以向我解释一下这是如何工作的吗?
谢谢!
最佳答案
问题出在 Web Audio API 上,您无法在同一 channel 中加载两个或多个源。
您可以通过以下方式断开源连接:source.disconnect();
并使用以下命令重新连接他: source.connect(context.destination);
更多信息请点击:https://developer.mozilla.org/en-US/docs/Web/API/Web_Audio_API
关于javascript - BinaryJs + 音频 API 调度数组缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24356747/