package com.xenoage.zong.demos.simplegui;
import javax.sound.midi.MidiUnavailableException;
import com.xenoage.utils.error.Err;
import com.xenoage.utils.log.Report;
import com.xenoage.zong.core.Score;
import com.xenoage.zong.desktop.io.midi.out.MidiScorePlayer;
import com.xenoage.zong.io.midi.out.PlaybackListener;
/**
* MIDI playback controller.
*
* @author Andreas Wenger
*/
public class Playback {
private static MidiScorePlayer player = null;
/**
* Opens the given score for MIDI playback.
*/
public static void openScore(Score score) {
initPlayer();
player.openScore(score);
}
private static void initPlayer() {
if (player == null) {
try {
MidiScorePlayer.init();
player = MidiScorePlayer.midiScorePlayer();
} catch (MidiUnavailableException ex) {
Err.handle(Report.error("MIDI not available"));
}
}
}
/**
* Starts the MIDI playback of the current score.
*/
public static void start() {
if (player != null) {
player.setMetronomeEnabled(true);
player.start();
}
}
/**
* Stops the MIDI playback.
*/
public static void stop() {
if (player != null)
player.stop();
}
/**
* Notifies the given object about playback events.
*/
public static void registerListener(PlaybackListener listener) {
initPlayer();
player.addPlaybackListener(listener);
}
}