我一直在尝试使用createMediaElementSource将音频元素连接到网络音频api并让它工作但我需要做的一件事就是改变音频标签的播放速率而我无法做到这一点让它工作。
如果您尝试运行下面的代码,则在您取消注释我们设置播放速率的行之前,您会看到它有效。当这一行在音频中被静音时。
我知道我可以使用source.playbackRate.value在AudioBufferSourceNode上设置播放速率,但这不是我想要做的,我需要在音频元素上设置播放速率。使用createMediaElementSource连接到web音频api所以我没有任何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 :(得分:1)
您使用哪种浏览器进行测试?它似乎尚未在Firefox中实现,但应该在Chrome上使用。
用于实现playbackRate的Mozilla错误: https://bugzilla.mozilla.org/show_bug.cgi?id=495040
答案 1 :(得分:1)
在开始播放音频后,您必须设置播放速率。我发现这项工作的唯一可移植方式是等到您收到有效timeupdate
的{{1}}事件:
currentTime
请注意,Android目前不支持播放率,Chrome(桌面版)不支持低于0.5的播放率。