mirror of
https://github.com/2006-Scape/2006Scape.git
synced 2026-07-03 00:31:51 +00:00
Rename & Repackage
This commit is contained in:
@@ -0,0 +1,178 @@
|
||||
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 implements Runnable {
|
||||
|
||||
/**
|
||||
* 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;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if the sequenced is finished. If the sequence is finished, it is
|
||||
* faded out and closed.
|
||||
*/
|
||||
@Override
|
||||
public void run() {
|
||||
while (sequencer != null) {
|
||||
if (sequencer.getTickPosition() >= sequencer.getTickLength()) {
|
||||
fadeOut();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 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 = 1;
|
||||
while (volume - 0.05 > 0 && setVolume(volume)) {
|
||||
try {
|
||||
Thread.sleep(150);
|
||||
} catch (Exception exception) {
|
||||
}
|
||||
volume -= 0.025;
|
||||
}
|
||||
try {
|
||||
if (synthesizer != null) {
|
||||
synthesizer.close();
|
||||
synthesizer = null;
|
||||
}
|
||||
if (sequencer != null) {
|
||||
if (sequencer.isOpen()) {
|
||||
sequencer.stop();
|
||||
}
|
||||
sequencer.close();
|
||||
}
|
||||
} catch (Exception exception) {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Starts playing the midi.
|
||||
*/
|
||||
public void startMidi() {
|
||||
String midiDir = getMidiFileName() + getMidiSaveDir();
|
||||
new Thread(this);
|
||||
|
||||
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();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user