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