0

さて、私はゲームを作っていて、あなたが別の地域にいたり、AI のように中断したりすると、音楽が変わります。

だから私は自分のプログラムで音楽を表示する方法を学んだばかりで、今はそれを止めようとしていますが、方法がわかりません。以下は音楽が再生されるコードのスニペットです。アクションが発生したときの音楽。

public static void songs(String word) {
        String temp = word;
        if (temp.equals("start")) {

            try {

                try {
                    blah = new FileInputStream("C:/Users/Austin/Desktop/Storage/programimages/game/battle.wav");

                } catch (Throwable e) {
                    e.printStackTrace();
                }
                AudioStream as = new AudioStream(blah);

                AudioPlayer.player.start(as);
                System.out.println("going");

            } catch (IOException e) {
                System.err.println(e);
            }
        }

        if (temp.equals("stop")) {

            try {

                try {
                    blah = new FileInputStream("C:/Users/Austin/Desktop/Storage/programimages/game/silence.wav");

                } catch (Throwable e) {
                    e.printStackTrace();
                }
                AudioStream as = new AudioStream(blah);

                AudioPlayer.player.stop(as);
                System.out.println("stopping");

            } catch (IOException e) {
                System.err.println(e);
            }
        }
    }

これは私が見つけることができた唯一の音楽再生方法ですが、他に提案があれば教えてください。

繰り返しになりますが、私は効果音と音楽を動かしたいと思っています。今、起こっているのは 1 つの曲が再生され、その長さが最後に到達するまで、どのような状況でも停止しません。新しい曲が始まるたびに曲を停止できるようにしたいし、サウンドエフェクトがポップアップできるようにしたい.

ありがとう!(私はこれに行き詰まっており、今すぐ回答が必要なので、おそらく1つまたは2つのJavaサイトに再投稿して、できるだけ早く回答を得ることができますが、ありがとう!!!!)

EDITED CODE: (まだ現在のストリームを停止しません。これ以上の提案を歓迎します)

public static void songs(String word) throws IOException {
    String temp = word;


    if (temp.equals("go")) {
        try {
            blah = new FileInputStream("C:/Users/Austin/Desktop/Storage/programimages/game/battle.wav");
        } catch (Throwable e) {
            e.printStackTrace();
        }

        AudioStream as = new AudioStream(blah);
        AudioPlayer.player.start(as);
        System.out.println("going");
    }

    if (temp.equals("stop")) {

        //don't try and do things with a null object!
        if (as != null) {
            AudioPlayer.player.stop(as);
            System.out.println("stopping1");
        }
        System.out.println("stopping2");
        AudioPlayer.player.stop(as);
    }
}
4

2 に答える 2

1

現在AudioStream、停止ブランチに新しいものを作成し、これを使用して停止メソッドを呼び出しています。これは、現在再生中のオブジェクトとは別のオブジェクトです。AudioStreamクラス変数を作成し、代わりに stop を呼び出してみてください。

編集:コードを含むクラスの上部に...

class YourClass {
    //the class member variable
    private AudioStream as;
    //[etc...]

開始ブランチで:

// 'as' has already been defined above
as = new AudioStream(blah);
AudioPlayer.player.start(as);
System.out.println("going");

停止ブランチで:

try
{
    //don't try and do things with a null object!
    if (as != null)
    {
        AudioPlayer.player.stop(as);
    }
    System.out.println("stopping");
}
catch (IOException e)
{
    System.err.println(e);
}

メソッドの識別子に問題がある可能性がありstaticます。インスタンス化されたクラス内からこれを呼び出す場合、これは必要ありません。

于 2012-03-12T14:00:47.773 に答える
0

私の Eclipse IDE でこれらの sun.audio オブジェクトにアクセスすることさえできません。

Java Sound ライブラリ (javax.sound.sampled) は、やりたいことを処理できますか? Clip と SourceDataLine の両方で、再生を停止できます。ネイティブ Java を使用する場合は、これがより一般的なサウンドの再生方法です。

への再生はここにあります:

http://docs.oracle.com/javase/tutorial/sound/playing.html

しかし、ドキュメント全体としては、例が豊富というわけではありません。このサイトにサンプルコードがあります

http://www.jsresources.org/

また、ネイティブ Java のアプローチで問題が発生した場合に役立つ多くの人がここにいます。

于 2012-03-13T07:22:41.720 に答える