1

質問は本当に簡単に思えるかもしれません。私はゲーム プロジェクトに取り組んでいるので、今のところサウンド エンジンを実装する必要があります。

再生する音声ファイルがいくつかあります。私はこのようにします:

File file = new File("music.mid");
AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(file);
Clip clip = AudioSystem.getClip();
clip.open(audioInputStream);
clip.start();

今のところ、これらのファイルをキャッシュして、HashMap を介してパフォーマンスを向上させようとしています。

private HashMap<String, File> cache = new HashMap(); //name - key & file - res

ハッシュマップでファイルをチェックし、存在する場合は取り出して再利用します。

ただし、ファイルを再生する必要があるたびに、オーディオ リソースがまだダウンロードされているようです。 (入力ストリームが再度生成される可能性があります)

そして、ゲームは毎回遅れ始めます。


.midアプリケーションですばやくアクセスして再生できるように、ファイルをキャッシュする適切な方法を教えてください。

4

1 に答える 1

1

JavaのFileオブジェクトは実際にはファイルの内容を含んでおらず、ファイルへのハンドルにすぎません。実際、ファイルは次の時点まで読み取られません。Clip#open

ほとんどのオペレーティング システムのキャッシュは、通常、ファイルを RAM に読み取るため、ほとんどの場合、自分で行う必要はありません。キャッシングを強化する必要がある場合は、Clipオブジェクトをキャッシュします。

Clip インターフェイスは、オーディオ データをリアルタイムでストリーミングする代わりに、再生前にロードできる特別な種類のデータ ラインを表します。

たとえば、次の場所にクリップを配置できますHashMap

HashMap<String, Clip> clips = new HashMap<String, Clip>();
for (String fileName: fileNames) {
    File file = new File(fileName);
    AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(file);
    Clip clip = AudioSystem.getClip();
    clip.open(audioInputStream);
    clips.put(fileName, clip);
}

clips.get("music.mid").start();
于 2013-05-08T06:11:56.790 に答える