2012-11-26 2 views
7

사용자가 질문에 올바르게 대답하고 올바르지 않은 경우 "wrong"소리를 재생해야합니다. 처음에 소리가 들리고 있지만, 다섯 번째 시간이 지나면 나는 정확하게 다섯 번째로 "네번째"정확한 소리를 출력하고, 소리는 들리지 않습니다. 음악은 대부분 4 번만 재생할 수있는 것 같습니다. 이 원인은 무엇입니까?phonegap 미디어 소리가 5 번 후에 재생되지 않음

*이 내 stopAudio에 media.release을 추가 ()하지만 지금까지 소리 (개) 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

안드로이드는 한정된 양을 가지고 리소스를 재생할 수 있습니다. 파일을 재생할 때마다 새 Media 객체를 계속 생성합니다. 사용하지 않는 소리를 내 보내야합니다. 이러한 사운드를 여러 번 재생해야하는 경우 별도의 미디어 객체를 만들어 해당 사운드에 대한 참조를 보유하는 것이 좋습니다.

media.release에서 읽으십시오.

+0

별도의 개체로 무엇을 의미합니까? 도와 주셔서 감사합니다. –

+0

3 개의 vars를 만듭니다. 하나는 가을, 맞음과 틀린 것으로 각각 나타납니다. –

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); 
    } 
} 
관련 문제