/*- * Copyright 2005-2018 Diomidis Spinellis * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */package gr.aueb.card;import javax.sound.midi.*;import java.io.InputStream;import java.io.IOException;/** * Play the specified MIDI file * Note: * For this to work you must ensure that the computer's mixer * is configured to play the software synhtesizer output. * * @author Diomidis Spinellis */public class MidiPlayer {/** The sequencer we are using to play the MIDI data. */static Sequencer sequencer =null;/** Constructor for playing the specified file. */MidiPlayer(String file) {playFile(file);}/** Play the specified file. */public voidplayFile(String file) {
InputStream midiFile =getClass().getResourceAsStream(file);try{if(sequencer ==null)
sequencer = MidiSystem.getSequencer();elseend();
sequencer.setSequence(MidiSystem.getSequence(midiFile));
sequencer.open();
sequencer.start();}catch(MidiUnavailableException e) {
System.err.println("Midi device unavailable:"+ e);}catch(InvalidMidiDataException e) {
System.err.println("Invalid MIDI data:"+ e);}catch(IOException e) {
System.err.println("I/O error:"+ e);}}/** Return true if the music is still playing. */public booleanisPlaying() {return sequencer.isRunning();}/* Stop playing. */public voidend() {
sequencer.stop();
sequencer.close();
sequencer =null;}}