Java 音响系统剪辑不';当剪辑时,不要停止播放。停止();正在运行

Java 音响系统剪辑不';当剪辑时,不要停止播放。停止();正在运行,java,audio,clip,Java,Audio,Clip,我需要制作一个音频播放器,每当这个子程序运行时,它都会播放一段声音片段。它还必须在播放新的声音片段之前停止上一个声音片段 我遇到的问题是,剪辑从未注册为正在运行。检查它是否正在运行的两个if语句都没有使用过。这意味着剪辑只有在完成时才会停止,它们可能重叠,并破坏节目 我会使用clip.stop();在其他子例程中,但它会告诉我找不到“clip”符号。我不知道如何使它可供其他子程序使用 只有这样我才能得到剪辑。停止();使用此子例程的方法是将其直接放在clip.start()之后;线,它在开始后立

我需要制作一个音频播放器,每当这个子程序运行时,它都会播放一段声音片段。它还必须在播放新的声音片段之前停止上一个声音片段

我遇到的问题是,剪辑从未注册为正在运行。检查它是否正在运行的两个if语句都没有使用过。这意味着剪辑只有在完成时才会停止,它们可能重叠,并破坏节目

我会使用clip.stop();在其他子例程中,但它会告诉我找不到“clip”符号。我不知道如何使它可供其他子程序使用

只有这样我才能得到剪辑。停止();使用此子例程的方法是将其直接放在clip.start()之后;线,它在开始后立即停止剪辑,因此根本听不到

下面是我用来播放音频剪辑的子程序

public void play(String filename){
    try {
        Clip clip = AudioSystem.getClip();
        audFile = audDir + filename;
        if (clip.isRunning()){
            System.out.println("Sounds playing 1");
            clip.stop();
        }
        clip.open(AudioSystem.getAudioInputStream(new File(audFile)));
        clip.start();
        if (clip.isRunning()){
            System.out.println("Sounds playing 2");
            clip.stop();
        }
    } catch (Exception exc) {
        exc.printStackTrace(System.out);
    }
}
我会使用clip.stop();在其他子程序中,但它会告诉我 无法找到“剪辑”符号。我不知道怎么做 可供其他子例程使用

在类中声明私有剪辑字段

private Clip clip;
当您从AudioSystem.getClip()获取它时设置它

然后可以从其他方法访问它(“子例程”是Java中的类方法)

我遇到的问题是,剪辑从未注册为正在运行

调用
clip.isRunning()
时,它没有运行,但您确定它从未运行过吗

您不能假定
clip.isRunning()
clip.start()之后立即返回
true
。由于该机制是异步的,它可能有助于注册
LineListener
并侦听
START
事件

clip.start();
LineListener listener = new LineListener() {
    public void update(LineEvent event) {
    if (event.getType() == LineEvent.Type.START) {
            /*
             * here you are sure the clip is started
             */
        }
    }
};
clip.addLineListener(listener );

看看这里,也许它会对您有所帮助或提供一个解决方案跟踪:
我会使用clip.stop();在其他子例程中,但它会告诉我找不到“clip”符号。
这是否意味着您的代码会给您带来错误?如果是,具体在哪里?我还是很困惑。我会使用类似于this.clip.start()的东西吗
/
此.clip.stop()以及
Clip Clip=AudioSystem.getClip()
this.clip=clip?是的,你会的。(顺便说一句,你不需要拼写
this.clip.start()
this.clip.stop()
,只要
clip.start()
clip.stop()
就可以了)。
clip.start();
LineListener listener = new LineListener() {
    public void update(LineEvent event) {
    if (event.getType() == LineEvent.Type.START) {
            /*
             * here you are sure the clip is started
             */
        }
    }
};
clip.addLineListener(listener );