Package com.softsynth.jmsl.util
Class MIDIFileToMusicShape
java.lang.Object
com.softsynth.jmsl.util.MIDIFileToMusicShape
- All Implemented Interfaces:
MIDIFileListener
public class MIDIFileToMusicShape extends java.lang.Object implements MIDIFileListener
MIDIFileToMusicShape Parse a MidiFile and build a ParallelCollection of
MusicShape
If the MidiFile is Type 1 (which includes Track chunks), one MusicShape will be created for each track.
If the Midifile is Type 0 (one single mixed track), one MusicShape will be created for each Midi Channel detected.
Usage:
If the MidiFile is Type 1 (which includes Track chunks), one MusicShape will be created for each track.
If the Midifile is Type 0 (one single mixed track), one MusicShape will be created for each Midi Channel detected.
Usage:
MIDIFileToMusicShape mf2ms = new MIDIFileToMusicShape(); String filename = "myMidiFile.MID"; mf2ms.convertMIDIFile(filename); ParallelCollection p = mf2ms.getParallelCollection(); // subtract the startTime of the first event from all event times (optional) mf2ms.startAtZero(); // durations of MusicShapes in ParallelCollection are in absolute time. // To convert to delta (relative) time, do this, which operates on the // MusicShapes in p, and converts their time dimensions: mf2ms.differentiate(); // if you are going to play these with amplitudes ranging 0..1 do this: mf2ms.normalizeAmplitudes();
- Author:
- Nick Didkovsky, Feb 2002, (c) 2002 Nick Didkovsky and Phil Burk, all rights reserved
-
Constructor Summary
Constructors Constructor Description MIDIFileToMusicShape() -
Method Summary
Modifier and Type Method Description voidconvertMIDIFile(java.io.InputStream stream)Read a midi file from an input stream and convert it to a a ParallelCollection of MusicShapevoidconvertMIDIFile(java.lang.String fileName)Read a midi file from disk and convert it to a ParallelCollection of MusicShapevoiddifferentiate()Midi tracks are read into MusicShapes with absolute time in dimension 0.ParallelCollectiongetParallelCollection()java.util.VectorgetTempi()java.util.VectorgetTimeSignatures()voidhandleBeginTrack(int index)Called at the beginning of each trackvoidhandleEndTrack(int index)Called at the end of each trackvoidhandleEvent(int ticks, int command, int data1, int data2)Called when a MIDI Message event is encountered.voidhandleHeader(int format, int numTracks, short division)Called when the header is parsed.voidhandleMetaEvent(int ticks, int type, byte[] b)Called when a MetaEvent is encountered.voidhandleSysExF0(int ticks, byte[] b)Called when an F0 SysEx event is encountered.voidhandleSysExF7(int ticks, byte[] b)Called when an F7 SysEx event is encountered.static voidmain(java.lang.String[] args)voidnormalizeAmplitudes()Scale midi velocities 0..127 to amplitudes 0..1voidsetDebug(boolean b)Show or hide printed messagesvoidstartAtZero()Look for start time of first event of each MusicShape, and find the earliest.Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Constructor Details
-
MIDIFileToMusicShape
public MIDIFileToMusicShape()
-
-
Method Details
-
getParallelCollection
-
getTimeSignatures
public java.util.Vector getTimeSignatures() -
setDebug
public void setDebug(boolean b)Show or hide printed messages -
handleHeader
public void handleHeader(int format, int numTracks, short division)Called when the header is parsed.- Specified by:
handleHeaderin interfaceMIDIFileListener- Parameters:
format- Format of file. 0, 1 or 2.numTracks-division-
-
handleBeginTrack
public void handleBeginTrack(int index)Called at the beginning of each track- Specified by:
handleBeginTrackin interfaceMIDIFileListener- Parameters:
index- Track index starting at zero
-
handleEndTrack
public void handleEndTrack(int index)Called at the end of each track- Specified by:
handleEndTrackin interfaceMIDIFileListener- Parameters:
index- Track index starting at zero
-
handleSysExF0
public void handleSysExF0(int ticks, byte[] b)Called when an F0 SysEx event is encountered.- Specified by:
handleSysExF0in interfaceMIDIFileListener- Parameters:
ticks- MIDIFile time-stampb- bytes read from file for SysEx. May be null.
-
handleSysExF7
public void handleSysExF7(int ticks, byte[] b)Called when an F7 SysEx event is encountered.- Specified by:
handleSysExF7in interfaceMIDIFileListener- Parameters:
ticks- MIDIFile time-stampb- bytes read from file for SysEx. May be null.
-
handleMetaEvent
public void handleMetaEvent(int ticks, int type, byte[] b)Called when a MetaEvent is encountered.- Specified by:
handleMetaEventin interfaceMIDIFileListener- Parameters:
ticks- MIDIFile time-stamptype- MetaEvent type, from 0 to 127.b- bytes read from file for SysEx. May be null.
-
handleEvent
public void handleEvent(int ticks, int command, int data1, int data2)Called when a MIDI Message event is encountered.- Specified by:
handleEventin interfaceMIDIFileListener- Parameters:
ticks- MIDIFile time-stampcommand- MIDI Command, eg. NOTE_ON.data1- First data byte of message.data2- Second optional data byte of message.
-
convertMIDIFile
public void convertMIDIFile(java.lang.String fileName) throws java.io.IOExceptionRead a midi file from disk and convert it to a ParallelCollection of MusicShape- Throws:
java.io.IOException
-
convertMIDIFile
public void convertMIDIFile(java.io.InputStream stream) throws java.io.IOExceptionRead a midi file from an input stream and convert it to a a ParallelCollection of MusicShape- Throws:
java.io.IOException
-
differentiate
public void differentiate()Midi tracks are read into MusicShapes with absolute time in dimension 0. Call this method to convert each MusicShape to relative time. Nothing here you couldn't do yourself: enumerates through the resulting ParallelCollection and calls musicShape.differentiate(onTimeOfLastElement + holdTimeOfLastElement, 0 ) on each child -
normalizeAmplitudes
public void normalizeAmplitudes()Scale midi velocities 0..127 to amplitudes 0..1 -
startAtZero
public void startAtZero()Look for start time of first event of each MusicShape, and find the earliest. Subtract that amount from all start times of all MusicShapes -
getTempi
public java.util.Vector getTempi()- Returns:
- Vector of MidiTempoHolder
-
main
public static void main(java.lang.String[] args)
-