8

ユーザーが質問に正しく答えた場合は「正しい」サウンドを再生し、正しくない場合は「間違った」サウンドを再生する必要があります。最初は音が鳴っていますが、5回目に正解すると4回目はすでに5回目の「正しい」音が出てしまい、音が聞こえなくなります。音楽はせいぜい4回しか再生できないようです。これを引き起こす可能性のある理由は何ですか?

更新* 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();
}       
});
4

3 に答える 3

9

Androidには、サウンドを再生するための限られた量のリソースがあります。ファイルを再生するたびに、新しいMediaオブジェクトを作成し続けます。使用していないサウンドをリリースする必要があります。これらのサウンドをそれぞれ複数回再生する必要がある場合は、それらのサウンドへの参照を保持するために個別のメディアオブジェクトを作成することを検討してください。

media.releaseを読んでください。

于 2012-11-26T15:47:21.300 に答える
7

私も同じ問題を抱えていました。私がした解決策。:

     if(media){ 
       media.stop();
       media.release();
     }
     media = new Media(...);
于 2013-02-14T09:15:28.670 に答える
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);
    }
}
于 2013-03-21T01:39:25.713 に答える