5

我正在尝试获取音频文件的持续时间。为此,我使用以下代码:

$.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('enters'); 用不同的数字查看“lblDuracion”中出现的值是什么,它是“enters5”,但它也从 $('#lblEstado').find('span').text(objReproductor.getDuration() 行传递); 返回-1。

4

3 回答 3

0

即使文件系统肯定说:/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();
}
于 2013-11-06T06:35:50.673 回答
0

科尔多瓦插件删除科尔多瓦插件媒体

接着

cordova 插件添加 cordova-plugin-media@2.3.0

于 2016-08-12T13:35:16.923 回答
0

如果有人仍在寻找科尔多瓦插件媒体的 getDuration() 答案。你可以在这里参考答案。

于 2020-04-22T06:00:32.633 回答