Web Audio API onended事件未激发
Web Audio API onended event does not fire
我对节点流媒体的世界非常陌生,所以请原谅我缺乏信息。
我有一个简单的Node服务器,它接收文件流(使用BinaryJS),然后将其作为ArrayBuffer重新广播回客户端。本质上,假设我正在从服务器获取ArrayBuffer,并且我想回放它。我目前正在对它进行解码,创建一个新的源,并安排每次播放。这一切似乎都奏效了。
然而,我想在每次块结束时触发另一个函数。不过,"一体"活动似乎并没有启动。有人能帮忙吗?谢谢
client.on('open', function() {
var stream = client.send(file)
client.on('stream', function(stream) {
var nextTime = 0.01
stream.on('data', function(data) {
console.log('Receiving data from server')
context.decodeAudioData(data, function(audioBuffer) {
var source = context.createBufferSource()
source.buffer = song[song.length-1]
source.connect(context.destination);
source.onended = function() {
console.log('Buffer depleted')
}
source.start(nextTime)
nextTime += audioBuffer.duration - 0.01
})
})
stream.on('end', function() {
console.log('End of stream, ' + current)
});
})
})
在挣扎了很长一段时间并在网上查看了很多答案后,我发现我的代码不起作用的原因是因为我一直在重写"源"变量。由于它只是一个实例(C++人员的指针),所以它只指向最新的源代码。从本质上讲,在事件触发之前,它已被覆盖。
我通过将所有源和缓冲区"缓存"到数组来解决这个问题。
client.on('open', function() {
var stream = client.send(file)
client.on('stream', function(stream) {
stream.on('data', function(data) {
console.log('Receiving data from server')
context.decodeAudioData(data, function(audioBuffer) {
sources.push(context.createBufferSource())
song.push(audioBuffer)
sources[sources.length-1].buffer = song[song.length-1]
sources[sources.length-1].connect(context.destination);
sources[sources.length-1].onended = function() {
console.log('Buffer depleted')
current += 1;
}
sources[sources.length-1].start(nextTime)
nextTime += audioBuffer.duration - 0.01
})
})
stream.on('end', function() {
console.log('End of stream, ' + current)
});
})
})
这一次,我实际上是在将这些值推送到"sources"数组中,因此它没有被覆盖,事件也正确地触发了。
我不确定这是否是最有效的方法(我几乎不认为是),但它目前解决了我的问题。
如果有人有更好的解决方案,请告诉我:)
相关文章:
- 分派点击事件并保留击键修饰符
- 模糊事件的Javascript测试
- keyup事件处理程序更改焦点不适用于快速键入
- 使用 jQuery 的 .on 函数如何获取事件的原始元素
- 如何使Javascript动态html表及其上的事件
- 使用类从一个标记中双击事件
- 如何在未直接触发的情况下停止事件
- 如何在elfinder插件(一个文件管理器插件)上获得上传前事件
- 对iPad上的点击事件反应缓慢
- 事件和状态
- Fancybox是否将Click事件静音
- 主干-不管怎样,检查事件以前是否绑定过
- 从控制器返回后Ajax启动事件激发
- 如何从画布上的某个移动事件中获取X和Y
- Jquery:未触发select事件
- JsFiddle上的鼠标事件不起作用
- Web Audio API onended事件未激发
- onEnded事件没有在dojo对话框中触发
- 不能循环播放视频(使用onended事件)
- Reactjs video onEnded事件未触发