0

学校のプロジェクト(単純なJavaゲーム)を実行しようとしていますが、効果音を機能させることができません。Clipを使用して実行していますが、playSoundメソッドは次のようになります。

public void playSound(File filename) {
    try {
        AudioInputStream sound = AudioSystem.getAudioInputStream(filename);
        Clip clip = AudioSystem.getClip();
        clip.open(sound);

        clip.setFramePosition(0);
        clip.start();
    } 
    catch (UnsupportedAudioFileException ex) {
        ex.printStackTrace();
    } 
    catch (IOException ex) {
        ex.printStackTrace();
    } 
    catch (LineUnavailableException ex) {
        ex.printStackTrace();
    }
}

属性(ファイル)としてさまざまな効果音があり、サウンドを再生したいときにそのメソッドを呼び出します。

すべてが正常に機能します。たとえば、プレーヤーが何かを食べたときに音が鳴りますが、音がかすんでしまうことがあります。プレイヤーが何も食べていないときに、食べる音が鳴ります。

何が悪いのか知っていますか?このようないくつかの効果音を再生するのは問題がありますか?ありがとう!:)

4

1 に答える 1

0

次のアドバイスは、状況に役立つ場合とそうでない場合があります。

サウンドを再生するたびに、ディスクからクリップをロードしています。クリップは、一度読み込まれ、必要に応じて呼び出されるように設計されています。クリップを再生するには、クリップを 0 番目のミリ秒またはフレームにリセットしてから、ここで行うように play を呼び出します。このように、それは非常に迅速に開始されます。あなたがそれをプログラムした方法では、クリップはディスクからメモリに完全にロードされるまで再生を開始しません.setFramePosition(0)は不要です.新しく作成されたクリップは常に最初から再生されます(明示的に設定しない限り)他のフレーム位置に移動します)。

したがって、ゲームの開始時にクリップをオブジェクトに 1 回ロードして保持し、必要に応じて参照することをお勧めします。 .

サウンドが奇妙なタイミングで再生されている場合は、サウンドを呼び出すロジックを詳しく調べます。あなたの方法は最適ではありませんが、機能し、何らかの理由でサウンドファイルの読み込みが遅れた場合にのみ、再生時間が奇妙に遅くなります。ただし、サウンドの長さが数秒を超える場合は、読み込みの遅延が問題の原因である可能性があります。

別の考えとして、SourceDataLine は、新しいクリップを作成、ロード、および再生するよりも速く再生を開始します。SDL を再生するには、Clip よりも少し多くの CPU が必要ですが、サウンド ファイルが長い側にある場合は、それでも妥当な方法です。

于 2013-01-13T03:29:13.487 に答える