6

我一直在尝试使用 createMediaElementSource 将音频元素连接到网络音频 api 并让它工作,但我需要做的一件事是改变音频标签的播放速率,但我无法让它工作。

如果您尝试运行下面的代码,您将看到它可以正常工作,直到您取消注释我们设置播放速率的行。当这条线在音频被静音。

我知道我可以使用 source.playbackRate.value 在 AudioBufferSourceNode 上设置播放速率,但这不是我想做的,我需要在使用 createMediaElementSource 连接到网络音频 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);
4

2 回答 2

3

您必须在音频开始播放后设置播放速率。我发现使这项工作的唯一可移植方法是等到您收到timeupdate有效的事件currentTime

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

请注意,Android 目前不支持播放速率,Chrome(桌面版)不支持低于 0.5 的播放速率。

于 2013-05-07T12:41:41.943 回答
1

你用哪个浏览器来测试这个?似乎这还没有在 Firefox 中实现,但应该在 Chrome 上运行。

Mozilla实现playbackRate的bug: https ://bugzilla.mozilla.org/show_bug.cgi?id=495040

于 2012-04-20T03:37:31.493 回答