为什么我的音频剪辑不会一直播放?

时间:2015-12-31 07:44:29

标签: java audio

我正在尝试创建一个鼓循环编辑器,我有一个名为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

提前感谢您的任何反馈。

1 个答案:

答案 0 :(得分:0)

让一切都发挥出来,不要停止

在最后睡几分钟让每个人都玩出来

你需要将文件剪切成需要播放的内容并让其全部播放 - 在wav中没有5分钟但是想要播放2.5 - 这是不可预测的。

因此,将文件缩减为所需的文件,并按照您需要的顺序播放所有文件。

否则你必须更详细地测量文件长度,以及播放多少字节等所需的文件

补充:你可以去AudioSystem和javax.sound.sampled包它有点复杂,所以你需要阅读 -