1

SoundManager2 の一連のサウンド ファイルをループして、さまざまな時点で再生しようとしています。以下のコードは、サウンド ファイルとそのサウンド ファイルを再生する長さで構成される「音符」を含む、次のような songArray を受け取ります。

var songArray = [[null],[["clarinet_e4.mp3",1],["clarinet_a4.mp3",1]],[null],[null],[null],[null],[["clarinet_c4.mp3",1]],[["clarinet_c5.mp3",1]],[null],[["clarinet_ab4.mp3",1]],[["clarinet_f3.mp3",1]],[null],[["clarinet_g4.mp3",1]],[["clarinet_d5.mp3",1]],[null],[null]]

配列内の各 X を調べて、指定された X で見つかったサウンドを再生します。次に、duration で指定された時間後にサウンドを停止します。コードは完全に動作しますが、サウンドが停止すると、曲の最後でポップ ノイズが発生します。

function playSong(X) {
    playSongNotesAtXValue(X);
    window.setTimeout(function() {
        X++;
        if (X >= theSong.songArray.length) {
            X = 0;
        }
        playSong(X);
    }, (30/theSong.tempo)*1000)
}



function playSongNotesAtXValue(X) {
    var columnToPlay = theSong.songArray[X];
    if (columnToPlay[0] != null) {
        for (i = 0; i < columnToPlay.length; i++) {
            var note = columnToPlay[i]; 
            soundManager.play(note[0],{volume:30});
            window.setTimeout(function() {
                soundManager.stop(note[0]);
            }, (note[1]*30/theSong.tempo)*1000);   
        }
    }
}

何が間違っている可能性がありますか?

PS Safari、Chrome、Firefox の最新バージョンで試しました。

4

1 に答える 1

0

私があなたを正しくフォローしている場合、あなたはオーディオファイルを再生し、ファイルの途中の任意のポイントで停止しています. これにより、多くの場合、出力が不連続になり、信号が 1 つのサンプルで高いレベルからゼロにジャンプするため、ポッピングまたはクリック ノイズが発生します。これを解消するには、入力の音量を最初の音量から突然ゼロに変更するのではなく、最初の音量からスムーズにゼロに下げる必要があります。

通常、線形補間を使用してこの「平滑化」タスクを達成できます: http://blog.bjornroche.com/2010/10/linear-interpolation-for-audio-in-cc.html

申し訳ありませんが、あなたがすでにこれを行っているかどうかを理解するのに十分なほどSoundManager2を知りません.

于 2012-09-05T17:30:15.427 に答える