3

私はおそらくこれに間違ってアプローチしていますが、javax.sound.sampledクリップのループを停止する方法を見つける必要があります。私は9つの異なる音を持っています。ユーザーが振幅増加ボタンを押したときに別のサウンドを再生したい。現時点では、ボタンをクリックするたびにplaySoundメソッドを呼び出して機能していますが、すでに再生されているサウンドは停止していません。音はお互いに再生されます。

ユーザーがボタンを押したときに既存のすべてのサウンドを閉じる方法はありますか?

これが私のplaySoundコードです:

    public void playSound(){
    try {
        audio = AudioSystem.getAudioInputStream(soundFile[activeSound]);
        clip = AudioSystem.getClip();
        clip.open(audio);
        clip.start();
        clip.loop(Clip.LOOP_CONTINUOUSLY);           
    }

    catch (IOException ex){
        System.out.println("Sorry but there has been a problem reading your file.");
        ex.printStackTrace();
    }

    catch (UnsupportedAudioFileException ex1){
        System.out.println("Sorry but the audio file format you are using is not supported.");
        ex1.printStackTrace();
    }

    catch (LineUnavailableException ex2){
        System.out.println("Sorry but there are audio line problems.");
        ex2.printStackTrace();
    } 
}

私は今2日間これにいて、それは私を怒らせています。どんな助けでも大歓迎です。

4

1 に答える 1

1

必要なのは、既存のすべてのクリップの再生を停止することです。これは、 Dataline.stop()メソッドを使用して実行できます。必要なのは、既存のすべてのクリップにアクセスできることだけです。以下は私の提案です。現在ループしているクリップへのリンクには、参照を 1 つだけ使用していることに注意してください。複数ある場合は、1 つArrayList<Clip>だけではなく使用してください。

private Clip activeClip;
public void playSound(){
    activeClip.stop();
    try {
        audio = AudioSystem.getAudioInputStream(soundFile[activeSound]);
        clip = AudioSystem.getClip();
        clip.open(audio);
        clip.start();
        clip.loop(Clip.LOOP_CONTINUOUSLY);
        activeClip = clip;
    }

    catch (IOException ex){
        System.out.println("Sorry but there has been a problem reading your file.");
        ex.printStackTrace();
        }

    catch (UnsupportedAudioFileException ex1){
        System.out.println("Sorry but the audio file format you are using is not     supported.");
        ex1.printStackTrace();
    }

    catch (LineUnavailableException ex2){
        System.out.println("Sorry but there are audio line problems.");
        ex2.printStackTrace();
    } 
}
于 2012-04-10T12:16:37.710 に答える