46 /**
47 * MIDI File Audio Renderer/Reader.
48 *
49 * @author Karl Helgason
50 */
51 public final class SoftMidiAudioFileReader extends SunFileReader {
52
53 private static final Type MIDI = new Type("MIDI", "mid");
54
55 private static final AudioFormat format = new AudioFormat(44100, 16, 2,
56 true, false);
57
58 private static StandardFileFormat getAudioFileFormat(final Sequence seq) {
59 long totallen = seq.getMicrosecondLength() / 1000000;
60 long len = (long) (format.getFrameRate() * (totallen + 4));
61 return new StandardFileFormat(MIDI, format, len);
62 }
63
64 private AudioInputStream getAudioInputStream(final Sequence seq)
65 throws InvalidMidiDataException {
66 AudioSynthesizer synth = (AudioSynthesizer) new SoftSynthesizer();
67 AudioInputStream stream;
68 Receiver recv;
69 try {
70 stream = synth.openStream(format, null);
71 recv = synth.getReceiver();
72 } catch (MidiUnavailableException e) {
73 throw new InvalidMidiDataException(e.toString());
74 }
75 float divtype = seq.getDivisionType();
76 Track[] tracks = seq.getTracks();
77 int[] trackspos = new int[tracks.length];
78 int mpq = 500000;
79 int seqres = seq.getResolution();
80 long lasttick = 0;
81 long curtime = 0;
82 while (true) {
83 MidiEvent selevent = null;
84 int seltrack = -1;
85 for (int i = 0; i < tracks.length; i++) {
86 int trackpos = trackspos[i];
|
46 /**
47 * MIDI File Audio Renderer/Reader.
48 *
49 * @author Karl Helgason
50 */
51 public final class SoftMidiAudioFileReader extends SunFileReader {
52
53 private static final Type MIDI = new Type("MIDI", "mid");
54
55 private static final AudioFormat format = new AudioFormat(44100, 16, 2,
56 true, false);
57
58 private static StandardFileFormat getAudioFileFormat(final Sequence seq) {
59 long totallen = seq.getMicrosecondLength() / 1000000;
60 long len = (long) (format.getFrameRate() * (totallen + 4));
61 return new StandardFileFormat(MIDI, format, len);
62 }
63
64 private AudioInputStream getAudioInputStream(final Sequence seq)
65 throws InvalidMidiDataException {
66 AudioSynthesizer synth = new SoftSynthesizer();
67 AudioInputStream stream;
68 Receiver recv;
69 try {
70 stream = synth.openStream(format, null);
71 recv = synth.getReceiver();
72 } catch (MidiUnavailableException e) {
73 throw new InvalidMidiDataException(e.toString());
74 }
75 float divtype = seq.getDivisionType();
76 Track[] tracks = seq.getTracks();
77 int[] trackspos = new int[tracks.length];
78 int mpq = 500000;
79 int seqres = seq.getResolution();
80 long lasttick = 0;
81 long curtime = 0;
82 while (true) {
83 MidiEvent selevent = null;
84 int seltrack = -1;
85 for (int i = 0; i < tracks.length; i++) {
86 int trackpos = trackspos[i];
|