2013-10-31 16 views
5

私はオーディオファイルの長さを取得しようとしています。そのために私は次のコードを使用しています:Media.getduration returns -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の値を与えていることが明らかなので、ファイルはうまく読み込まれています。正しい継続時間の値を取得するにはどうすればよいですか?

EDIT

私はより多くのコードを入れてもgetCurrentPositionの魔女が動作していない追加します。私は別の$( '#lblDuracion')を置く。find( 'span')text( '入る'); 'lblDuracion'に表示されている値が何であるかを調べるには、別の数字を使用し、 'entries5'ですが、$( '#lblEstado')という行からも渡しますfind( 'span')。text(objReproductor.getDuration() ); -1を返します。

答えて

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

感謝を追加します。 phoneGapでMedia()コンストラクタのドキュメントをチェックしています。私はそこに現れる例に従おうとしましたが、私にとってはうまくいかなかったのです。値-1は期間が不明だが期間は不明であることを意味します。それは、私が修正期間を持つ通常のmp3ファイルを使用しているためにエラーが発生するためです。 –

+0

onErrorカルバックがトリガされていない間は、間違いなく "エラー"ではありません。ローカルファイルでのみ動作すると推測されます。/android_assets/...最高のプラチスは、onErrorコールバックに関数をフックしてコンソールに出力します(でも、それはトリガーされません)。これはCではなく、戻り値-1はエラーではないことが文書化されています。 –

+0

私は/ android_assets/...パスを使用しています。新しいMedia(...)がうまく動作するように曲が再生されています。しかし、getDuration()メソッドが常に-1を返す理由はわかりません。 –

0

コルドバプラグイン

コルドバ - プラグインのメディアに

を削除し

コルドバプラグインの返信用 [email protected]