这是迄今为止我所拥有的一切。但我不确定这是否是播放音频文件的最佳方式,我也想知道如何重复音频文件。有什么建议吗?
package ponggame;
import java.applet.Applet;
import java.applet.AudioClip;
public class Sound {
public static final Sound bgMusic = new Sound("/pong.wav");
public static final Sound hitPaddle = new Sound("/bounce.wav");
private AudioClip clip;
public Sound(String fileName) {
try {
// gets the sound file that is passed in the constructor
clip = Applet.newAudioClip(Sound.class.getResource(fileName));
} catch (Exception e) {
e.printStackTrace();
}
}
// plays the music, obviously
public void play() {
try {
new Thread() { //multi-tasking stuff
public void run(){
clip.play();
}
}.start();
} catch (Exception e) {
e.printStackTrace();
}
}
}
答案 0 :(得分:2)
我不确定这是否是播放音频的最佳方式
是的,你做得对,假设这是一个小程序。另外,鉴于您不确定AudioClip
的使用,您在Sound
后面的抽象是抽象的很好用 - 尽管您不需要在单独的线程上启动音频,除非您发现播放中的延迟开始时间不可接受(play()
将立即返回并且剪辑将异步播放。)
并且还想知道如何重复音频。
见AudioClip.loop()
。它会在您调用时开始循环播放音频,直到您拨打stop()
。
答案 1 :(得分:1)
看看我为此做的代码:
import java.net.URL;
import javax.sound.sampled.*;
/**
* This class is designed to take the filename of a .wav
* inside of the com.Game package and turn it into a Clip with a playClip()
* method
* @author michaelsnowden
*
*/
public class Audio
{
URL url;
Clip clip;
AudioInputStream ais;
public Audio(String st)
{
clip = null;
try{
AudioInputStream audioIn = AudioSystem.getAudioInputStream( getClass().getResource(st));
clip = AudioSystem.getClip();
clip.open(audioIn);
}
catch(Exception e){
e.printStackTrace();
}
}
public void playClip()
{
if( clip.isRunning() )
{
clip.stop();
}
clip.setFramePosition( 0 );
clip.start();
}
}
老实说,与你正在做的事情没什么不同,但它更有效率,你想要的方法也是内置的。
将此类放入您的包中,然后将.wav文件也放入您的包中。只需拖放它们即可。然后,在Applet中,只需将.wav文件的名称作为字符串实例化此类的对象。例如,Audio catMeow = new Audio("loud_meow.wav")
。然后,稍后,catMeow.playClip();
答案 2 :(得分:0)
如果您只是想多次播放音频,可以使用调用while
方法的for
或play()
循环。以下是两者的示例:
for(int i = 5; i > 0; i--) { //For loops work like this: int i = 5 (declare the
play();//temporary variable); i > 0 (the condition, so as long as i is
//larger than 0, the loop will execute); i-- (what to do after each iteration of the loop).
}
int j = 5;
while(j > 0) {
play();
j--;
}
在每种情况下,声音应播放五次
AudioClip.loop();
也有效。