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);