Javascript 检测声音以3.5秒音频结束?

Javascript 检测声音以3.5秒音频结束?,javascript,audio,three.js,Javascript,Audio,Three.js,我想检测声音何时结束,但我发现所有的例子都不起作用 // Create sound var sound1 = new THREE.PositionalAudio( listener ); sound1.load( 'sounds/Example.ogg' ); sound1.setRefDistance( 30 ); sound1.autoplay = false; sound1.setLoop(false); mesh1.add( sound1 ); // Start sound setTi

我想检测声音何时结束,但我发现所有的例子都不起作用

// Create sound
var sound1 = new THREE.PositionalAudio( listener );
sound1.load( 'sounds/Example.ogg' );
sound1.setRefDistance( 30 );
sound1.autoplay = false;
sound1.setLoop(false);
mesh1.add( sound1 );

// Start sound
setTimeout(function() {
    sound1.play();
}, 2000);

// Try to detect end #1
sound1.onended = function() {
    console.log('sound1 ended #1');
};
// Try to detect end #1
sound1.addEventListener('ended', function() {
    console.log('sound1 ended #2');
});

实时示例:

三个。音频是缓冲区源音频对象的包装

看起来它覆盖了onended事件并将其绑定到自己的函数,所以我们也会这样做:

sound1.source.onended = function() {
    console.log('sound1 ended');
    this.isPlaying = false; /* sets Three wrapper property correctly */
};
我们设置了
isplay=false
,因为这是我们刚刚重写的内容


工作笔:

我必须在2020年解决这个问题。一开始我并没有正确地查看文档,但它似乎是正确列出的

与之前的正确答案类似,但现在有点不同(该解决方案不适用于我):

var sound1=新的三位音频(监听器);
sound1.oneded=()=>console.log(“曲目结束”)
以下是相应的文档:

基本上没有多少:

.onEnded():null

播放完成时自动调用

对我不起作用的事情:

sound1.oneded(()=>{})
el.object3D.source.onended(()=>{})
sound1.source.onended(()=>{});//先前的答复
如果你这样做,你可以截获一个电话,但我认为这不再是必要的:

THREE.Audio.prototype.oneded=function(){
console.warn(“参数到onEnded!”,参数)
};

谢谢!你知道如何检测onLoad/onReady声音事件吗?这有点复杂,我找不到一个好方法来做它,除了覆盖三个函数中的一个。Audio的函数(完成)我将提交一个错误报告,看看暴露其中一些事件的状态。提交的问题。如果还没有更简单的解决方案,我会尝试一下公关,以更简单的方式揭露这些事件。我认为音频在三是相当新的,因为它甚至还没有记录。。。