4

効果音を使ったゲームを作ろうとしています。Java API を扱ったことがないので、間違いを犯している可能性があります。とはいえ、エフェクトはうまく機能します。私の唯一の問題は、プログラムが終了するたびに、おそらく数秒間、奇妙なブーンという音がすることです。

どうすればそれを取り除くことができるのでしょうか?現在、終了が killLoop() メソッドで行われる直前に、再生中のサウンドをすべて殺そうとしていますが、それではうまくいきません。

よろしくお願いします!

public class Sound
{
private AudioInputStream audio;
private Clip clip;

public Sound(String location)
{
    try {
            audio = AudioSystem.getAudioInputStream(new File(location));
            clip = AudioSystem.getClip();
            clip.open(audio);
        }

        catch(UnsupportedAudioFileException uae) {
            System.out.println(uae);
        }
        catch(IOException ioe) {
            System.out.println(ioe);
        }
        catch(LineUnavailableException lua) {
            System.out.println(lua);
        }
}

public void play()
{
    clip.setFramePosition(0);
    clip.start();
}

public void loop()
{
    clip.loop(clip.LOOP_CONTINUOUSLY);
}

public void killLoop()
{
    clip.stop();
    clip.close();
}
}

public class Athenaeum
{
public static void main(String[] args) throws IOException
{
    final Game game = new Game();
    GUI athenaeumGui = new GUI(game);

    athenaeumGui.setSize(GUI.FRAME_WIDTH, GUI.FRAME_HEIGHT);
    athenaeumGui.setTitle("Athenaeum");
    athenaeumGui.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
    athenaeumGui.setLocationRelativeTo(null);
    athenaeumGui.setMinimumSize(new Dimension(GUI.FRAME_WIDTH, GUI.FRAME_HEIGHT));
    athenaeumGui.buildGui();
    athenaeumGui.setVisible(true);

    athenaeumGui.addWindowListener(new WindowAdapter() {
        public void windowClosing(WindowEvent we)
        {
            game.killAudio(); // method calls Sound.killLoop()
            System.exit(0);
        }
    });
}

}
4

1 に答える 1

1

Java apiでは、AudioInputStream クラスには、「このオーディオ入力ストリームを閉じて、ストリームに関連付けられているシステム リソースをすべて解放する」「.close()」メソッドがあると彼らは言います。多分これはあなたが試すことができるものです。

于 2013-07-22T07:35:04.023 に答える