2012-11-26 7 views
7

Ho bisogno di suonare il suono "corretto" se l'utente risponde correttamente alla domanda e "sbaglia" se non è corretto. Il suono viene riprodotto all'inizio, ma dopo la quinta volta rispondo correttamente quale uscita la quarta volta il suono "corretto" è già la quinta volta, nessun suono può essere udito. Sembra che la musica possa suonare solo al massimo 4 volte. Qual è il motivo possibile che causa questo?l'audio del supporto audio del fonegap smette di suonare dopo 5 volte

aggiornato * media.release ho aggiunto nella mia stopAudio(), ma finora il suono è udibile per il 6 (migliore), ma non è ancora adatta al mio caso. (Molte domande che hanno bisogno lo stesso effetto sonoro)

Js.file

// Audio player 
    var my_media = null; 
    var mediaTimer = null; 

    // Play audio 
    function playAudio(src) { 
     // Create Media object from src 
     my_media = new Media(src, null, soundCB); 
     my_media.play(); 
    } 

    function soundCB(err){ 
     console.log("playAudio():Audio Error: "+err); 
    } 

    // Stop audio 
    // 
    function stopAudio() { 
     if (my_media) { 
      alert("AQA"); 
      my_media.stop(); 
      my_media.release(); 
     } 
     clearInterval(mediaTimer); 
     mediaTimer = null; 
    } 

///// domanda parte //////

$("#answer").live('tap', function(event){ 

if(buttonAns==true) { 
    $this= $(this);  
    buttonAns = false; 
var choice = $this.attr("class"); 
if((correctAnsNo == 0 && choice =="answer0")||(correctAnsNo == 1 && choice =="answer1")||(correctAnsNo == 2 && choice =="answer2")){ 

     playAudio('/android_asset/www/audio/fall.mp3'); //falling sound  
     correct = parseInt(correct)+2; 

     playAudio('/android_asset/www/audio/correct.mp3'); //dingdong 
    }else{   
     playAudio('/android_asset/www/audio/wrong1.wav');   
    } 
    if(quesNo < wordsNo){ 
     setTimeout(function() {  
      buttonAns = true;      
      db.transaction(queryQuesDB, errorCB); 
     },1800); 
    }else{ 
     endLevel();   
    } 
} else { 
    event.preventDefault(); 
}  
}); 

risposta

8

Android ha una quantità finita di risorse per suonare suoni. Continui a creare un nuovo oggetto Media ogni volta che vuoi riprodurre un file. Devi rilasciare i suoni che non stai utilizzando. Se è necessario riprodurre questi suoni più volte ciascuno, quindi prendere in considerazione la creazione di oggetti multimediali separati per mantenere un riferimento a quei suoni.

Leggere su media.release.

+0

cosa intendi per oggetto separato? grazie per l'aiuto. –

+0

Crea tre vars. Uno per caduta, rispettivamente corretto e sbagliato. –

6

Ho avuto lo stesso problema. La soluzione che ho fatto .:

 if(media){ 
     media.stop(); 
     media.release(); 
    } 
    media = new Media(...); 
5

Ecco il mio trucco: ho rilasciato su di esso finito di giocare o si è verificato un errore.

function playAudio(url) { 
    try { 

     var my_media = new Media(url, 
      // success callback 
      function() { 
       **my_media.release();** 
      }, 
      // error callback 
      function (err) { 
       **my_media.release();** 
      }); 

     // Play audio 
     my_media.play(); 
    } catch (e) { 
     alert(e.message); 
    } 
} 
Problemi correlati