2012-11-26 8 views
7

Ich muss den "richtigen" Ton spielen, wenn der Benutzer die Frage richtig beantwortet und "falsch" wenn falsch. Der Sound spielt zunächst, aber nach dem fünften Mal antworte ich richtig, welches beim vierten Mal schon beim fünften Mal "richtigen" Ton ausgibt, kein Ton ist zu hören. Es scheint, dass die Musik höchstens 4. mal gespielt werden kann. Was ist der mögliche Grund dafür?phonegap media sound stop nach 5 mal abspielen

aktualisiert * ich media.release in meinem stopAudio() hinzugefügt, aber bisher der Ton für den 6. (verbessert) zu hören, aber es ist immer noch nicht passt mein Fall. (Viele Fragen, die den gleichen Sound-Effekt benötigen)

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; 
    } 

///// Frage Teil //////

$("#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(); 
}  
}); 

Antwort

8

Android hat eine endliche Menge an Ressourcen, um Sounds zu spielen. Sie erstellen jedes Mal ein neues Medienobjekt, wenn Sie eine Datei wiedergeben möchten. Sie müssen die Sounds loslassen, die Sie nicht verwenden. Wenn Sie diese Sounds mehrere Male abspielen müssen, sollten Sie separate Medienobjekte erstellen, die einen Verweis auf diese Sounds enthalten.

Lesen Sie weiter auf media.release.

+0

was meinst du mit separatem Objekt? Danke für die Hilfe. –

+0

Erstellen Sie drei vars. Eins für den Herbst, richtig bzw. falsch. –

6

Ich hatte das gleiche Problem. Die Lösung, die ich tat .:

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

Hier ist mein Trick: Ich veröffentlichte es auf sie zu spielen beendet oder ein Fehler aufgetreten ist.

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); 
    } 
}