Code:
package sign;
import java.io.File;
import javax.sound.midi.MidiSystem;
import javax.sound.midi.Receiver;
import javax.sound.midi.Sequence;
import javax.sound.midi.Sequencer;
import javax.sound.midi.ShortMessage;
import javax.sound.midi.Synthesizer;
/**
* Midi file playing.
* @author Primadude.
*/
public class Midi {
/**
* The name of the midi file.
*/
String midiFileName;
/**
* The dir of the midi file.
*/
String midiSaveDir;
/**
* The Sequence object.
*/
Sequence sequence;
/**
* The Sequencer object.
*/
Sequencer sequencer;
/**
* The Synthesizer object.
*/
Synthesizer synthesizer;
/**
* Gets the name of the midi file.
* @return The midiFileName variable.
*/
public String getMidiFileName() {
return midiFileName;
}
/**
* Gets the midi file directory.
* @return The midiSaveDir variable.
*/
public String getMidiSaveDir() {
return midiSaveDir;
}
/**
* Sets the midi file name.
* @param midiFileName The String to set the file name to.
*/
public void setMidiFileName(String midiFileName) {
this.midiFileName = midiFileName;
}
/**
* Sets the midi directory.
* @param midiFileName The String to set the file directory to.
*/
public void setMidiSaveDir(String midiSaveDir) {
this.midiSaveDir = midiSaveDir;
}
/**
* Sets the volume of the midi that is playing.
* @param volume The volume of the midi sound.
* @return True or false.
*/
public boolean setVolume(double value) {
try {
Receiver receiver = MidiSystem.getReceiver();
ShortMessage volumeMessage= new ShortMessage();
for (int i = 0; i < 16; i++) {
volumeMessage.setMessage(ShortMessage.CONTROL_CHANGE, i, 7, (int)(value * 127.0));
receiver.send(volumeMessage, -1);
}
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* Fades the volume of the midi out.
* Stops the current midi playing.
*/
public void fadeOut() {
double volume = 0.6;
for (;;) {
if (((volume - 0.05) < 0) || !setVolume(volume)) {
break;
}
try {
Thread.sleep(150);
} catch (Exception exception) {
}
volume -= 0.025;
}
if (synthesizer != null) {
synthesizer.close();
synthesizer = null;
}
if (sequencer != null) {
if (sequencer.isOpen()) {
sequencer.stop();
}
sequencer.close();
}
}
/**
* Starts playing the midi.
*/
public void startMidi() {
String midiDir = getMidiFileName() + getMidiSaveDir();
try {
if (sequencer != null) {
fadeOut();
}
sequencer = null;
sequence = null;
File file = new File(midiDir);
if (file.exists()) {
sequence = MidiSystem.getSequence(file);
}
sequencer = MidiSystem.getSequencer();
sequencer.setSequence(sequence);
synthesizer = MidiSystem.getSynthesizer();
synthesizer.open();
if (synthesizer.getDefaultSoundbank() == null) {
sequencer.getTransmitter().setReceiver(MidiSystem.getReceiver());
} else {
sequencer.getTransmitter().setReceiver(synthesizer.getReceiver());
}
sequencer.open();
sequencer.start();
} catch (Exception exception) {
exception.printStackTrace();
}
}
}
You mean this?