2011-12-23 9 views
10

私はこのオーディオタグをバックグラウンドで再生しています。これは、進捗を数秒でクッキーに保存できます。 しかし、決してそのクッキーからオーディオを開始することはできません。<audio>タグのcurrentTimeを設定していませんか?

$("p#sound audio").currentTime = $.cookie("audioTime"); 

<audio autoplay="autoplay" loop="loop" ontimeupdate="document.getElementById('tracktime').innerHTML = Math.floor(this.currentTime); $.cookie('audioTime', Math.floor(this.currentTime));"> 
    <source src="audio/song.ogg" type="audio/ogg" /> 
    <source src="audio/song.mp3" type="audio/mp3" /> 
    Your browser does not support the audio tag. 
</audio> 
<span id="tracktime">0</span> 

(他のページに継続するため)これは最初から再びロードされている歌で行う必要がありますか?

ありがとうございます!

EDIT:

$("p#sound audio").get[0].currentTime 

に.getで[0]、それはどちらか動作しません。

誰かが私のために明確なことをすることができますか?大変感謝しています!

+0

私は同じ種類の問題を抱えています。 Brian Hadawayが述べたように、コールバックを 'canplay'イベントにバインドすることで、オーディオがロードされたことを確認しました。これでも、 'currentTime'は変更されません。 –

+0

この問題もあります。私のデバッグにはどこに行くのか分かりません。すべてが正しいと思われますが、currentTimeは設定されません。 – urbananimal

答えて

7

現在の時刻を設定する前に、ソースがロードされるまでaudioまで待つ必要があります。

$(function(){ 
    $('audio').bind('canplay', function(){ 
     $(this)[0].currentTime = $.cookie('audioTime'); 
    }); 
}); 
4

CURRENTTIMEはjQueryのの一部ではない(しかし、あなたはすでにこれを知っている)ので、最初はあなたのコードにエラーがある

$("p#sound audio").currentTime // is incorrect (refers to a property of jQuery) 
$("p#sound audio")[0].currentTime // is correct (refers to a property of DOM element) 

私は、オーディオタグはいくつかの奇妙なものを持っているし、できることを発見Chromeなど、ブラウザとブラウザの動作が異なることがあります。

まず、 'durationchange'イベントがオブジェクトによって認識されるのを待つ必要があります。

その後、 'play()'(まだ開始されていない場合)を使用してストリームを開始し、 'pause()'機能を使用してストリームを一時停止することがあります。次に、 'currentTime'プロパティを値で変更することができます。その後、'play() '機能を使用してストリームを再開する必要があります。

また、「load()」機能を使用してストリームを読み込む必要があることがあります。

このような何か:

$(document).ready(function() 
{ 
var a = $('audio:first'), 
    o = a[0]; 

a.on('durationchange', function(e) 
{ 
    var o = e.target; 
    if(o) 
    { 
    o.pause(); 
    o.currentTime = parseInt($.cookie("audioTime")); 
    o.play(); 
    } 
}); 

if(o) 
{ 
    o.load(); 
    o.play(); 
} 
}); 

あなたは、たとえば、あなたの状況で何が最善かを確認するためにそれで履歴書をプレイしている(再びプレイする)ので、第二またはのためにそれを遅延させるための方法。

この方法を使用する場合、ほとんどの場合は機能しないため、自動再生機能を使用する必要はありません。

が、それは、greetzを役に立てば幸い、私は私の場合で見つけたもの Erwinus

+0

これは私の問題は解決しませんでしたが、HTMLのサウンドのサポートがいかに悪いかを試して説明するために+1しました。 – urbananimal

1

は、どこかのコンテキストに問題があるということです。ウィンドウのコンテキストでオーディオを初期化しますが、currentTimeをXMLHttpRequestレスポンスから変更しようとすると動作しません。私はまだ答えを知らないが、私はJavascriptの専門家がそれを動作させる方法を知っているかもしれないという手がかりを提供している。https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/Using_HTML5_audio_and_video#Specifying_playback_range

例えば:ここに記載されているよう

/* initialize this.audio player */ 
Audio = function() { 
    var that = this; 
    // keep track of playback status 
    var AudioStatus = { 
      isPlaying : false 
    }; 

    // define references to this.audio, pulldown menu, play-button, slider and time display 
    that.audio = document.querySelector("AUDIO"); 

    /* load track by menu-index */ 
    var loadTrack = function() { 

     if(that.audio == null){ 
      log("audio null"); return; 
     } 
     that.audio.src = '../sounds/400.mp3'; 
     that.audio.load(); 
    }; 

    /* callback to play or pause */ 
    that._play = function() { 
     if(that.audio == null){ 
      log("audio null"); return; 
     } 
     that.audio.play(); 
     AudioStatus.isPlaying = true; 
    }; 

    that._pause = function() { 

     if(that.audio == null){ 
      log("audio null"); return; 
     } 
     that.audio.pause(); 
     AudioStatus.isPlaying = false; 
    }; 

    that.playPause = function() { 
     if (that.audio.paused) { 
      self._play(); 
     } 
     else { 
      self._pause(); 
     } 
    }; 

    /* callback to set or update playback position */ 
    that.updateProgress = function(value) { 
     if(that.audio == null){ 
      log("audio null"); return; 
     } 
     that.audio.currentTime = value; // <<<--- it does NOT work if I call from XMLHttpRequest response but it DOES if it is called from a timer expired call back 
    }; 

    that.isAudioPlaying = function(){ 
     return AudioStatus.isPlaying; 
    }; 
}; 
+0

あなたのコードの最初の行の観測では、HTML5 Audioクラス定義に関数(プロトタイプではないユーザクラス)を割り当てています。オーディオはHTML5 APIの一部です。これらの単語を使用しようとしないでください。 Audioは、HTML形式のオーディオタグのJavascriptバージョンです。クラスを作成する場合は、代わりにtheAudioのような名前を使用して、APIの競合を避けます。また、クエリセレクタが間違っている可能性があります。オーディオはオーディオでなければなりません。 https://developer.mozilla.org/en-US/docs/Web/API/HTMLAudioElementもご覧ください。 – Codebeat

1

あなたは、URLにt=<time>を追加することにより、開始時間を設定することができます<audio src="http://example.com/audio.mp3#t=50></audio>

0

これは私のために働く。

if (!isNaN(audio.duration)) { 
    audio.currentTime = 0; 
} 

希望します。

関連する問題