2012-11-13 6 views
8

Sto costruendo un registratore/lettore multimediale audio con PhoneGap. Funziona tutto magnificamente, ma ho colpito una ruga che non riesco a stirare.PhoneGap non riesce a getDuration() dall'API multimediale, ma altri metodi funzionano

my_media.play(); riproduce effettivamente il supporto senza errori nelle mie console Eclipse o XCode, motivo per cui l'avviso che mostra un -1 è sconcertante. Mi aspetto my_media.getDuration(); per restituire la durata del file che sto tentando di riprodurre.

Il mio blocco try/catch non sta generando un errore, sono piuttosto perplesso su questo. Here's the PhoneGap documentation on Media.getDuration().

function playAudio() { 

    $('#btnStopRecording').removeClass('ui-disabled'); 
    $('#btnPlayMessage, #btnStartStopRecording, #btnDeleteMessage, #btnAcceptUpload').addClass('ui-disabled'); 

    my_media = new Media(fullRecordPath, 

     // success callback 
     function() { 
      $('#btnPlayMessage, #btnStartStopRecording, #btnDeleteMessage, #btnAcceptUpload').removeClass('ui-disabled'); 
      $('#btnStopRecording').addClass('ui-disabled'); 
     }, 

     // error callback 
     function (err) { 
      console.log("attempting to play fullRecordPath = "+fullRecordPath); 
      console.log("playAudio():Audio Error: " + err.code); 
     } 
    ); 

    var thisDuration; 

    try{ 
     thisDuration = my_media.getDuration(); 
    } catch (err) { 
     console.log("attempting to get duration error code "+err.code); 
     console.log("attempting to get duration error message "+err.message); 
    } 

    alert("we're about play a file of this duration "+thisDuration); 

    my_media.play(); 

    // stop playback when the stop button is tapped 
    $('#btnStopRecording').off('tap').on('tap',function() 
    { 
     my_media.stop(); 
     $('#btnPlayMessage, #btnStartStopRecording, #btnDeleteMessage, #btnAcceptUpload').removeClass('ui-disabled'); 
     $('#btnStopRecording').addClass('ui-disabled'); 
    }); 

    // if the user leaves the page, stop playback 
    $('#pageRecordMessage').live('pagehide', function() 
    { 
     my_media.stop(); 
     $('#btnPlayMessage, #btnStartStopRecording, #btnDeleteMessage, #btnAcceptUpload').removeClass('ui-disabled'); 
     $('#btnStopRecording').addClass('ui-disabled'); 
    }); 
} 

risposta

2

I metadati per il supporto in questione non sono stati caricati quando si chiama my_media.getDuration(). Nella documentazione si fa riferimento nella sua domanda il codice di esempio mette la chiamata getDuration in un intervallo:

var timerDur = setInterval(function() { 
    counter = counter + 100; 
    if (counter > 2000) { 
     clearInterval(timerDur); 
    } 
    var dur = my_media.getDuration(); 
    if (dur > 0) { 
     clearInterval(timerDur); 
     document.getElementById('audio_duration').innerHTML = (dur) + " sec"; 
    } 
}, 100); 

lo consiglio a fare qualcosa di simile.

+1

Mi piace come setInterval ma non funziona ancora. Ritorna sempre -1. Quale può essere il motivo? Perché sta funzionando bene. Il tipo di file può essere il problema? Sto usando mp3 –

1

Questa soluzione funziona per me. Fondamentalmente, gioca e fermati immediatamente. Non sembra richiedere tempo, sembra una soluzione decente.

media.play(); 
media.stop(); 
var length = media.getDuration(); 
0

Questa domanda è troppo vecchia. Ma è ancora rilevante perché molti potrebbero aver affrontato questo stesso problema. Ogni volta che non funziona, faccio solo una cosa, aggiorna o downgrade la versione. In questo caso ho risolto il mio problema installando la seguente versione.

cordova plugin add [email protected] 
0

Ho anche affrontato un problema simile in cordova per iOS. Sono riuscito a registrare, riprodurre e interrompere l'audio ma non sono riuscito a ottenere la posizione corrente e la durata totale del file audio. Così ho aggiunto my_media.release() subito dopo aver finito di registrare audio, dopo my_media.stopRecord() e ha funzionato come un incantesimo. Prima stavo ottenendo -1 per getDuration() e 0 per getCurrentPosition().

Spero che aiuti qualcuno.

Problemi correlati