【发布时间】:2014-12-12 07:00:57
【问题描述】:
我有一个软件定义的收音机播放来自 WebSocket 服务器的音频流,以及一个使用数据并使用 AudioBufferSourceNode 播放的客户端。
它主要是有效的。唯一的问题是每隔几秒就会出现一次瞬时丢失,这可能是由创建每个连续的 AudioBufferSourceNode 实例所涉及的开销引起的。 WebAudio 草案规范说 AudioBuffer 应该用于播放不超过一分钟左右的声音,并且应该使用 MediaElementSourceNode 播放更长的声音。这对我不起作用,因为我需要从 WebSocket 源播放音频,而且我不知道如何让媒体元素(例如 HTML5 音频元素)与 WebSocket 一起工作。
也许我正在尝试通过将 AudioBufferSourceNode 实例串在一起并期望它们无缝地一个接一个地播放来做 WebAudio 无法支持的事情。但似乎应该有一种方法可以通过 WebAudio 播放 WebSocket 数据,而且确实auroa.js(连同aurora-websocket.js 插件)似乎可以做到这一点。我使用 aurora.js 编写了一个客户端,但遇到了其他问题,为此我在 Github 上创建了一个 auroa.js 问题。同时,我希望我可以在我的客户端中完成他们似乎已经完成的工作,使用 WebAudio 从 WebSocket 无缝播放数据。
这是我的代码的省略视图,以显示我正在使用的实现。
var context = ...
var gainNode = ...
var playBuffer = function(buf) {
var source = context.createBufferSource();
source.buffer = buf;
source.connect(gainNode);
source.start();
};
var socket = ...
socket.binaryType = 'arraybuffer';
socket.addBinaryListener(function (data) {
context.decodeAudioData(data, playBuffer);
});
socket.connect...
我还尝试了一个实现,其中我跟踪来自 WebSocket 的传入缓冲区,并在从前一个 AudioBufferSourceNode 接收到“结束”事件之后通过 AudioBufferSourceNode 接收到的顺序播放它们。这与上述实现具有相同的丢失问题。
【问题讨论】:
标签: javascript websocket web-audio-api aurora.js