FileDocCategorySizeDatePackage
BeatBoxFinal.javaAPI DocExample11712Mon Jan 24 13:31:42 GMT 2005None

BeatBoxFinal

public class BeatBoxFinal extends Object

Fields Summary
JFrame
theFrame
JPanel
mainPanel
JList
incomingList
JTextField
userMessage
ArrayList
checkboxList
int
nextNum
Vector
listVector
String
userName
ObjectOutputStream
out
ObjectInputStream
in
HashMap
otherSeqsMap
Sequencer
sequencer
Sequence
sequence
Sequence
mySequence
Track
track
String[]
instrumentNames
int[]
instruments
Constructors Summary
Methods Summary
public voidbuildGUI()

                  
          theFrame = new JFrame("Cyber BeatBox");
          BorderLayout layout = new BorderLayout();
          JPanel background = new JPanel(layout);
          background.setBorder(BorderFactory.createEmptyBorder(10,10,10,10));

          checkboxList = new ArrayList<JCheckBox>();

          Box buttonBox = new Box(BoxLayout.Y_AXIS);
          JButton start = new JButton("Start");
          start.addActionListener(new MyStartListener());
          buttonBox.add(start);
          
          
          JButton stop = new JButton("Stop");
          stop.addActionListener(new MyStopListener());
          buttonBox.add(stop);

          JButton upTempo = new JButton("Tempo Up");
          upTempo.addActionListener(new MyUpTempoListener());
          buttonBox.add(upTempo);

          JButton downTempo = new JButton("Tempo Down");
          downTempo.addActionListener(new MyDownTempoListener());
          buttonBox.add(downTempo);

          JButton sendIt = new JButton("sendIt");
          sendIt.addActionListener(new MySendListener());
          buttonBox.add(sendIt);

          userMessage = new JTextField();
          buttonBox.add(userMessage);

          incomingList = new JList();
         
          incomingList.addListSelectionListener(new MyListSelectionListener());
          incomingList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
          JScrollPane theList = new JScrollPane(incomingList);
          buttonBox.add(theList);
         
          incomingList.setListData(listVector); // no data to start with


          Box nameBox = new Box(BoxLayout.Y_AXIS);
          for (int i = 0; i < 16; i++) {
              nameBox.add(new Label(instrumentNames[i]));
          }
        
          background.add(BorderLayout.EAST, buttonBox);
          background.add(BorderLayout.WEST, nameBox);

          theFrame.getContentPane().add(background);
          
          GridLayout grid = new GridLayout(16,16);
          grid.setVgap(1);
          grid.setHgap(2);
          mainPanel = new JPanel(grid);
          background.add(BorderLayout.CENTER, mainPanel);


          for (int i = 0; i < 256; i++) {                    
                JCheckBox c = new JCheckBox();
              
                c.setSelected(false);
                checkboxList.add(c);
                mainPanel.add(c);            
          } // end loop

          theFrame.setBounds(50,50,300,300);
          theFrame.pack();
          theFrame.setVisible(true);
        
public voidbuildTrackAndStart()

        ArrayList<Integer> trackList = null; // this will hold the instruments for each 
        // vertical column -- in other words, each tick (may have multiple instruments)
     
        sequence.deleteTrack(track);
        track = sequence.createTrack();

        // now loop through and make an event on and off for each thing that's checked

      for (int i = 0; i < 16; i++) {
         trackList = new ArrayList<Integer>();

         for (int j = 0; j < 16; j++) {
            JCheckBox jc = (JCheckBox) checkboxList.get(j + (16*i));
            if (jc.isSelected()) { 
               int key = instruments[i];  
               trackList.add(new Integer(key));
            } else {
               trackList.add(null);  // because this slot should be empty in the track
            }
  // maybe add somethiong here
         
        } // close inner

       makeTracks(trackList);
     } // close outer

     track.add(makeEvent(192,9,1,0,15)); // - so we always go to full 16 beats 
                       
       try {
           
           sequencer.setSequence(sequence); 
           sequencer.setLoopCount(sequencer.LOOP_CONTINUOUSLY);                   
           sequencer.start();
           sequencer.setTempoInBPM(120);
       } catch(Exception e) {e.printStackTrace();}
 
      
public voidchangeSequence(boolean[] checkboxState)

       
          for (int i = 0; i < 256; i++) {
             JCheckBox check = (JCheckBox) checkboxList.get(i);
             if (checkboxState[i]) {
                check.setSelected(true);
             } else {
                check.setSelected(false);
             }
          } // close for  
     
public static voidmain(java.lang.String[] args)

    


            
         new BeatBoxFinal().startUp(args[0]);  // args[0] is your user ID/screen name
      
public javax.sound.midi.MidiEventmakeEvent(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) { }
          return event;
       
public voidmakeTracks(java.util.ArrayList list)

        
         Iterator it = list.iterator();
         // which key was pressed?
         
         for (int i = 0; i < 16; i++) {
            Integer num = (Integer) it.next();
            if (num != null) {
               int numKey = num.intValue();            
            
               track.add(makeEvent(144,9,numKey, 100, i));
               track.add(makeEvent(128,9,numKey,100, i + 1));
             }
          }
     
public voidsetUpMidi()

       try {
        sequencer = MidiSystem.getSequencer();
        sequencer.open();
   //     sequencer.addMetaEventListener(this);
        sequence = new Sequence(Sequence.PPQ,4);
        track = sequence.createTrack();
        sequencer.setTempoInBPM(120);
        
       } catch(Exception e) {e.printStackTrace();}
    
public voidstartUp(java.lang.String name)

          userName = name;
          // open connection to the server
          try {
            Socket sock = new Socket("127.0.0.1", 4242);
            out = new ObjectOutputStream(sock.getOutputStream());
            in = new ObjectInputStream(sock.getInputStream());
            Thread remote = new Thread(new RemoteReader());
            remote.start();
          } catch(Exception ex) {
               
               System.out.println("couldn't connect - you'll have to play alone.");
          }
         
          setUpMidi();
          buildGUI();