Spot false dilemmas now, ask me how!
(If you're not on the edge, you're taking up too much room.)
Of course it is. Challenge: copy both versions of the code onto a *nix box and use the diff utility to work out the difference.kevin Abel wrote:I hope it is OK to open a post from 19 years ago. . . .
Maybe that will answer the problkem Bert mentioned. Remember Bert is one of the authors. And maybe not; it has shown the entire code as being different between the two filesCampbell's Computer wrote:pluma BeatBox.java BeatBoxx.java&
. . . .
diff BeatBox.java BeatBoxx.java
1,4d0
< package ch15;
<
< import javax.sound.midi.*;
< import javax.swing.*;
6,159c2,191
< import java.util.ArrayList;
<
< import static javax.sound.midi.ShortMessage.*;
<
< public class BeatBox {
< private ArrayList<JCheckBox> checkboxList;
< private Sequencer sequencer;
< private Sequence sequence;
< private 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};
<
< public static void main(String[] args) {
< new BeatBox().buildGUI();
< }
<
< public void buildGUI() {
< JFrame frame = new JFrame("Cyber BeatBox");
< frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
< BorderLayout layout = new BorderLayout();
< JPanel background = new JPanel(layout);
< background.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
<
< Box buttonBox = new Box(BoxLayout.Y_AXIS);
<
< JButton start = new JButton("Start");
< start.addActionListener(e -> buildTrackAndStart());
< buttonBox.add(start);
<
< JButton stop = new JButton("Stop");
< stop.addActionListener(e -> sequencer.stop());
< buttonBox.add(stop);
<
< JButton upTempo = new JButton("Tempo Up");
< upTempo.addActionListener(e -> changeTempo(1.03f));
< buttonBox.add(upTempo);
<
< JButton downTempo = new JButton("Tempo Down");
< downTempo.addActionListener(e -> changeTempo(0.97f));
< buttonBox.add(downTempo);
<
< Box nameBox = new Box(BoxLayout.Y_AXIS);
< for (String instrumentName : instrumentNames) {
< JLabel instrumentLabel = new JLabel(instrumentName);
< instrumentLabel.setBorder(BorderFactory.createEmptyBorder(4, 1, 4, 1));
< nameBox.add(instrumentLabel);
< }
<
< background.add(BorderLayout.EAST, buttonBox);
< background.add(BorderLayout.WEST, nameBox);
<
< frame.getContentPane().add(background);
<
< GridLayout grid = new GridLayout(16, 16);
< grid.setVgap(1);
< grid.setHgap(2);
<
< JPanel mainPanel = new JPanel(grid);
< background.add(BorderLayout.CENTER, mainPanel);
<
< checkboxList = new ArrayList<>();
< for (int i = 0; i < 256; i++) {
< JCheckBox c = new JCheckBox();
< c.setSelected(false);
< checkboxList.add(c);
< mainPanel.add(c);
< }
<
< setUpMidi();
<
< frame.setBounds(50, 50, 300, 300);
< frame.pack();
< frame.setVisible(true);
< }
<
< private void setUpMidi() {
< try {
< sequencer = MidiSystem.getSequencer();
< sequencer.open();
< sequence = new Sequence(Sequence.PPQ, 4);
< track = sequence.createTrack();
< sequencer.setTempoInBPM(120);
<
< } catch (Exception e) {
< e.printStackTrace();
< }
< }
<
< private void buildTrackAndStart() {
< int[] trackList;
<
< sequence.deleteTrack(track);
< track = sequence.createTrack();
< for (int i = 0; i < 16; i++) {
< trackList = new int[16];
<
< int key = instruments[i];
< for (int j = 0; j < 16; j++) {
< JCheckBox jc = checkboxList.get(j + 16 * i);
< if (jc.isSelected()) {
< trackList[j] = key;
< } else {
< trackList[j] = 0;
< }
< }
< makeTracks(trackList);
< track.add(makeEvent(CONTROL_CHANGE, 1, 127, 0, 16));
< }
<
< track.add(makeEvent(PROGRAM_CHANGE, 9, 1, 0, 15));
< try {
< sequencer.setSequence(sequence);
< sequencer.setLoopCount(sequencer.LOOP_CONTINUOUSLY);
< sequencer.setTempoInBPM(120);
< sequencer.start();
< } catch (Exception e) {
< e.printStackTrace();
< }
< }
<
< private void changeTempo(float tempoMultiplier) {
< float tempoFactor = sequencer.getTempoFactor();
< sequencer.setTempoFactor(tempoFactor * tempoMultiplier);
< }
<
< private void makeTracks(int[] list) {
< for (int i = 0; i < 16; i++) {
< int key = list[i];
<
< if (key != 0) {
< track.add(makeEvent(NOTE_ON, 9, key, 100, i));
< track.add(makeEvent(NOTE_OFF, 9, key, 100, i + 1));
< }
< }
< }
<
< public static MidiEvent makeEvent(int cmd, int chnl, int one, int two, int tick) {
< MidiEvent event = null;
< try {
< ShortMessage msg = new ShortMessage();
< msg.setMessage(cmd, chnl, one, two);
< event = new MidiEvent(msg, tick);
< } catch (Exception e) {
< e.printStackTrace();
< }
< return event;
< }
<
< }
---
> import javax.swing.*;
> import javax.sound.midi.*;
> import java.util.*;
> import java.awt.event.*;
>
> public class BeatBox implements MetaEventListener {
>
> JPanel mainPanel;
> ArrayList checkboxList;
> int bpm=120;
> Sequencer sequencer;
> Sequence sequence;
> Track track;
> JFrame theFrame;
>
> String[] instrumentNames= {"Bass Drum", "Closed Hi-Hat", "Open Hi-Hat", "Acoustic Snare", "Crash Cymbal",
> "Hand Clap", "High Tom", "Hi Bongo", "Maracas", "Whistle", "Low Congo", "Cowbell", "Vibraslap",
> "Lowmid Tom", "High Agogo", "Open Hi Conga"};
>
> 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 BeatBox().buildGUI();
> }
>
> 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();
> 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);
>
> Box nameBox= new Box (BoxLayout.Y_AXIS);
> for (int i=0; i<16; i++) {
> nameBox.add(new Label(instrumentNames[i]));
>
> } //close for loop
>
> 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
>
> setUpMidi();
>
> theFrame.setBounds(50,50,300,300);
> theFrame.pack();
> theFrame.setVisible(true);
> } // closes method
>
> public void setUpMidi() {
> try {
> sequencer=MidiSystem.getSequencer();
> sequencer.open();
> sequencer.addMetaEventListener(this);
> sequence=new Sequence(Sequence.PPQ,4);
> track= sequence.createTrack();
> sequencer.setTempoInBPM(bpm);
>
> } catch(Exception e) {e.printStackTrace();}
> } // closes method
>
> public void buildTrackAndStart() {
> int[] trackList=null;
>
>
> sequence.deleteTrack(track);
> track=sequence.createTrack();
>
>
>
>
> for (int i=0;i<16;i++) {
> trackList=new int[16];
>
> int key=instruments[i];
> for (int j=0;j<16;j++) {
> JCheckBox jc=(JCheckBox) checkboxList.get(j + (16*i));
>
> if (jc.isSelected()) {
> trackList[j]=key;
> } else{
> trackList[j]=0;
> }
> } //closes inner for loop
>
> makeTracks(trackList);
>
> } // closes outer for loop
>
> track.add(makeEvent(192,9,1,0,15));
>
> try {
>
> sequencer.setSequence(sequence);
> sequencer.start();
> sequencer.setTempoInBPM(bpm);
> } catch (Exception e) {e.printStackTrace();}
>
> } // closes buildTrackAndStart method
>
> public class MyStartListener implements ActionListener {
> public void actionPerformed(ActionEvent a) {
>
> buildTrackAndStart();
> }
> } // closes inner class
>
> public class MyStopListener implements ActionListener {
> public void actionPerformed(ActionEvent b) {
> sequencer.stop();
> }
> } // closes inner class
>
> public class MyUpTempoListener implements ActionListener {
> public void actionPerformed(ActionEvent c) {
> bpm+=3;
> }
> } // closes inner class
>
> public class MyDownTempoListener implements ActionListener {
> public void actionPerformed(ActionEvent d) {
> bpm-=3;
> }
> } // closes inner class
>
> public void makeTracks(int[] list) {
>
> for (int i=0; i<16; i++) {
> int key=list[i];
>
> if (key !=0) {
> track.add(makeEvent(144,9,key,100,i));
> track.add(makeEvent(128,9,key,100,i+1));
> }
> }
> }
>
> public MidiEvent makeEvent(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;
> }
>
> public void meta(MetaMessage message) {
> if (message.getType()==47) {
> sequencer.start();
> sequencer.setTempoInBPM(bpm);
> }
> }
> } //closes class
[3]+ Done pluma BeatBox.java BeatBoxx.java
Don't get me started about those stupid light bulbs. |