Commit 88f19a56 authored by Trisha Gee's avatar Trisha Gee
Browse files

[appA] Adding the makeEvent method we've been using in 3rd Ed. Addressing...

[appA] Adding the makeEvent method we've been using in 3rd Ed. Addressing IntelliJ  warnings (mostly unused code, plus adding generics where needed). Removing comments on the closing braces.
parent 5a3852f3
Loading
Loading
Loading
Loading
+59 −84
Changes for src/main/java/appA/BeatBoxFinal.java: 59 added lines, 84 removed lines.
Original line number Diff line number Diff line
@@ -5,10 +5,8 @@ import javax.swing.*;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.awt.event.*;
import java.io.*;
import java.net.Socket;
import java.util.ArrayList;
import java.util.HashMap;
@@ -16,28 +14,24 @@ import java.util.Iterator;
import java.util.Vector;

public class BeatBoxFinal {
  JFrame theFrame;
  JPanel mainPanel;
  JList incomingList;
  JTextField userMessage;
  ArrayList<JCheckBox> checkboxList;
  int nextNum;
  Vector<String> listVector = new Vector<String>();
  String userName;
  ObjectOutputStream out;
  ObjectInputStream in;
  HashMap<String, boolean[]> otherSeqsMap = new HashMap<String, boolean[]>();

  Sequencer sequencer;
  Sequence sequence;
  Sequence mySequence = null;
  Track track;


  String[] instrumentNames = {" Bass Drum", " Closed Hi-Hat", " Open Hi-Hat", "Acoustic Snare", " Crash Cymbal", " Hand Clap", " High Tom", " Hi Bongo", "Maracas", "Whistle", " Low Conga", "Cowbell", "Vibraslap", "Low- mid Tom", " High Agogo", " Open Hi Conga"};

  int[] instruments = {35, 42, 46, 38, 49, 39, 50, 60, 70, 72, 64, 56, 58, 47, 67, 63};

  private JFrame theFrame;
  private JPanel mainPanel;
  private JList<String> incomingList;
  private JTextField userMessage;
  private ArrayList<JCheckBox> checkboxList;
  private int nextNum;
  private Vector<String> listVector = new Vector<>();
  private String userName;
  private ObjectOutputStream out;
  private ObjectInputStream in;
  private HashMap<String, boolean[]> otherSeqsMap = new HashMap<>();

  private Sequencer sequencer;
  private Sequence sequence;
  private Track track;

  private final String[] instrumentNames = {" Bass Drum", " Closed Hi-Hat", " Open Hi-Hat", "Acoustic Snare", " Crash Cymbal", " Hand Clap", " High Tom", " Hi Bongo", "Maracas", "Whistle", " Low Conga", "Cowbell", "Vibraslap", "Low- mid Tom", " High Agogo", " Open Hi Conga"};
  private final int[] instruments = {35, 42, 46, 38, 49, 39, 50, 60, 70, 72, 64, 56, 58, 47, 67, 63};

