public MidiThread (){
			File midiFile = new File(file_path); // Instantiates a File object
		    try {
		    	// Create a new Sequencer Object with the Midi File
		        Sequence sequence = MidiSystem.getSequence(midiFile);
		        midiSequencer = MidiSystem.getSequencer();
		        midiSequencer.open();
		        midiSequencer.setSequence(sequence);
		        // Set the Sequencer to loop
		        if(loop != null) {
		        	if(loop == true)
		        		midiSequencer.setLoopCount(Sequencer.LOOP_CONTINUOUSLY);
		        }
		        // Set the Midi Volume
		        synthesizer = MidiSystem.getSynthesizer();
		        synthesizer.open();
		        if (synthesizer.getDefaultSoundbank() == null) {
		        	// Hardware Volume Change
		        	midiSequencer.getTransmitter().setReceiver(
		        			MidiSystem.getReceiver() );
		        	ShortMessage volumeMessage = new ShortMessage();
	                for( int i = 0; i < 16; i++ ) {
	                    volumeMessage.setMessage( ShortMessage.CONTROL_CHANGE,
	                    		i, 7, volume );
	                    MidiSystem.getReceiver().send( volumeMessage, -1 );
	                }
		        }
		        else {
		        	// Software Volume Change
				    midiSequencer.getTransmitter().setReceiver(
				    		synthesizer.getReceiver() );
				    MidiChannel[] channels = synthesizer.getChannels();
	                for(int c = 0; channels != null && c < channels.length; c++)
	                    channels[c].controlChange( 7, volume );
				}
		    }
		    catch(MidiUnavailableException mue) {
		    	System.out.print("\nError: Midi Unavailable"); // Mike S: Added
		    	playable = false;
		    }
		    catch(InvalidMidiDataException imde) {
		    	System.out.print("\nError: Midi Invalid"); // Mike S: Added
		    	playable = false;
		    }
		    catch(IOException ioe) {
		    	System.out.print("\nError: Midi IO Exception"); // Mike S: Added
		    	playable = false;
		    }
		}