javascript - BinaryJs + 音频 API 调度数组缓冲区

标签 javascript node.js api audio web

我有一个 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/

相关文章:

javascript - 从 Javascript 中的对象中删除空白属性

json - 如何将授权 header 从 SQL Server 传递到 API 以获取 JSON?

javascript - php Curl - JS 刷新 API 获取调用

javascript - 麻烦理解? :, ?=、?! 和反向引用。 .

JavaScript 浏览器关闭事件

javascript - 使用 Javascript 的多个日期时间之间的平均天数

node.js - 为什么 Google map 标记和信息窗口不居中?

javascript - 在 Node.js 中获取没有扩展名的文件的 MIME 类型

node.js - sequelize getter 和 setter 是如何工作的?

php - 从 Google Analytics 获取所有数据