  public static void main(String[] args) {
    new BeatBoxFinal().startUp(args[0]);  // args[0] is your user ID/screen name
@@ -53,20 +47,19 @@ public class BeatBoxFinal {
      Thread remote = new Thread(new RemoteReader());
      remote.start();
    } catch (Exception ex) {
      System.out.println("couldn’t connect-you’ll have to play alone.");
      System.out.println("Couldn’t connect-you’ll have to play alone.");
    }
    setUpMidi();
    buildGUI();
  } // close startUp
  }

  public void buildGUI() {

    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>();
    checkboxList = new ArrayList<>();

    Box buttonBox = new Box(BoxLayout.Y_AXIS);
    JButton start = new JButton("Start");
@@ -93,7 +86,7 @@ public class BeatBoxFinal {

    buttonBox.add(userMessage);

    incomingList = new JList();
    incomingList = new JList<>();
    incomingList.addListSelectionListener(new MyListSelectionListener());
    incomingList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    JScrollPane theList = new JScrollPane(incomingList);
@@ -120,12 +113,12 @@ public class BeatBoxFinal {
      c.setSelected(false);
      checkboxList.add(c);
      mainPanel.add(c);
    } // end loop
    }

    theFrame.setBounds(50, 50, 300, 300);
    theFrame.pack();
    theFrame.setVisible(true);
  } // close buildGUI
  }

  public void setUpMidi() {
    try {
@@ -137,30 +130,26 @@ public class BeatBoxFinal {
    } catch (Exception e) {
      e.printStackTrace();
    }

  } // close setUpMidi

  }

  public void buildTrackAndStart() {
    ArrayList<Integer> trackList = null; // this will hold the instruments for each
    ArrayList<Integer> trackList; // this will hold the instruments for each
    sequence.deleteTrack(track);
    track = sequence.createTrack();

    for (int i = 0; i < 16; i++) {

      trackList = new ArrayList<Integer>();

      trackList = new ArrayList<>();
      for (int j = 0; j < 16; j++) {
        JCheckBox jc = (JCheckBox) checkboxList.get(j + (16 * i));
        JCheckBox jc = checkboxList.get(j + (16 * i));
        if (jc.isSelected()) {
          int key = instruments[i];
          trackList.add(new Integer(key));
          trackList.add(key);
        } else {
          trackList.add(null);  // because this slot should be empty in the track
        }
      } // close inner loop
      }
      makeTracks(trackList);
    } // close outer loop
    }
    track.add(makeEvent(192, 9, 1, 0, 15)); // - so we always go to full 16 beats
    try {
      sequencer.setSequence(sequence);
@@ -170,27 +159,26 @@ public class BeatBoxFinal {
    } catch (Exception e) {
      e.printStackTrace();
    }
  } // close method
  }

  public class MyStartListener implements ActionListener {
    public void actionPerformed(ActionEvent a) {
      buildTrackAndStart();
    } // close actionPerformed
  } // close inner class
    }
  }

  public class MyStopListener implements ActionListener {
    public void actionPerformed(ActionEvent a) {
      sequencer.stop();
    } // close actionPerformed
  } // close inner class
    }
  }

  public class MyUpTempoListener implements ActionListener {
    public void actionPerformed(ActionEvent a) {
      float tempoFactor = sequencer.getTempoFactor();
      sequencer.setTempoFactor((float) (tempoFactor * 1.03));
    } // close actionPerformed
  } // close inner class

    }
  }

  public class MyDownTempoListener implements ActionListener {
    public void actionPerformed(ActionEvent a) {
@@ -208,7 +196,7 @@ public class BeatBoxFinal {
        if (check.isSelected()) {
          checkboxState[i] = true;
        }
      } // close loop
      }
      String messageToSend = null;
      try {
        out.writeObject(userName + nextNum++ + ": " + userMessage.getText());
@@ -217,13 +205,13 @@ public class BeatBoxFinal {
        System.out.println("Sorry dude. Could not send it to the server.");
      }
      userMessage.setText("");
    } // close actionPerformed
  } // close inner class
    }
  }

  public class MyListSelectionListener implements ListSelectionListener {
    public void valueChanged(ListSelectionEvent le) {
      if (!le.getValueIsAdjusting()) {
        String selected = (String) incomingList.getSelectedValue();
        String selected = incomingList.getSelectedValue();
        if (selected != null) {
          // now go to the map, and change the sequence
          boolean[] selectedState = (boolean[]) otherSeqsMap.get(selected);
@@ -232,13 +220,11 @@ public class BeatBoxFinal {
          buildTrackAndStart();
        }
      }
    } // close valueChanged
  } // close inner class

    }
  }

  public class RemoteReader implements Runnable {
    boolean[] checkboxState = null;
    String nameToShow = null;
    Object obj = null;

    public void run() {
@@ -255,27 +241,15 @@ public class BeatBoxFinal {
      } catch (Exception ex) {
        ex.printStackTrace();
      }
    } // close run
  } // close inner class

  public class MyPlayMineListener implements ActionListener {
    public void actionPerformed(ActionEvent a) {
      if (mySequence != null) {
        sequence = mySequence;  // restore to my original
    }
    } // close actionPerformed
  } // close inner class
  }

  public void changeSequence(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);
      JCheckBox check = checkboxList.get(i);
      check.setSelected(checkboxState[i]);
    }
  }
    } // close loop
  } // close changeSequence

  public void makeTracks(ArrayList list) {
    Iterator it = list.iterator();
@@ -286,22 +260,23 @@ public class BeatBoxFinal {
        track.add(makeEvent(144, 9, numKey, 100, i));
        track.add(makeEvent(128, 9, numKey, 100, i + 1));
      }
    } // close loop
  } // close makeTracks()
    }
  }


  public MidiEvent makeEvent(int comd, int chan, int one, int two, int tick) {
  public static MidiEvent makeEvent(int cmd, int chnl, 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);
      ShortMessage msg = new ShortMessage();
      msg.setMessage(cmd, chnl, one, two);
      event = new MidiEvent(msg, tick);
    } catch (Exception e) {
      e.printStackTrace();
    }
    return event;
  } // close makeEvent
  }

} // close class
}