2017-06-14 8 views
0

私は<audio>要素を持っています。曲が非常に特定のポイントに達すると、別の特定のポイントをシームレスに探して再生してほしい。Javascript Audio - ある位置にいるときに別の位置に移動する

まず、私が開いていると最高のオーディオAPIは、それがDOM Audio Objectまたは(新しい)Web Audio APIあるかどうか、これを実現するために使用するためにどのように私は方向を探しています。

(可能な場合)ソングの特定のポイントで発生するようにイベントリスナーを設定する最善の方法はありますか?私は歌を演奏し、別のタイマーを保つべきですか(それは非同期でなければなりません)?

以下に、基本的な例を示します。この例では再生する必要がありますが、オーディオの特定のポイントでは、シームレスにスキップして再生を続ける必要があります。

ありがとうございました!

$('#player')[0].play(); 
 

 
//$('#player')[0].currentTime = 0.5;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<audio controls id="player"> 
 
    <source src="https://www.w3schools.com/html/horse.ogg" type="audio/ogg"> 
 
    <source src="https://www.w3schools.com/html/horse.mp3" type="audio/mpeg"> 
 
    Your browser does not support the audio element. 
 
</audio>

答えて

0

私はあなたのオーディオをより細かく制御を得るためにWeb Audio APIを使用したいと思います。ここで

はMDNからいくつかのコードです:

function getData() { 
    source = audioCtx.createBufferSource(); 
    request = new XMLHttpRequest(); 

    request.open('GET', 'yourfilehere.wav', true); 

    request.responseType = 'arraybuffer'; 


    request.onload = function() { 
    var audioData = request.response; 

    audioCtx.decodeAudioData(audioData, function(buffer) { 
     myBuffer = buffer; 
     source.buffer = myBuffer; 
     source.connect(audioCtx.destination); 
     source.loop = true; 
     source.loopEnd = //your endOffsetInSeconds 
     }, 

     function(e){"Error with decoding audio data" + e.err}); 

    } 

    request.send(); 
} 

あなたが私たちのデータをフェッチする方法はあなた次第ですが、重要な部分は、trueにあなたのsource.loopを設定して、秒単位でオフセットへのごsource.loopEndされます。

+0

ありがとうございます。私はちょっと私がこれをチェーンする方法としてちょっと混乱しています。たとえば、曲が始まって1秒から7秒にスキップしたければ、10秒まで再生してから12秒にスキップし、再生を続けますか? 私は1つのオーディオファイルを扱っています。あなたが私に与えてくれた例から、それは歌を演奏しませんが、それが 'endOffsetInSeconds'に来ると、それはちょうど冒頭で再び始まりますか? – Toby

+0

私はあなたの質問を誤解しているはずです。私はもう一度見てみましょう –

+0

正直言って、私はそうするのが最も簡単なことは、元の部分から切り抜いた部分から新しいオーディオファイルを作成することだと思います。お試しください[audacity](http://www.audacityteam.org/) –

関連する問題