我正在嘗試獲取音頻文件的持續時間。對於我使用下面的代碼:Media.getduration返回-1
$.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('entered');使用不同的數字來查看'lblDuracion'中出現的值是什麼,它是'進入5',但它也從行$('#lblEstado')。find('span')。text(objReproductor.getDuration() );返回-1。
感謝您的答覆。我已經檢查了MediaGet()構造函數的phoneGap上的文檔。我試圖遵循那裏出現的例子,但它並不適合我。我知道值-1意味着持續時間未知,但爲什麼持續時間未知?它必須是因爲它得到的錯誤,因爲我正在使用具有修復持續時間的普通mp3文件。 –
這絕對不是「錯誤」,而onError回調沒有觸發 - 猜測它只適用於本地文件 - 而路徑有點奇怪,例如,/android_assets/...最好的實踐是掛鉤一個函數onError回調並將其輸出記錄到控制檯(但我猜它甚至不會被觸發)。這不是C並且返回值-1被記錄爲不是錯誤。 –
我正在使用/ android_assets/...路徑和歌曲正在播放,所以新媒體(...)運行良好。但我不知道爲什麼getDuration()方法總是返回-1。 –