用J2se做游戏音乐时的问题 本帖最后由 hnd201031000407 于 2012-04-20 15:24:52 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 把不同的音乐做成不同的clip对象,缓存在Audio中,播放方法做成静态方法.放背景音乐就直接调用Audio.playBG(),里面调用bgClip.loop(-1)循环播放开炮就调用Audio.playFire(),里面调用fireClip.start(),播放一次. 你这个方法我试过,行不通。因为clip如果只new过一次那么就只能播放一次,播完再start是没声音的。除非再setFramePosition设置回到一开始的位置。但是这样子的话就有一个问题,因为开炮很密集,所以上一个声音还没播放完,这边又调用他了,那边没播完这里再setFramePosition回到起点肯定行不通。 start只会播放一次,可以用loop(1)替换播放多次。不过由于你开炮密集的原因,为了达到并发播放,可以先把声音file读入byte[]中缓存起来,然后每次开炮时去重新播放。//sample code for file to byte[] InputStream input = null;try { input = new FileInputStream("C:\\Windows\\Media\\tada.wav"); ByteArrayOutputStream output = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int n = 0; while ((n = input.read(buffer)) != -1) { output.write(buffer, 0, n); } wavBytes = output.toByteArray();//wavBytes is a cached byte[]} catch (IOException e) { e.printStackTrace();} finally { if (input != null) { try { input.close(); } catch (IOException e) { e.printStackTrace(); } }}//code for fireAudioInputStream in = AudioSystem.getAudioInputStream(new ByteArrayInputStream(wavBytes));Clip clip = AudioSystem.getClip();clip.open(in);clip.start(); BufferedReader 问题 关于Java打包后读取文件的问题 新手求助 谢谢…… 【求助】二维数组和一维数组的转换,请问它们直接引用关系 一段经典代码,说明yield的用法。。。。。 数字的正则表达式 一个字母大小写转换的程序,可以便宜但是无法运行啊! 如何解析 FTP 的目录列表?100分相送。 无法显示,为什么 有没有关于javabuilder的入门和进阶好书? Java网络编程的菜鸟问题 你们习惯怎样写主函数形参里的args?
放背景音乐就直接调用Audio.playBG(),里面调用bgClip.loop(-1)循环播放
开炮就调用Audio.playFire(),里面调用fireClip.start(),播放一次.
除非再setFramePosition设置回到一开始的位置。但是这样子的话就有一个问题,因为开炮很密集,所以上一个声音还没播放完,这边又调用他了,那边没播完这里再setFramePosition回到起点肯定行不通。
InputStream input = null;
try {
input = new FileInputStream("C:\\Windows\\Media\\tada.wav");
ByteArrayOutputStream output = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int n = 0;
while ((n = input.read(buffer)) != -1) {
output.write(buffer, 0, n);
}
wavBytes = output.toByteArray();//wavBytes is a cached byte[]
} catch (IOException e) {
e.printStackTrace();
} finally {
if (input != null) {
try {
input.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
//code for fire
AudioInputStream in = AudioSystem.getAudioInputStream(new ByteArrayInputStream(wavBytes));
Clip clip = AudioSystem.getClip();
clip.open(in);
clip.start();