Hallo zusammen,
ich arbeite mich gerade durch das Buch "JAVA-Von Kopf bis Fuß" durch, und bin jetzt an der Stelle angelangt, an der man den Code für die BeatBox abtippen soll. Das Programm lässt sich starten, doch wenn ich auf "Starten" klicke, kommt kein Ton sondern die folgende Meldung:
javax.sound.midi.InvalidMidiDataException: command out of range: 0xe
at javax.sound.midi.ShortMessage.setMessage(ShortMessage.java:280)
at BeatBox.eventErzeugen(BeatBox.java:161)
at BeatBox.tracksErzeugen(BeatBox.java:152)
at BeatBox.trackErstellenUndStarten(BeatBox.java:110)
at BeatBox$MeinStartListener.actionPerformed(BeatBox.java:125)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1849)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2169)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
at java.awt.Component.processMouseEvent(Component.java:5517)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3129)
at java.awt.Component.processEvent(Component.java:5282)
at java.awt.Container.processEvent(Container.java:1966)
at java.awt.Component.dispatchEventImpl(Component.java:3984)
at java.awt.Container.dispatchEventImpl(Container.java:2024)
at java.awt.Component.dispatchEvent(Component.java:3819)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4212)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3892)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3822)
at java.awt.Container.dispatchEventImpl(Container.java:2010)
at java.awt.Window.dispatchEventImpl(Window.java:1791)
at java.awt.Component.dispatchEvent(Component.java:3819)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)
Der Code ist genau wie im Buch:
Hier steh ich jetzt als blutiger Anfänger ganz schön auf dem Schlauch. Ich denke ja mal, das ist die Ausgabe von "catch (Exception e) {e.printStackTrace();}", oder? Aber woran liegt das?
Hoffe ihr könnt mir hier helfen....
Vielen Dank und einen guten Rutsch
Gruß Markus
ich arbeite mich gerade durch das Buch "JAVA-Von Kopf bis Fuß" durch, und bin jetzt an der Stelle angelangt, an der man den Code für die BeatBox abtippen soll. Das Programm lässt sich starten, doch wenn ich auf "Starten" klicke, kommt kein Ton sondern die folgende Meldung:
javax.sound.midi.InvalidMidiDataException: command out of range: 0xe
at javax.sound.midi.ShortMessage.setMessage(ShortMessage.java:280)
at BeatBox.eventErzeugen(BeatBox.java:161)
at BeatBox.tracksErzeugen(BeatBox.java:152)
at BeatBox.trackErstellenUndStarten(BeatBox.java:110)
at BeatBox$MeinStartListener.actionPerformed(BeatBox.java:125)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1849)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2169)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
at java.awt.Component.processMouseEvent(Component.java:5517)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3129)
at java.awt.Component.processEvent(Component.java:5282)
at java.awt.Container.processEvent(Container.java:1966)
at java.awt.Component.dispatchEventImpl(Component.java:3984)
at java.awt.Container.dispatchEventImpl(Container.java:2024)
at java.awt.Component.dispatchEvent(Component.java:3819)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4212)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3892)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3822)
at java.awt.Container.dispatchEventImpl(Container.java:2010)
at java.awt.Window.dispatchEventImpl(Window.java:1791)
at java.awt.Component.dispatchEvent(Component.java:3819)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)
Der Code ist genau wie im Buch:
Java:
import java.awt.*;
import javax.swing.*;
import javax.sound.midi.*;
import java.util.*;
import java.awt.event.*;
public class BeatBox {
JPanel hauptPanel;
ArrayList<JCheckBox> checkboxListe;
Sequencer sequencer;
Sequence sequence;
Track track;
JFrame derFrame;
String[] instrumentNamen = {"Bassdrum", "Hi-Hat, geschlossen", "Hi-Hat, offen", "Snaredrum", "Crashbecken", "Händeklatschen", "Hohes Tom-Tom", "Hohes Bongo", "Maracas", "Trillerpfeife", "Tiefe Conga", "Kuhglocke", "Vibraslap" , "Tieferes Tom-Tom", "Hohes Agogo", "Hohe Conga, offen"};
int[] instrumente ={35,42,46,38,49,39,50,60,70,72,64,56,58,47,67,63};
public static void main (String[]args){
new BeatBox().guiErstellen();
}
public void guiErstellen(){
derFrame=new JFrame("Cyber-BeatBox");
derFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
BorderLayout layout=new BorderLayout();
JPanel hintergrund=new JPanel (layout);
hintergrund.setBorder(BorderFactory.createEmptyBorder(10,10,10,10));
checkboxListe=new ArrayList<JCheckBox>();
Box buttonBox=new Box(BoxLayout.Y_AXIS);
JButton start=new JButton("Starten");
start.addActionListener(new MeinStartListener());
buttonBox.add(start);
JButton stopp=new JButton("Stoppen");
stopp.addActionListener(new MeinStoppListener());
buttonBox.add(stopp);
JButton schneller=new JButton("Schneller");
schneller.addActionListener(new MeinSchnellerListener());
buttonBox.add(schneller);
JButton langsamer=new JButton("Langsamer");
langsamer.addActionListener(new MeinLangsamerListener());
buttonBox.add(langsamer);
Box namensBox=new Box(BoxLayout.Y_AXIS);
for (int i=0;i<16;i++){
namensBox.add(new Label(instrumentNamen[i]));
}
hintergrund.add(BorderLayout.EAST, buttonBox);
hintergrund.add(BorderLayout.WEST, namensBox);
derFrame.getContentPane().add(hintergrund);
GridLayout raster = new GridLayout(16,16);
raster.setVgap(1);
raster.setHgap(2);
hauptPanel=new JPanel(raster);
hintergrund.add(BorderLayout.CENTER, hauptPanel);
for (int i=0; i<256; i++){
JCheckBox c=new JCheckBox();
c.setSelected(false);
checkboxListe.add(c);
hauptPanel.add(c);
}
midiEinrichten();
derFrame.setBounds(50,50,300,300);
derFrame.pack();
derFrame.setVisible(true);
}
public void midiEinrichten(){
try {
sequencer=MidiSystem.getSequencer();
sequencer.open();
sequence=new Sequence(Sequence.PPQ,4);
track=sequence.createTrack();
sequencer.setTempoInBPM(120);
}catch (Exception e) {e.printStackTrace();}
}
public void trackErstellenUndStarten(){
int[]trackListe=null;
sequence.deleteTrack(track);
track=sequence.createTrack();
for (int i=0; i<16; i++){
trackListe=new int[16];
int taste=instrumente[i];
for (int j=0; j<16;j++){
JCheckBox jc=checkboxListe.get(j+(16*i));
if (jc.isSelected()){
trackListe[j]=taste;
}else{
trackListe[j]=0;
}
}
tracksErzeugen(trackListe);
}
track.add(eventErzeugen(192,9,1,0,16));
try{
sequencer.setSequence(sequence);
sequencer.setLoopCount(Sequencer.LOOP_CONTINUOUSLY);
sequencer.start();
sequencer.setTempoInBPM(120);
} catch (Exception e) {e.printStackTrace();}
}
public class MeinStartListener implements ActionListener{
public void actionPerformed(ActionEvent a){
trackErstellenUndStarten();
}
}
public class MeinStoppListener implements ActionListener{
public void actionPerformed (ActionEvent a){
sequencer.stop();
}
}
public class MeinSchnellerListener implements ActionListener{
public void actionPerformed(ActionEvent a){
float tempoFactor=sequencer.getTempoFactor();
sequencer.setTempoFactor((float)(tempoFactor*1.03));
}
}
public class MeinLangsamerListener implements ActionListener{
public void actionPerformed(ActionEvent a){
float tempoFactor=sequencer.getTempoFactor();
sequencer.setTempoFactor((float)(tempoFactor*.97));
}
}
public void tracksErzeugen(int[]liste){
for(int i=0;i<16;i++){
int taste=liste[i];
if (taste!=0){
track.add(eventErzeugen(14,9,taste, 100, i));
track.add(eventErzeugen(128,9,taste, 100, i+1));
}
}
}
public MidiEvent eventErzeugen (int comd, int chan, int one, int two, int tick){
MidiEvent event=null;
try{
ShortMessage a=new ShortMessage();
a.setMessage (comd, chan, one, two);
event = new MidiEvent (a, tick);
} catch (Exception e) {e.printStackTrace();}
return event;
}
}
Hier steh ich jetzt als blutiger Anfänger ganz schön auf dem Schlauch. Ich denke ja mal, das ist die Ausgabe von "catch (Exception e) {e.printStackTrace();}", oder? Aber woran liegt das?
Hoffe ihr könnt mir hier helfen....
Vielen Dank und einen guten Rutsch
Gruß Markus