sound
Handle Midi playing events
In this tutorial we are going to see how to handle MIDI playing events in a Java Desktop Application. You might find this particularly useful when you want to create a simple media player inside your application and you want to monitor the progress media playing.
In short, in order to handle MIDI playing events you should:
- Obtain the default
Sequencer
connected to a default device usingMidiSystem.getSequencer()
. - Create a stream from a file to the MIDI file.
- Sets the current sequence on which the sequencer operates using sequencer.setSequence.
- Create a new
MetaEventListener
and overridemeta
method. UseMetaMessage
object to obtain information about the event.
package com.javacodegeeks.snippets.desktop; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import javax.sound.midi.MetaEventListener; import javax.sound.midi.MetaMessage; import javax.sound.midi.MidiSystem; import javax.sound.midi.Sequencer; public class HandleMidiPlayingEvents { public static void main(String[] args) throws Exception { // Obtains the default Sequencer connected to a default device. Sequencer sequencer = MidiSystem.getSequencer(); // Opens the device, indicating that it should now acquire any // system resources it requires and become operational. sequencer.open(); // create a stream from a file InputStream is = new BufferedInputStream(new FileInputStream(new File("midifile.mid"))); // Sets the current sequence on which the sequencer operates. // The stream must point to MIDI file data. sequencer.setSequence(is); sequencer.addMetaEventListener(new MetaEventListener() { public void meta(MetaMessage event) { if (event.getType() == 88) { System.out.println("Sequencer started playing"); } else if (event.getType() == 47) { System.out.println("Sequencer finished playing"); } } }); // Starts playback of the MIDI data in the currently loaded sequence. sequencer.start(); } }
This was an example on how to handle MIDI playing events.