2012-04-20 81 views
5

我一直在尝试与音频元件连接到使用createMediaElementSource网络音频API的音频元素上设置playbackRate并得到它的工作,但有一点我需要做的是改变音频播放速度标签,我无法让它工作。连接到网络音频API

如果您尝试运行,下面的代码,你会看到,它的作品,直到您取消注释,我们设置播放速度就行了。当这条线在音频中被静音。

我知道我可以使用source.playbackRate.value在AudioBufferSourceNode上设置回放速度,但这不是我想要做的,我需要在音频元素连接到网络时设置回放速度音频api使用createMediaElementSource,所以我没有任何AudioBufferSourceNode。

有没有人设法做到这一点?

var _source, 
    _audio, 
    _context, 
    _gainNode; 

_context = new webkitAudioContext(); 

function play(url) { 
    if (_audio) { 
     _audio.pause(); 
    } 
    _audio = new Audio(url); 
    //_audio.playbackRate = 0.6; 

    setTimeout(function() { 
     if (!_gainNode) { 
      _gainNode = _context.createGainNode(); 
      _gainNode.gain.value = 0.1; 
      _gainNode.connect(_context.destination); 
     } 

     _source = _context.createMediaElementSource(_audio); 
     _source.connect(_gainNode); 

     _audio.play(); 
    }, 0); 

} 

play("http://geo-samples.beatport.com/items/volumes/volume2/items/3000000/200000/40000/9000/400/60/3249465.LOFI.mp3"); 

setTimeout(function() { 
    _audio.pause(); 
}, 4000); 
+0

奇怪的是,这似乎在Chrome中适用于我。 http://jsfiddle.net/9gLKM/ - 铬:版本22.0.1229.94米 – 2012-10-31 09:54:44

回答

1

您正在使用哪个浏览器来测试它?看来这还没有在Firefox中实现,但应该在Chrome上工作。

Mozilla的漏洞实施playbackRate: https://bugzilla.mozilla.org/show_bug.cgi?id=495040

+0

我使用铬。 Firefox支持音频标签,但不支持网络音频API,我的代码使用这两种技术,所以这不会在Firefox上运行。 – 2012-04-20 07:19:49

+0

Chrome中的playbackRate可以在独立的音频标签上工作,但是我想要做的是使它在使用createMediaElementSource连接到Web音频API的音频元素上工作。这是我无法工作的部分。 – 2012-04-20 07:21:56

1

必须设置播放速度之后的音频已经开始播放。我发现,使这项工作的唯一可移植的方法,是通过等待,直到你得到一个timeupdate事件与有效currentTime

_audio.addEventListener('timeupdate', function(){ 
    _if(!isNaN(audio.currentTime)) { 
     _audio.playbackRate = 0.6; 
    } 
}); 

注意,播放速率目前不支持在Android和Chrome的那个(在桌面上)不支持低于0.5的播放速率。

+0

这看起来像一个错误。规范中的哪些地方规定,只有在初始播放后才能设置音频播放速率? – idbehold 2013-05-07 13:05:36

+0

当我阅读规范(http://www.w3.org/html/wg/drafts/html/master/embedded-content-0.html#dom-media-playbackrate)时,其意图是“defaultPlaybackRate ''在播放开始后立即(重新)设置''playbackRate''。之后,播放速率可以使用“playbackRate”动态设置。不得不这样做,因为我上面写的是有点奇怪,但唉 - 这是唯一的作品。相信我:)(我是https://github.com/Notalib/LYT的当前作者,在这个问题上花了大约40个小时。) – mzedeler 2013-05-07 21:12:12

+0

设置['defaultPlaybackRate'](http:// www。 w3.org/html/wg/drafts/html/master/embedded-content-0.html#dom-media-defaultplaybackrate)? – idbehold 2013-05-08 19:12:42