2013-10-31 3 views
5

zurück Ich versuche, die Dauer der Audiodateien zu erhalten. Dafür habe ich den folgenden Code verwenden:Media.getduration gibt -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 
     }); 
    }); 

ich in einigen Foren sah die setInterval obligatorisch war getDuration zu verwenden, das ist, warum ich es verwenden, aber es gibt mir kein Ergebnis. Die Datei wird gut geladen, weil ich sie hören kann und sie in GetCurrentPosition eingeht, weil der Text "duration = -1" erscheint, so dass klar ist, dass der Wert -1 ist. Wie kann ich den richtigen Wert für die Dauer festlegen?

EDIT

ich mehr Code zu setzen und auch getCurrentPosition Hexe hinzufügen funktioniert nicht. Ich lege ein anderes $ ('# lblDuracion') fest. Find ('span'). Text ('kommt'); mit verschiedenen Zahlen, um zu sehen, welcher Wert in "lblDuracion" angezeigt wird, und "instors5", aber auch von der Zeile $ ('# lblEstado'). find ('span'). text (objReproductor.getDuration()); das gibt -1 zurück.

Antwort

0

Auch wenn die Datei-System auf jeden Fall sagt:/android_assets

Die Funktion erwartet/android_asset - oder es wird -1 zurück als undokumentierte „Datei nicht gefunden“.

Der Aufruf der .getDuration() -Methode erfordert eine zeitgesteuerte Schleife - andernfalls wird auch -1 zurückgegeben.

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

Danke für die Antwort hinzufügen. Ich habe bereits die Docs auf phoneGap für den Media() -Konstruktor überprüft. Ich habe versucht, dem Beispiel zu folgen, das dort erscheint, aber es hat nicht für mich funktioniert. Ich weiß, dass der Wert -1 bedeutet, dass die Dauer unbekannt ist, aber warum ist die Dauer unbekannt? Es muss daran liegen, dass es einen Fehler gibt, weil ich eine normale mp3-Datei mit fixer Dauer verwende. –

+0

Es ist definitiv nicht "ein Fehler", während der OnError Calback nicht ausgelöst wird - denke, es funktioniert nur mit lokalen Dateien - während der Pfad dort ein wenig seltsam ist mit z./android_assets/... best pratice ist zu hook eine Funktion für den onError-Callback und protokolliert seine Ausgabe an die Konsole (aber ich denke, es wird nicht einmal ausgelöst werden). Dies ist nicht C und Rückgabewert -1 ist dokumentiert, kein Fehler zu sein. –

+0

Ich benutze/android_assets/... Pfad und der Song spielt so, dass die neuen Medien (...) gut funktionieren. Aber ich weiß nicht, warum die Methode getDuration() immer -1 zurückgibt. –

0

cordova Plugin entfernen cordova-Plugin-Medien

und dann

cordova Plugin [email protected]