2012-06-26 22 views

उत्तर

12

कौन सा ब्राउज़र आप इस पर कोशिश कर रहे हैं? कुछ ब्राउज़रों पर duration जैसा कि आपने उल्लेख किया है, NaN लौटने पर काम नहीं करना चाहिए।

क्या आप यह भी सुनिश्चित कर रहे हैं कि ऑडियो फ़ाइल अवधि को पुनर्प्राप्त करने से पहले लोड हो गई है?

+17

मैंने इसे हल किया है, मैं ईवेंट 'loadedmetadata' ईवेंट में एक ईवेंट हैंडल बांधता हूं, इस घटना में मुझे 'अवधि' प्रॉपर्टी – hh54188

+0

मिल सकती है जो कि आपके उत्तर के आधार पर मेरा सुझाव होगा, लेकिन यह देखने में खुशी होगी कि आपने अनुमान लगाया है यह अपने लिए बाहर! –

0

बस audioElement.duration

डेव

+4

नहीं, यह काम नहीं करता है, मैंने कोशिश की: 'var audio = $ ('# audio') [0]; console.log ('ऑडियो', audio.duration); 'लेकिन परिणाम' NaN' – hh54188

+0

है यह सही अवधि (फ़ायरफ़ॉक्स में परीक्षण किया गया) देता है, लेकिन केवल लोडेडमेडडेटा घटना के बाद ही हुआ है। –

+0

जब आप 'setTimeout (function() {...}, 10) का उपयोग करते हैं तो काम करने लगता है;' इसे तुरंत निष्पादित करने के बजाय। – AlexioVay

8
var au = document.createElement('audio'); 
au.addEventListener('loadedmetadata',function(){ 
    au.setAttribute('data-time',au.duration); 
},false); 
+0

केवल क्रोम आईई काम नहीं किया = / –

6

उपर्युक्त टिप्पणी में, यह उल्लेख किया गया था कि समाधान ईवेंट लोडेडमेडडेटा को ईवेंट इवेंट को बाध्य करना है। इस तरह मैंने यह किया -

audio.onloadedmetadata = function() { 
    alert(audio.duration); 
}; 
1

मैंने ट्रैक अवधि प्राप्त करने के लिए "कैनप्लेथ्रू" ईवेंट का उपयोग किया। मेरे पास एक ऐसा मामला है जहां मेरे पास दो खिलाड़ी हैं, और मैं पहले खिलाड़ी को पूरा होने से पहले 2 सेकंड को दूसरे खिलाड़ी को रोकना चाहता हूं।

$('#' + _currentPlayerID).on("canplaythrough", function (e) { 
    var seconds = e.currentTarget.duration;  
    var trackmills = seconds * 1000; 
    var subTimeout = trackmills - 2000; //2 seconds before end 

    //console.log('seconds ' + seconds); 
    //console.log('trackmills ' + trackmills); 
    //console.log('subTimeout ' + subTimeout); 

    //Stop playing before the end of thet track 
    //clear this event in the Pause Event 
    _player2TimeoutEvent = setTimeout(function() { pausePlayer2(); }, subTimeout); 

}); 
1

2018 समाधान:

आप undefined या NaN (नहीं एक नंबर) मिल जाएगा जब ऑडियो मेटाडाटा अभी तक लोड नहीं है। इसलिए कुछ लोगों ने यह सुनिश्चित करने के लिए onloadedmetadata का उपयोग करने का सुझाव दिया है कि ऑडियो फ़ाइल का मेटाडेटा पहले लाया गया है। वेनिला जावास्क्रिप्ट -

:

var audio = $("#audio-1")[0]; 
audio.onloadedmetadata = function() { 
    alert(audio.duration); 
}; 

अगर यह काम नहीं होगा इसके अलावा, ज्यादातर लोगों का उल्लेख नहीं था आप [0] इस तरह के साथ ऑडियो DOM तत्व का पहला सूचकांक को लक्षित करना है उन कनेक्शन पर इस कोशिश, फिर भी इतना विश्वसनीय और निर्भर नहीं:

setTimeout(function() { 
    var audio = $("#audio-1")[0]; 
    console.log("audio", audio.duration); 
}, 100); 

- JQuery:

$(document).ready(function() { 
    var audio = $("#audio-1")[0]; 
    $("#audio-1").on("loadedmetadata", function() { 
     alert(audio.duration); 
    }); 
});