package org.herac.tuxguitar.io.midi;
import java.io.OutputStream;
import org.herac.tuxguitar.gm.GMChannelRouter;
import org.herac.tuxguitar.gm.GMChannelRouterConfigurator;
import org.herac.tuxguitar.io.base.TGFileFormat;
import org.herac.tuxguitar.io.base.TGLocalFileExporter;
import org.herac.tuxguitar.player.base.MidiSequenceParser;
import org.herac.tuxguitar.song.factory.TGFactory;
import org.herac.tuxguitar.song.managers.TGSongManager;
import org.herac.tuxguitar.song.models.TGSong;
public class MidiSongExporter implements TGLocalFileExporter{
private OutputStream stream;
private MidiSettings settings;
@Override
public String getExportName() {
return "Midi";
}
@Override
public TGFileFormat getFileFormat() {
return new TGFileFormat("Midi","*.mid;*.midi");
}
@Override
public boolean configure(boolean setDefaults) {
this.settings = (MidiSettings.getDefaults());
return (this.settings != null);
}
@Override
public void init(TGFactory factory,OutputStream stream){
this.stream = stream;
}
@Override
public void exportSong(TGSong tgSong) {
if( this.stream != null && this.settings != null ){
TGSongManager tgSongManager = new TGSongManager();
tgSongManager.setSong(tgSong);
GMChannelRouter gmChannelRouter = new GMChannelRouter();
GMChannelRouterConfigurator gmChannelRouterConfigurator = new GMChannelRouterConfigurator(gmChannelRouter);
gmChannelRouterConfigurator.configureRouter(tgSong.getChannels());
MidiSequenceParser midiSequenceParser = new MidiSequenceParser(tgSongManager,MidiSequenceParser.DEFAULT_EXPORT_FLAGS);
midiSequenceParser.setTranspose(this.settings.getTranspose());
midiSequenceParser.parse(new MidiSequenceHandlerImpl((tgSong.countTracks() + 1), gmChannelRouter, this.stream));
}
}
}