package fr.utc.leapband.sma.sound;
import java.io.File;
import java.io.IOException;
import javax.sound.midi.InvalidMidiDataException;
import javax.sound.midi.MidiSystem;
import javax.sound.midi.MidiUnavailableException;
import javax.sound.midi.Sequence;
import javax.sound.midi.Sequencer;
import javax.sound.midi.ShortMessage;
public class MIDIMusicPlayer extends MusicPlayer {
private Sequencer sequencer;
public MIDIMusicPlayer(String filename) throws MidiUnavailableException, InvalidMidiDataException, IOException {
super(filename);
sequencer = MidiSystem.getSequencer();
sequencer.open();
Sequence sequence = MidiSystem.getSequence(new File(filename));
sequencer.setSequence(sequence);
}
@Override
public void Start() {
sequencer.start();
}
@Override
public void Pause() {
sequencer.stop();
}
public void Stop() {
sequencer.stop();
sequencer.setTickPosition(0);
}
@Override
public void Restart() {
sequencer.stop();
sequencer.setTickPosition(0);
sequencer.start();
}
@Override
public void SetVolume(int volume) {
if(volume < 0)
volume = 0;
if(volume > 255)
volume = 255;
try {
ShortMessage volumeMessage = new ShortMessage();
for (int i = 0; i < 16; i++) {
volumeMessage.setMessage(ShortMessage.CONTROL_CHANGE, i, 7, volume);
MidiSystem.getReceiver().send(volumeMessage, -1);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}