Mercurial > hg > mep
diff MidiPlayer.java @ 39:796b3e3e053f
Changed MidiPlayer.java to allow the use of external sequencer programs (e.g. Garageband).
Changed Experiment.java to allow user to specify in commandline whether to use default MidiDevice (true), specified MidiDevice (0<variable<MidiDevs.length), or list the available devices on start up.
Changed ExperimentGui.java and SubjectDataPanel.java to add familiarity question if familiarity question isn't included at the presentation of each stimuli.
author | CBussey |
---|---|
date | Fri, 31 May 2013 17:40:59 +0100 |
parents | 7102e646b223 |
children | 75354c638975 |
line wrap: on
line diff
--- a/MidiPlayer.java Fri Nov 16 10:39:57 2012 +0000 +++ b/MidiPlayer.java Fri May 31 17:40:59 2013 +0100 @@ -45,20 +45,32 @@ private Synthesizer synthesizer = null; private Sequence sequence = null; private ArrayList<Long> onsets, offsets = null; - private ArrayList<Integer> pitches, velocities = null; - private int midiDevice = 0; /* 4 for usb midi device */ + private ArrayList<Integer> pitches, velocities = null; + private File midiFile; + private boolean defaultMD = false; + private int midiDevice; private boolean debug; /* accessors */ - public Sequencer getSequencer() { return sequencer; } + public Sequencer getSequencer() { return sequencer; } + public boolean usingDefault() { return defaultMD; } - /* Constructors */ - public MidiPlayer(String path, int deviceNumber, boolean d) { - File midiFile = new File(path); - midiDevice = deviceNumber; - debug = d; - - // Get sequence + /* Constructors */ + public MidiPlayer(String path, int deviceNumber, boolean d) { + if(deviceNumber == -1) { + defaultMD = true; + midiDevice = 0; + } + else{ + midiDevice = deviceNumber; + } + midiFile = new File(path); + debug = d; + setup(); + } + + private void setup(){ + // Get sequence try { sequence = MidiSystem.getSequence(midiFile); } catch (InvalidMidiDataException e) { e.printStackTrace(); @@ -68,12 +80,6 @@ e.printStackTrace(); System.exit(1); } - // Get sequencer - try { sequencer = MidiSystem.getSequencer(); } - catch (MidiUnavailableException e) { - e.printStackTrace(); - System.exit(1); - } //sequencer.setTempoInBPM(bpm); // Workaround bug in JDK // sequencer.addMetaEventListener(new MetaEventListener() { @@ -86,36 +92,43 @@ // } // } // }); - // Open sequencer - try { sequencer.open(); } - catch (MidiUnavailableException e) { - e.printStackTrace(); - System.exit(1); - } - // Assign sequence to sequencer - try { sequencer.setSequence(sequence); } - catch (InvalidMidiDataException e) { - e.printStackTrace(); - System.exit(1); - } - // Set up MIDI output for sequence + // Set up MIDI output for sequence try { MidiDevice.Info msinfo[] = MidiSystem.getMidiDeviceInfo(); for(int i = 0; i < msinfo.length; i++) { - MidiDevice.Info m = msinfo[i]; -// System.out.println("Name: " + m.getName() + -// "; Vendor: " + m.getVendor() + -// "; Version: " + m.getVersion()); + System.out.println("Carl: "+i); + MidiDevice.Info m = msinfo[i]; + System.out.println("Name: " + m.getName() + + "; Vendor: " + m.getVendor() + + "; Version: " + m.getVersion()); } + MidiDevice synth = MidiSystem.getMidiDevice(msinfo[midiDevice]); + synth.open(); + // Get sequencer + try { sequencer = MidiSystem.getSequencer(defaultMD); } + catch (MidiUnavailableException e) { + e.printStackTrace(); + System.exit(1); + } // synthesizer = MidiSystem.getSynthesizer(); - MidiDevice synth = MidiSystem.getMidiDevice(msinfo[midiDevice]); + + try { sequencer.open(); }//// + catch (MidiUnavailableException e) { + e.printStackTrace(); + System.exit(1); + } + // Assign sequence to sequencer + try { sequencer.setSequence(sequence); } + catch (InvalidMidiDataException e) { + e.printStackTrace(); + System.exit(1); + }//// // Change the patch // MidiChannel channels[] = synthesizer.getChannels(); // for (int i = 0; i < channels.length; i++) // channels[i].programChange(65); - - synth.open(); + Receiver synthReceiver = synth.getReceiver(); Transmitter seqTransmitter = sequencer.getTransmitter(); seqTransmitter.setReceiver(synthReceiver);