我正在尝试创建一个鼓循环编辑器,我有一个名为Sounds的类和一个运行我的main方法的类,目前使用的所有方法都是测试Sounds类。
这是我主要课程的主体:
private static Sounds sounds;
public static void main(String args[]){
while(true){ //yes, i realize I shouldn't do this. it's only for testing
sounds.play(Sounds.BASS);
sounds.play(Sounds.CLOSED_HIHAT);
pause(500);
sounds.play(Sounds.CLOSED_HIHAT);
pause(500);
sounds.play(Sounds.SNARE);
sounds.play(Sounds.CLOSED_HIHAT);
pause(500);
sounds.play(Sounds.OPEN_HIHAT);
pause(500);
}
}
public static void pause(long time){
try{
Thread.sleep(time);
}catch(Exception ex){}
}
这是我的声音课程:
import java.applet.Applet;
import java.applet.AudioClip;
public class Sounds{
static AudioClip[] sounds ={
Applet.newAudioClip(Sounds.class.getResource("bass.wav")),
Applet.newAudioClip(Sounds.class.getResource("snare.wav")),
Applet.newAudioClip(Sounds.class.getResource("closed hihat.wav")),
Applet.newAudioClip(Sounds.class.getResource("closed hihat.wav")),
Applet.newAudioClip(Sounds.class.getResource("open hihat.wav")),
Applet.newAudioClip(Sounds.class.getResource("low floor tom.wav")),
Applet.newAudioClip(Sounds.class.getResource("high floor tom.wav")),
Applet.newAudioClip(Sounds.class.getResource("low tom.wav")),
Applet.newAudioClip(Sounds.class.getResource("low mid tom.wav")),
Applet.newAudioClip(Sounds.class.getResource("high mid tom.wav")),
Applet.newAudioClip(Sounds.class.getResource("high tom.wav")),
Applet.newAudioClip(Sounds.class.getResource("crash 1.wav")),
Applet.newAudioClip(Sounds.class.getResource("crash 2.wav")),
Applet.newAudioClip(Sounds.class.getResource("ride.wav")),
Applet.newAudioClip(Sounds.class.getResource("ride bell.wav")),
Applet.newAudioClip(Sounds.class.getResource("china.wav")),
Applet.newAudioClip(Sounds.class.getResource("splash.wav"))
};
//index constants
protected static int BASS=0;
protected static int SNARE=1;
protected static int CLOSED_HIHAT=2;
protected static int PEDAL_HIHAT=3;
protected static int OPEN_HIHAT=4;
protected static int TOM1=5;
protected static int TOM2=6;
protected static int TOM3=7;
protected static int TOM4=8;
protected static int TOM5=9;
protected static int TOM6=10;
protected static int CRASH1=11;
protected static int CRASH2=12;
protected static int RIDE=13;
protected static int RIDE_BELL=14;
protected static int CHINA=15;
protected static int SPLASH=16;
public void play(int soundIndex){
sounds[soundIndex].play();
if(soundIndex == Sounds.CLOSED_HIHAT || soundIndex == Sounds.PEDAL_HIHAT){
sounds[Sounds.OPEN_HIHAT].stop();
}
if(soundIndex == Sounds.RIDE_BELL){
sounds[Sounds.RIDE].stop();
}
}
}
我的问题是声音播放,但不是每次播放。通常会有一个完全被遗漏的傻瓜,主要是在节拍中也有小鼓或低音演奏。
如果您打算制作自己的项目副本以试图找出问题,可以在此处获取我正在使用的wav文件的zip文件夹:
http://www.mediafire.com/download/q1iok0dji4d228w/drum_wav_files.zip
提前感谢您的任何反馈。
答案 0 :(得分:0)
让一切都发挥出来,不要停止
在最后睡几分钟让每个人都玩出来
你需要将文件剪切成需要播放的内容并让其全部播放 - 在wav中没有5分钟但是想要播放2.5 - 这是不可预测的。
因此,将文件缩减为所需的文件,并按照您需要的顺序播放所有文件。
否则你必须更详细地测量文件长度,以及播放多少字节等所需的文件
补充:你可以去AudioSystem和javax.sound.sampled包它有点复杂,所以你需要阅读 -