2014-03-03 69 views
0

我試圖獲得播放列表中每首歌曲的持續時間。它給我NaN。我讀到,如果瀏覽器沒有足夠的時間來讀取音頻數據,那麼它返回NaN。 所以我用song.onloadedmetadata = duration = song.duration. // song is audio object. 它也給NaN。如何獲取HTML5音頻播放器中播放列表中每首歌曲的時長?

如果我在song.onloadmetadata = duration = song.duration之前寫alert("hello");那麼它會顯示歌曲的持續時間。這意味着時間瀏覽器有足夠的時間來計算持續時間。但我不希望每次載入頁面時都顯示警報。

其實我從每個循環加載所有來自XML的歌曲。我試圖讓每首歌的持續時間都在那裏。這樣我就可以在HTML頁面上打印歌曲名稱及其持續時間。 這是我的代碼,請建議我該怎麼做。

function xmlParser(xml) 
      { 
      //alert("Inside XML block"); 
       $(xml).find("songs").each(function() 
       { 
        $(xml).find("song").each(function(i) 
        { 
         songurl = $(this).find("music").text(); 
         id = $(this).find("music").attr("id"); 
         image = $(this).find("image").text(); 
         sname = $(this).find("name").text(); 

         song_name.push(sname); 
         album_image.push(image);       
         playlist.push(songurl); 


        //Code to get Each Song Duration in Playlist   

         song.src = songurl; 


         song.onloadedmetadata = duration = song.duration; 
          //duration=song.duration;       

          var sec= new Number(); 
          var min= new Number(); 
          sec = Math.floor(duration);  
          min = Math.floor(sec/60); 
          min = min >= 10 ? min : '0' + min;  
          sec = Math.floor(sec % 60); 
          sec = sec >= 10 ? sec : '0' + sec; 

         //code For Each song duration Ends Here 

         $("#SongsList").append('<li id="'+id+'"> <a href="#" id="'+id+'">' +sname+ ' </a> <h6 style="color:#74dad5; font-family:verdana; padding-left:279px;">'+min+' : '+sec+' </h6></li> '); 

        });     



       }); 
      } 

請告訴我,我錯了,並提供了我的代碼,這樣我可以得到循環內的持續時間和打印我的網頁上。

+0

您是否控制了音頻文件,還是來自其他網站?如果你控制這些文件,那麼預處理將是有序的。這些文件是什麼格式? .MP3? .M4A? .OGG?混合物? –

+0

@MultimediaMike我正在製作音頻播放器演示,是的,我正在控制聲音,它是MP3格式。我不瞭解預處理命令。請解釋 –

回答

1

我想你可以設置一個回調到song.onloadedmetadata,然後在這個回調函數中獲取持續時間。

song.onloadedmetadata = function() { 
    dump('duration onloadeddata = ' + song.duration); 
} 
相關問題