取消淡出音频然后淡入-Web Audio API

时间:2018-09-01 14:30:42

标签: javascript html5-audio web-audio web-audio-api

我想开始淡出,但是可以取消它并从当前的音量级别淡入。

首先,我尝试了这一点:

if event.type == pygame.KEYDOWN:
    if event.key == pygame.K_LEFT :
        glTranslatef(-1.0,0,0.0)
    if event.key == pygame.K_RIGHT :
        glTranslatef(1.0,0,0.0)
    if event.key == pygame.K_UP :
        glTranslatef(0.0,0,-1.0)
    if event.key == pygame.K_DOWN :
        glTranslatef(0.0,0,1.0)

fiddle

在Firefox或Chrome中均不起作用。淡出开始,然后当超时功能触发时,增益值仅跳回到1。

然后我发现此版本可在Chrome中使用:

gainNode.gain.exponentialRampToValueAtTime(0.001, audioCtx.currentTime + 5);
setTimeout(function(){
    gainNode.gain.cancelScheduledValues(audioCtx.currentTime);
    gainNode.gain.exponentialRampToValueAtTime(1, audioCtx.currentTime + 5);
}, 3000);

fiddle

...但不是在Firefox中,因为它返回的是增益的最后一个设置值,而不是计算所得的值(即1),因此它从1转换为1,因此结果与我的第一次尝试相同

所以这些让我想到了问题...

  • 我的上一个解决方案规范是否兼容,或者只是一个Chrome错误?
  • 是否有跨浏览器(至少是Firefox + Chrome)解决方案?
  • 是否有跨浏览器解决方案来解决规范兼容的问题?

1 个答案:

答案 0 :(得分:1)

我认为您需要“ cancelAndHoldAtTime()”(https://webaudio.github.io/web-audio-api/#dom-audioparam-cancelandholdattime)。不幸的是,尚未在Firefox中实现。