Cordova – Media.getduration Returns -1

I am trying to get the duration of an audio file. For this, I use the following code:

$.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(objReprodu ctor);


$('#lblDuracion').find('span').text('enters');
// Play audio
if (objReproductor) {
//objReproductor.play();
//document.getElementById('PlayStatusID').innerHTML = "

Status: playing...";< br /> $('#lblDuracion').find('span').text('enters2');
//setButtonState(myMediaState.playback);
// Update media position every second< br /> 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 = "

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. d e la nueva cancion
$(this).stop(true,true).animate({
opacity: 1
});
});

I saw in some forums that setInterval is mandatory to use getDuration, that’s why I used it but it didn’t give me any results. The file loaded well because I could hear it and it went into GetCurrentPosition because of the text ” “Duration = -1” appears, so obviously a value of -1 is given. How to get the correct duration value?

Edit

I put more code and added getCurrentPosition witch did not work. I put a different $(‘#lblDuracion’).find(‘span’).text (‘enter’); Use a different number to see what the value displayed in’lblDuracion’ is, it is’enter5′ but it is also passed from the $(‘#lblEstado’) line.find(‘span’).text( objReproductor.getDuration() ); returns -1.

even if the file system definitely says: / android_assets < p>

The function requires /android_asset – otherwise it will return -1 as an undocumented “file not found”.

Calling the .getDuration() method requires a time slice loop – otherwise It will also return -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');
}< br /> }, 100);

audiofile.play();
}

I am trying to get the duration of the audio file . For this, I use the following code:

$.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< br /> //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
objReprod uctor.play();
//PlayMusic(objReproductor);


$('#lblDuracion').find('span').text('enters') ;
// Play audio
if (objReproductor) {
//objReproductor.play();
//document.getElementById('PlayStatusID').innerHTML = "

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 = "

Status: enters ";< br /> $('#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);
}< br />
$('#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').sto p(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
});
});

I saw in some forums that setInterval is mandatory to use getDuration, which is why I used it but it did not give me any results. The file loads well because I can listen Go to it and it enters GetCurrentPosition, because the text “duration = -1” appears, so obviously the -1 value is given. How to get the correct duration value?

Edit

I put more code and added getCurrentPosition witch did not work. I put a different $(‘#lblDuracion’).find(‘span’).text (‘enter’); Use a different number to see what the value displayed in’lblDuracion’ is, it is’enter5′ but it is also passed from the $(‘#lblEstado’) line.find(‘span’).text( objReproductor.getDuration() ); returns -1.

Even if the file system definitely says: / android_assets

The function requires/ android_asset – otherwise it will return -1 as an undocumented “file not found”.

Calling the .getDuration() method requires a time slice loop – otherwise it will also return -1.

< p>

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();
}

Leave a Comment

Your email address will not be published.