2012-04-20 9 views
5

私は、オーディオエレメントをcreateMediaElementSourceを使用してウェブオーディオAPIに接続して動作させることを実験しましたが、オーディオの再生レートを変更する必要がありますタグと私は仕事にそれを得ることができませんでした。ウェブオーディオAPIに接続されたオーディオエレメントのplaybackRateを設定する

以下のコードを実行しようとすると、再生速度を設定する行のコメントを解除するまで動作することがわかります。このラインがオーディオに入るとミュートされます。

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/ - Chrome:バージョン22.0.1229.94 m –

答えて

1

これはどのブラウザでテストしていますか?これはまだFirefoxでは実装されていないようですが、Chromeで作業する必要があります。 playbackRateを実装するための

Mozillaのバグ: https://bugzilla.mozilla.org/show_bug.cgi?id=495040

+0

私はクロムを使用しています。 Firefoxはオーディオタグをサポートしていますが、WebオーディオAPIはサポートしていません。私のコードでは両方の技術を使用していますので、これはFirefox上では動作しません。 –

+0

chromeでは、playbackRateはスタンドアロンのオーディオタグで動作しますが、私がしようとしているのは、createMediaElementSourceを使用してWebオーディオAPIに接続されているオーディオ要素で動作するようにすることです。それは私が働くことができなかった部分です。 –

1

あなたがオーディオの再生が開始した後に再生速度を設定する必要があります。あなたは、有効なcurrentTimetimeupdateイベントを取得するまで、私はこの仕事をするために発見した唯一のポータブルな方法は、待っていることである:再生速度が現在のAndroidとChrome(デスクトップ上)その上でサポートされていないこと

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

注意0.5未満の再生レートはサポートしていません。

+0

これはバグのようです。この仕様では、最初の再生後までオーディオの再生レートを設定できないと指定していますか? – idbehold

+0

spec(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

+0

['defaultPlaybackRate'](http:// www。 w3.org/html/wg/drafts/html/master/embedded-content-0.html#dom-media-defaultplaybackrate)? – idbehold

関連する問題