他の多数のサウンドが同時に進行している状態で、同じサウンドを複数回再生するにはどうすればよいですか? 現在、「クリップ」を再生していますが、それ自体とオーバーラップしません。(一発の弾丸が聞こえ、音が終わってから再び再生されます)。高速弾丸発射システムを使用してゲームを作成していますが、サウンドがうまく動作しません。毎秒画面上に 20 個以上の弾丸をスポーンするときに、0.5 秒ごとに 1 つの弾丸しか聞こえないのは「正しく」聞こえません。
何か助けはありますか?ポインタ?:D
一度に 20 個のブリット クリップを再生すると、CPU の負荷が少し高くなる場合があります。大丈夫かもしれません。7 つのチャイムを重ねて鳴らす風鈴を 1 回作成し (それぞれの長さは約 3 秒または 4 秒でした)、5 秒のブロックごとに約 100 のチャイムを鳴らすように設定して問題を解決しました。しかし、プログラムは他に何もしていませんでした。
クリップを使用すると、これを行うには複数のコピーを作成する必要があり、すべてのオーディオ データがそこに置かれ、RAM を占有します。それらが本当に短い場合、それはそれほど犠牲ではありません。しかし、連射の場合、ほとんどのゲームが使用する解決策は、音を切って再起動することです. 音を最後まで再生する必要はありません。
myClip.stop();
myClip.setFramePosition(0);
myClip.start();
ブリッツスタートごとに。これは最も頻繁に行われることです。オーバーラップ クリップ ソリューションよりもはるかに少ない CPU と RAM を使用します。
これはあなたの質問に答えるようです:
http://my.safaribooksonline.com/9781598634761/ch09lev1sec3
見積もり:
「つまり、単一の Clip オブジェクトは、他のサウンドとのみミックスできません。このプロセスは、短いサウンド エフェクトを使用する場合は非常にうまく機能しますが、サウンド クリップの長さが 1 秒以上の場合、奇妙に聞こえる可能性があります。[.. .] 1 つのクリップを繰り返しミキシングしたい場合、2 つの重要なオプション (およびもう 1 つのありそうもないオプション) があります: 1) サウンド ファイルを複数の Clip オブジェクト (配列など) にロードし、それぞれを順番に再生します。この特定のサウンドを再生する必要があるときはいつでも、配列を反復処理して、再生が終了したクリップを見つけてから、もう一度再生を開始してください。」
したがって、原則として、Java はミキシングを行いますが、単一のクリップ内では行いません。