2012-11-26 10 views
7

Potrzebuję odtworzyć "poprawny" dźwięk, jeśli użytkownik odpowie poprawnie i "źle", jeśli jest niepoprawny. Dźwięk jest odtwarzany na początku, ale po piątym odpowiadam poprawnie, który po raz piąty wydaje "poprawny" dźwięk już po raz piąty, nie słychać żadnego dźwięku. Wygląda na to, że muzyka może grać tylko co najwyżej 4 razy. Jaki jest możliwy powód takiego stanu rzeczy?Dźwięk nośnika phonegap przestaje być odtwarzany po 5 razach

aktualizacja * dodałem media.release w moim stopAudio(), ale do tej pory dźwięk można usłyszeć na 6 (lepszą), ale to nadal nie jest moja sprawa garnitury. (Wiele pytań, które wymagają takiego samego efektu dźwięku)

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

///// pytanie częścią //////

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

Odpowiedz

8

Android ma skończoną ilość zasoby w celu odtwarzania dźwięków. Tworzysz nowy obiekt Media za każdym razem, gdy chcesz odtworzyć plik. Musisz zwolnić dźwięki, których nie używasz. Jeśli chcesz odtwarzać te dźwięki kilka razy, rozważ utworzenie osobnych obiektów multimedialnych, które będą zawierać odniesienia do tych dźwięków.

Przeczytaj na media.release.

+0

co masz na myśli przez oddzielny obiekt? dzięki za pomoc. –

+0

Utwórz trzy zmienne. Jeden dla upadku, poprawny i niesłuszny. –

6

Miałem ten sam problem. Rozwiązanie zrobiłem .:

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

Oto mój trik: wydałem go po zakończeniu odtwarzania lub że wystąpił błąd.

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); 
    } 
} 
Powiązane problemy