package com.xenoage.zong.desktop.io.wav.out; import com.xenoage.utils.document.io.FileOutput; import com.xenoage.utils.io.OutputStream; import com.xenoage.utils.jse.io.JseOutputStream; import com.xenoage.zong.core.Score; import com.xenoage.zong.desktop.io.midi.out.JseMidiSequenceWriter; import com.xenoage.zong.desktop.io.midi.out.SynthManager; import com.xenoage.zong.io.midi.out.MidiConverter; import com.xenoage.zong.io.midi.out.MidiSequence; import javax.sound.midi.Sequence; import java.io.IOException; import static com.xenoage.utils.log.Log.log; import static com.xenoage.utils.log.Report.warning; import static com.xenoage.zong.io.midi.out.MidiConverter.Options.optionsForFileExport; /** * This class writes a Waveform Audio File Format (WAVE) file from a given {@link Score}. * * @author Andreas Wenger */ public class WavScoreFileOutput extends FileOutput<Score> { @Override public void write(Score score, int fileIndex, OutputStream stream) throws IOException { writeWav(score, stream); } /** * Writes the given score as a WAV file into the given stream. */ public static void writeWav(Score score, OutputStream stream) throws IOException { //save WAVE file try { //create midi sequence MidiSequence<Sequence> sequence = MidiConverter.convertToSequence( score, optionsForFileExport, new JseMidiSequenceWriter()); //for all instruments MidiToWaveRenderer.render(SynthManager.getSoundbank(), sequence.getSequence(), null, new JseOutputStream(stream)); } catch (Exception ex) { log(warning(ex)); throw new IOException(ex); } } }