Hallo!
Ich bin gerade dabei, einen Drumcomputer bzw. Drummaker zu schreiben. Das Programm bestitzt 5 x 16 JCheckboxen. (siehe Bild 1) Diese kann man an- und abwählen. Auf jeder Zeile läuft ein anderes Instrument, sprich wenn ich jetzt bei Zeile 3 die erste JRadioButton anclicke, wird die boolean Variable Sound3[1] (SoundZeile[Spalte]) auf "true" gesetzt. So geht das jetzt mit allen JCheckboxen und natürlich kann man sie auch wieder abwählen.
Jetzt habe ich eine Funktion geschrieben, mit der man das dann abspielen kann, hier der Code von void playAll(Anzahl der Wiederholungen):
Die Funktion playSound(int Soundnummer,String Soundfile), Soundfile ist der "File", wenn ein anderer Sounds als der in
definierten Sound abgespielt wird (das ist aber eher unwichtig), die Funktion sieht so aus:
Die Sounds werden problemlos abgespielt.
Jetzt aber zu meinem eigentlichen Problem: Ich will, das man die Wiedergabe vorzeitig abbrechen kann. Wenn man jetzt einen Button "Stopp" einbaut, und auf diesen clickt, wird die Funktion erst nach der Funktion vom Button "Abspielen" ausgeführt, und ist damit sinnlos.
Vielleicht kann mir ja jemand helfen, Zettelkasten.
Ich bin gerade dabei, einen Drumcomputer bzw. Drummaker zu schreiben. Das Programm bestitzt 5 x 16 JCheckboxen. (siehe Bild 1) Diese kann man an- und abwählen. Auf jeder Zeile läuft ein anderes Instrument, sprich wenn ich jetzt bei Zeile 3 die erste JRadioButton anclicke, wird die boolean Variable Sound3[1] (SoundZeile[Spalte]) auf "true" gesetzt. So geht das jetzt mit allen JCheckboxen und natürlich kann man sie auch wieder abwählen.
Jetzt habe ich eine Funktion geschrieben, mit der man das dann abspielen kann, hier der Code von void playAll(Anzahl der Wiederholungen):
Java:
public void playAll(int Nr)
{
for(int NR = 1; NR <= Nr; NR++)
{
for(int i = 1; i < 17; i++)
{
try
{
Thread.sleep(Tempo); // Länge festlegen
if(Sound1[i] == true){
MyFile = 1;
playSound(1,"false");
}
if(Sound2[i] == true)
{
MyFile = 2;
playSound(2,"false");
}
if(Sound3[i] == true)
{
MyFile = 3;
playSound(3,"false");
}
if(Sound4[i] == true)
{
MyFile = 4;
playSound(4,"false");
}
if(Sound5[i] == true)
{
MyFile = 5;
playSound(5,"false");
}
}
catch(Exception x)
{
}
}
}
}
Code:
String Soundfiles = new String { "","Kick","Snare","HiHat","Ride","Stick" };
Java:
public void playSound(int MyFile,String File)
{
if(File.equals("false"))
{
try
{
AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(new File(Pfad+Soundfiles[MyFile]+".wav"));
AudioFormat af = audioInputStream.getFormat();
int size = (int) (af.getFrameSize() * audioInputStream.getFrameLength());
byte[] audio = new byte[size];
DataLine.Info info = new DataLine.Info(Clip.class, af, size);
audioInputStream.read(audio, 0, size);
//for(int i = 0; i < 1001; i++)
//{
Clip clip = (Clip) AudioSystem.getLine(info);
clip.open(af,audio,0,size);
clip.start();
//}
}
catch(Exception e)
{
}
}
else
{
try
{
AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(new File(Pfad+File+".wav"));
AudioFormat af = audioInputStream.getFormat();
int size = (int) (af.getFrameSize() * audioInputStream.getFrameLength());
byte[] audio = new byte[size];
DataLine.Info info = new DataLine.Info(Clip.class, af, size);
audioInputStream.read(audio, 0, size);
//for(int i = 0; i < 1001; i++)
//{
Clip clip = (Clip) AudioSystem.getLine(info);
clip.open(af,audio,0,size);
clip.start();
//}
}
catch(Exception e)
{
}
}
}
Jetzt aber zu meinem eigentlichen Problem: Ich will, das man die Wiedergabe vorzeitig abbrechen kann. Wenn man jetzt einen Button "Stopp" einbaut, und auf diesen clickt, wird die Funktion erst nach der Funktion vom Button "Abspielen" ausgeführt, und ist damit sinnlos.
Vielleicht kann mir ja jemand helfen, Zettelkasten.
Anhänge
Zuletzt bearbeitet: