如何在特定时间内停止剪辑/对象?
Posted
技术标签:
【中文标题】如何在特定时间内停止剪辑/对象?【英文标题】:How to halt a clip/object in a certain time? 【发布时间】:2014-11-23 06:30:49 【问题描述】:你好 ***!
所以基本上,我的 Java 程序中有两个音频剪辑正在进行,我希望其中一个在某个时间停止,另一个在某个时间开始。
我会尽力解释代码。 http://pastebin.com/1zGdb30xMusic.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/nGm4DZfrProgram.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 布尔值在 Music.java 中执行 clip.stop()。没有语法错误,只是没有用。
【问题讨论】:
【参考方案1】:按照我理解您的问题的方式,您可以使用LineListener
。
例如,这里有一个类,它通过一个 List,每次当前流完成时播放下一个流:
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();
【讨论】:
不一定是我要问的,但我明白你在解释什么。有没有办法让它停下来?感谢您的意见! 我不确定你所说的'停止条件'是什么意思。 音乐播放; if(条件) musicStops 在我的例子中...if(condition) thePlaylist.playNext();
。现在,您的问题是“有没有办法让muscone 播放,停止,然后musictwo 播放?”,这是我试图回答的问题。如果这不能回答您的问题,那么您应该对其进行编辑并充分解释自己。以上是关于如何在特定时间内停止剪辑/对象?的主要内容,如果未能解决你的问题,请参考以下文章