2012-11-26 117 views
7

如果用戶正確回答問題,我需要播放「正確」的聲音,如果不正確,請播放「錯誤」。聲音在開始播放,但在第五次之後,我已經第五次正確地回答了第四次輸出第四次「正確」的聲音,沒有聽到任何聲音。看來音樂最多隻能播放第四次。 造成這種情況的可能原因是什麼?5次後手機媒體聲音停止播放

更新* 我加入media.release在我stopAudio(),但到目前爲止,聲音可以聽到6日(改善),但它仍然是不適合我的情況。 (許多需要相同的聲音效果問題)

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

/////問題部分//////

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

回答

8

Android有數量是有限的資源才能播放聲音。每次您想要播放文件時,都會繼續創建新的媒體對象。你需要釋放你沒有使用的聲音。如果您需要多次播放這些聲音,請考慮創建單獨的媒體對象以保存對這些聲音的引用。

請閱讀media.release

+0

你是什麼意思分開的對象?謝謝您的幫助。 –

+0

創建三個變量。一個爲秋天,正確和錯誤分別。 –

6

我有同樣的問題。 的解決方案,我做:

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

這裏是我的絕招:我發佈了它在它播放完畢或發生錯誤。

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