10

音がよく出るゲームを作っています。再生中の音が二度と再生されないことに気づきました。たとえば、プレイヤーが壁に衝突すると、「ゴツン」という音が鳴ります。しかし、プレイヤーが1つの壁にぶつかった後、すぐに別の壁にぶつかると、「ゴツン」という音が1つだけ再生されます。これは、最初の音が終了しなかったためだと思います。本当?どうすればこれを回避できますか?サウンドを3回プリロードして、常にそのサウンドの別のコピーを再生することを考えましたが、これはかなりばかげているようです...

解決済み:

私が正しかったことがわかりました...サウンドの複数のバージョンをプリロードしてから、それらを循環再生する必要があります。

コード:

var ns = 3; //The number of sounds to preload. This depends on how often the sounds need to be played, but if too big it will probably cause lond loading times.
var sounds = []; //This will be a matrix of all the sounds

for (i = 0; i < ns; i ++) //We need to have ns different copies of each sound, hence:
    sounds.push([]);

for (i = 0; i < soundSources.length; i ++)
    for (j = 0; j < ns; j ++)
        sounds[j].push(new Audio(sources[i])); //Assuming that you hold your sound sauces in a "sources" array, for example ["bla.wav", "smile.dog" "scream.wav"] 

var playing = []; //This will be our play index, so we know which version has been played the last.

for (i = 0; i < soundSources.length; i ++)
    playing[i] = 0; 

playSound = function(id, vol) //id in the sounds[i] array., vol is a real number in the [0, 1] interval
{
    if (vol <= 1 && vol >= 0)
        sounds[playing[id]][id].volume = vol;
    else
        sounds[playing[id]][id].volume = 1;

    sounds[playing[id]][id].play();
    ++ playing[id]; //Each time a sound is played, increment this so the next time that sound needs to be played, we play a different version of it,

    if (playing[id] >= ns)
        playing[id] = 0;
}
4

4 に答える 4

2

サウンドを数回ロードしてポリフォニーをシミュレートします。それらをラウンドロビン方式でプレイします。matthewtoledo.comで私のデモをチェックしてください。具体的には、関数 _initSoundBank()

于 2012-04-30T14:58:34.713 に答える
1

はい、1 つの<audio>オブジェクトは一度に 1 つのトラックしか再生できません。オブジェクト<audio>currentTime、オーディオ トラックの現在の位置を示す属性があるとします。<audio>オブジェクトが複数のトラックを一度に再生できる場合、どの値がcurrentTime反映されますか?

この問題のスーパーセットについては、Javascript パフォーマンスでサウンドを再生していますか? で私のソリューションを参照してください。. (基本的に<audio>は同じ音のタグを重複して追加してください。)

于 2012-04-30T15:12:35.037 に答える
1

現在は FireFox と Chrome にのみ実装されていますが、将来的には、ブラウザでのゲームやオーディオ アプリケーション用に特別に設計されたWebAudio APIを使用する必要があります。

そこでは、任意のサウンドを複数回再生して、他のいくつかの楽しいことを行うことができます。

そのための優れたチュートリアルがここにあります: http://www.html5rocks.com/en/tutorials/webaudio/games/

于 2013-10-17T10:46:38.680 に答える