Creating Simple Music By Keith Lynn Field Trip #20 Creating Simple Music By Keith Lynn
Midi Midi stands for Musical Instrument Digital Interface It is an interface that allows a variety of instruments to connect and communicate with each other A single midi link can carry up to 16 channels of information We can connect a channel to a different device
Midi cont'd A Midi Event message carries information about Pitch Notation Velocity Volume etc
Instrument An instrument is represented by an integer between 0 and 255 You can find a list of instruments at http://www.ccarh.org/courses/253/handout/gmii nstruments
Creating the Midi In order to create the midi, we will create a Sequencer After we create the Sequencer, we open it We create a Sequence The Sequence is made of Tracks The Tracks are made up of MidiEvents The MidiEvent is composted of a MidiMessage and a tick. The tick indicates the time in the sequence where the event fires
MidiMessage In this app, we will create a simple message A ShortMessage contains two bytes of information To create the ShortMessage, we specify four things A Midi command A channel The first data byte The second data byte
Midi Commands The ShortMessage class contains constants that represent Midi commands Some of the most common are Note on – Start Playing Note off – Stop Playing Program change – Specify what instrument is on a channel
Playing Notes The third parameter to create the ShortMessage is a note Middle C is 60 The fourth parameter is the velocity Typically we can use 100
Playing the sound In order to play the Midi sound, we create the ShortMessages and create a MidiEvent The MidiEvent specifies the ShortMessage and the tick The tick is the time when the event fires
Creating the Midi Player In our app, we allow the user to specify through Java components, the values to create a ShortMessage These ShortMessages appear in a Jpanel When we are ready to play, we click Play and each of the MidiMessages are put into a track, and the track put in a sequence, and the sequence put in the sequencer
Storing MidiEvents In our app, we create a Jpanel called a MidiMessagePanel This class is declared to be Serialiazable This means that instances of the class can be written to a file Later we can read them back in In order to write the objects, we use an ObjectOutputStream, and in order to read the objects, we use an ObjectInputStream