6

createMediaElementSourceを使用してオーディオ要素をWebオーディオ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);
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 では動作するはずです。

PlaybackRate の実装に関する Mozilla のバグ: https://bugzilla.mozilla.org/show_bug.cgi?id=495040

于 2012-04-20T03:37:31.493 に答える