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 void
convertMIDIFile(java.io.InputStream stream)
Read a midi file from an input stream and convert it to a a ParallelCollection of MusicShapevoid
convertMIDIFile(java.lang.String fileName)
Read a midi file from disk and convert it to a ParallelCollection of MusicShapevoid
differentiate()
Midi tracks are read into MusicShapes with absolute time in dimension 0.ParallelCollection
getParallelCollection()
java.util.Vector
getTempi()
java.util.Vector
getTimeSignatures()
void
handleBeginTrack(int index)
Called at the beginning of each trackvoid
handleEndTrack(int index)
Called at the end of each trackvoid
handleEvent(int ticks, int command, int data1, int data2)
Called when a MIDI Message event is encountered.void
handleHeader(int format, int numTracks, short division)
Called when the header is parsed.void
handleMetaEvent(int ticks, int type, byte[] b)
Called when a MetaEvent is encountered.void
handleSysExF0(int ticks, byte[] b)
Called when an F0 SysEx event is encountered.void
handleSysExF7(int ticks, byte[] b)
Called when an F7 SysEx event is encountered.static void
main(java.lang.String[] args)
void
normalizeAmplitudes()
Scale midi velocities 0..127 to amplitudes 0..1void
setDebug(boolean b)
Show or hide printed messagesvoid
startAtZero()
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:
handleHeader
in 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:
handleBeginTrack
in interfaceMIDIFileListener
- Parameters:
index
- Track index starting at zero
-
handleEndTrack
public void handleEndTrack(int index)Called at the end of each track- Specified by:
handleEndTrack
in 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:
handleSysExF0
in 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:
handleSysExF7
in 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:
handleMetaEvent
in 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:
handleEvent
in 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)
-