gpt4 book ai didi

java - 如何在特定时间内停止剪辑/对象?

转载 作者:太空宇宙 更新时间:2023-11-04 06:23:45 25 4
gpt4 key购买 nike

嗨 Stackoverflow!

基本上,我的 Java 程序中有两个音频剪辑,我希望其中一个在某个时间停止,另一个在某个时间开始。

我会尽力解释代码。 http://pastebin.com/1zGdb30x音乐.java

    package testingground;


import java.io.IOException;
import java.net.URL;

import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.UnsupportedAudioFileException;


public class Music {
public void musictwo() {
URL url;
try {
url = new URL("file:///D:/Yes/GUI/song.wav");
Clip clip = AudioSystem.getClip();
AudioInputStream ais = AudioSystem.
getAudioInputStream( url );
clip.open(ais);
clip.loop(100);

} catch (UnsupportedAudioFileException | IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (LineUnavailableException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}


public void musicone() {
URL url;
try {
url = new URL("file:///D:/Yes/GUI/rival.wav");
Clip clip = AudioSystem.getClip();
AudioInputStream ais = AudioSystem.
getAudioInputStream( url );
clip.open(ais);
clip.loop(100);
} catch (UnsupportedAudioFileException | IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (LineUnavailableException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

}

http://pastebin.com/nGm4DZfr程序.java

package testingground;

import javax.swing.JOptionPane;

public class Program {
public static void main(String[] args) {
System.out.println("The first song should play now!");
Music a = new Music();
a.musicone();
System.out.println("The second song should play now!");
a.musictwo();
JOptionPane.showMessageDialog(null,"Press 'ok' to end the application.");
}
}

在 Music.java 中,我的音频文件正在运行,它们只是本地 .wav 文件,仅在我的计算机上可用。在program.java中,输出是musicone和musictwo同时播放。有没有办法让 muscone 播放,停止,然后 musictwo 播放?

我尝试过的事情-- 在program.java中有一个if和else语句来执行clip.stop()。没有错误,只是没用。- 使用program.java 中的if 和else boolean 值来执行Music.java 中的clip.stop()。没有语法错误,只是不起作用。

最佳答案

据我理解你的问题,你可以使用 LineListener .

举个例子,这里有一个类,它遍历一个列表,每次当前流完成时播放下一个流:

class Playlist implements LineListener {
private final List<AudioInputStream> list = new ArrayList<>();
private Clip clip;
private int next;

@Override
public void update(LineEvent evt) {
if(evt.getType() == LineEvent.STOP) {
try {
playNext();
} catch(LineUnavailableException | IOException e) {
e.printStackTrace();
}
}
}

void enqueue(AudioInputStream ais) {
synchronized(this) {
list.add(ais);
}
}

void playNext() throws LineUnavailableException, IOException {
synchronized(this) {
if(list.isEmpty()) {
throw new IllegalStateException();
}
if(clip != null) {
if(clip.isRunning()) clip.stop();
if(clip.isOpen()) clip.close();
}

clip = AudioSystem.getClip();
clip.addLineListener(listener);
try {
clip.open(list.get(next));
} finally {
next = (next + 1) % list.size();
}
clip.start();
}
}
}

关于java - 如何在特定时间内停止剪辑/对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27086264/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com