微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