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.
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | 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.