2011-12-23 8 views
10

मैं पृष्ठभूमि में खेल इस ऑडियो टैग है, और मुझे एक कुकी के लिए सेकंड में प्रगति स्टोर कर रहा हूँ। लेकिन किसी भी तरह से मैं उस कुकी से ऑडियो शुरू करने में सक्षम नहीं हूं। (अन्य पृष्ठों पर जारी रखने के लिए)<audio> टैग का वर्तमान समय सेट करना काम नहीं कर रहा है?

$("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> 

क्या इसे फिर से शुरू होने वाले गीत के साथ करना होगा?

धन्यवाद!

संपादित करें:

$("p#sound audio").get[0].currentTime 
साथ .Get [0], यह या तो काम नहीं करता है

किसी कृपया मेरे लिए स्पष्ट कर सकते हैं बातें? अत्यधिक सराहनीय!

+0

मुझे एक ही तरह का मुद्दा है। मैंने यह सुनिश्चित कर लिया है कि ब्रायन हैडवे द्वारा उल्लिखित 'कैप्ले' घटना में कॉलबैक बाध्य करने के माध्यम से ऑडियो लोड किया गया है। इसके साथ ही, 'वर्तमान समय' नहीं बदलेगा। –

+0

यह समस्या भी है। कोई विचार नहीं कि मेरे डीबगिंग के साथ कहां जाना है। सब कुछ सही प्रतीत होता है लेकिन वर्तमान समय बस सेट नहीं होगा ... – urbananimal

उत्तर

7

आप जब तक audio स्रोत लोड प्रतीक्षा करने के लिए इससे पहले कि आप वर्तमान समय निर्धारित की जरूरत है।

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

सबसे पहले अपने कोड में कोई त्रुटि है, क्योंकि मौजूदा समय 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) 

मैं की खोज ऑडियो टैग कुछ अजीब बातें है कि और कर सकते हैं ब्राउज़र से ब्राउज़र पर अलग-अलग काम करें, उदाहरण के लिए क्रोम में।

सबसे पहले आप 'durationchange' घटना के लिए प्रतीक्षा करने के लिए सुनिश्चित लंबाई वस्तु से जाना जाता है होना चाहिए।

इसके बाद आपको 'play()' (यदि पहले से शुरू नहीं हुआ है) के साथ स्ट्रीम शुरू करना है और इसे pause() 'फ़ंक्शन के साथ रोकें (कभी-कभी थोड़ी देर के बाद)। फिर आप 'वर्तमान समय' संपत्ति को मूल्य के साथ बदल सकते हैं। इसके बाद आपको '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

यह मेरी समस्या को ठीक नहीं करता है, लेकिन कोशिश करने और चित्रण करने के लिए +1 है कि HTML में ध्वनि के लिए समर्थन कितना खराब है। – urbananimal

1

मैं अपने मामले में क्या मिला कहीं संदर्भ के साथ एक मुद्दा है कि वहाँ है। मैं विंडो संदर्भ के तहत ऑडियो प्रारंभ करता हूं लेकिन जब मैं XMLHttpRequest प्रतिक्रिया से वर्तमान समय को बदलने का प्रयास करता हूं तो यह काम नहीं करता है। मुझे अभी तक जवाब नहीं पता है, लेकिन मैं एक सुराग प्रदान कर रहा हूं शायद जावास्क्रिप्ट में एक विशेषज्ञ को यह पता चलेगा कि इसे कैसे काम करना है।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 (गैर-प्रोटोटाइप उपयोगकर्ता क्लास) को HTML5 ऑडियो क्लास परिभाषा में असाइन करते हैं। ऑडियो एचटीएमएल 5 एपीआई का हिस्सा है, इन शब्दों का उपयोग करने की कोशिश मत करो। ऑडियो एचटीएमएल में ऑडियो टैग का जावास्क्रिप्ट संस्करण है। यदि आप क्लास का उपयोग करना चाहते हैं उदाहरण के लिए एपीआई विवादों से बचने के लिए ऑडियो जैसे नाम। इसके अलावा आपका प्रश्न चयनकर्ता गलत हो सकता है, ऑडियो ऑडियो होना चाहिए। यह भी देखें: https://developer.mozilla.org/en-US/docs/Web/API/HTMLAudioElement – Codebeat

1

आप के रूप में यहाँ प्रलेखित, यूआरएल के लिए t=<time> जोड़कर शुरू करने का समय निर्धारित कर सकते हैं <audio src="http://example.com/audio.mp3#t=50></audio>

0

यह मेरे लिए काम करता है।

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

उम्मीद है कि यह मदद करता है!

संबंधित मुद्दे