我试图获取音频文件的持续时间.为此,我使用以下代码: $.fntReproducir=function(){ //obtenemos una instancia del elemento que contiene la info. de cancion a reproducir var $objContenedorCancion=$('#olCanciones').children
$.fntReproducir=function(){ //obtenemos una instancia del elemento que contiene la info. de cancion a reproducir var $objContenedorCancion=$('#olCanciones').children().eq(iCancionActual); //obtenemos la ruta del archivo que se va a reproducir y se lo asignamos //al source del audio player de HTML5 objReproductor = new Media($objContenedorCancion.attr('rel'), stopAudio, null); //var timerDur = setInterval(GetCurrPosition, 1000); //desmarcamos cualquier cancion en la lista (si es que estuviese marcada alguna) $('#olCanciones li').removeClass('clsSeleccionado'); //marcamos en la lista la cancion que vamos a reproducir $objContenedorCancion.addClass('clsSeleccionado'); meState = myMediaState.play //reproducir la cancion con el metodo play objReproductor.play(); //PlayMusic(objReproductor); $('#lblDuracion').find('span').text('enters'); // Play audio if (objReproductor) { //objReproductor.play(); //document.getElementById('PlayStatusID').innerHTML = "<p></p>Status: playing..."; $('#lblDuracion').find('span').text('enters2'); //setButtonState(myMediaState.playback); // Update media position every second clearProgressTimmer(); $('#lblDuracion').find('span').text('enters4'); progressTimmer = setInterval(function () { // get my_audio position $('#lblDuracion').find('span').text('enters5'); objReproductor.getCurrentPosition( // success callback function (position) { //document.getElementById('lblCancion').innerHTML = "<p></p>Status: enters "; $('#lblDuracion').find('span').text('enters8'); if (position >= 0){ $('#lblDuracion').find('span').text('enters6'); $('#lblEstado').find('span').text(position); }else { $('#lblEstado').find('span').text('0 sec'); } }, // error callback function (e) { $('#lblEstado').find('span').text('0 sec' + e); }); $('#lblDuracion').find('span').text(objReproductor.getDuration()); //$('#lblEstado').find('span').text(count); }, 1000); } $('#btnPausar').val('Play'); $('#btnPausar').find('img').attr('src','img/pause.png'); //$('#lblDuracion').find('span').text(objReproductor.getDuration()); //ocultamos suavemente los datos de la cancion anterior $('#divInfoCancion').find('label').stop(true.true).animate({ opacity: 0 },function(){ //obtenemos una instancia del elemento que contiene los datos de la cancion var $objContenedorCancion=$('#olCanciones').children().eq(iCancionActual); //actualizamos la informacion de la cancion que se esta reproduciendo //duracion total //nombre de la cancion //$('#lblCancion').find('span').text($objContenedorCancion.find('strong').text()); $('#lblCancion').text($objContenedorCancion.find('.li_song').text()); //artista //$('#lblArtista').find('span').text($objContenedorCancion.find('em').text()); $('#lblArtista').text($objContenedorCancion.find('.li_artist').text()); //tiempo transcurrido //$('#lblEstado').find('span').text('00:00'); //imagen $('#current_img').attr('src',$objContenedorCancion.find('img').attr('src')); //mostramos suavemente la info. de la nueva cancion $(this).stop(true,true).animate({ opacity: 1 }); });
我在一些论坛中看到setInterval是强制使用getDuration的,这就是为什么我使用它但它没有给我任何结果.该文件加载得很好,因为我可以听到它并且它进入GetCurrentPosition,因为文本“duration = -1”出现,所以显然给出-1值.如何获得正确的持续时间值?
编辑
我把更多的代码,并添加getCurrentPosition女巫不起作用.我把不同的$(‘#lblDuracion’).find(‘span’).text(‘enter’);使用不同的数字来查看’lblDuracion’中显示的值是什么,它是’enter5’但它也从$(‘#lblEstado’)行传递.find(‘span’).text(objReproductor.getDuration() );返回-1.
即使文件系统肯定说:/ android_assets函数需要/ android_asset – 否则它将返回-1作为未记录的“未找到文件”.
调用.getDuration()方法需要一个时间片循环 – 否则它也将返回-1.
playFile: function() { var audiofile = new Media( 'file:///android_asset/www/audio/Rumble_Pack_-_Mad_Robots.wav', function(i){} ); var counter = 0; var timerDur = setInterval(function() { counter = counter + 100; if(counter > 2000) {clearInterval(timerDur);} var duration = audiofile.getDuration(); if(duration > 0) { clearInterval(timerDur); console.debug(duration + ' seconds'); } }, 100); audiofile.play(); }