.mid player (with code)

Code to play midi files (very simple, could be much better):



[java]

import java.io.IOException;

import java.net.URL;

import java.io.File;

import javax.sound.midi.InvalidMidiDataException;

import javax.sound.midi.MidiSystem;

import javax.sound.midi.MidiUnavailableException;

import javax.sound.midi.Sequencer;



class playmidi

{

public static void main(String args[])

{

if(args.length==0) return; // give midifile parameter on command line ie java playmidi acdc.mid

MidiPlayer.PlayMidi(args[0]);

}

}



class MidiPlayer

{

static Sequencer sequencer=null;

static void PlayMidi(String file)

{

URL url=null;

File midiFile=null;

try

{

sequencer = MidiSystem.getSequencer();

if(sequencer==null) return;



midiFile = new File(file);

sequencer.setSequence(MidiSystem.getSequence(midiFile));



sequencer.open();

sequencer.start();

}

catch(MidiUnavailableException mue)

{

sequencer=null;

System.out.println("Midi device unavailable!");

}

catch(InvalidMidiDataException imde)

{

sequencer=null;

System.out.println("Invalid midi data!");

}

catch(IOException ioe)

{

sequencer=null;

System.out.println("Invalid midi data!");

}



}

static void CloseMidi()

{

if(sequencer!=null)

{

sequencer.stop();

sequencer.close();

}

}



static void StopMidi()

{

CloseMidi();

sequencer=null;



try

{

Thread.sleep(300);

}

catch (InterruptedException e)

{

}

}

}



[/java]

2 Likes

This because you dont need 20MB .ogg files to play music :wink:

1 Like

Cool but to do it properly you should probably create a loader for the assetmanager.

1 Like

What normen said. There are calls in the MIDI api to obtain a sequence from an InputStream, so it can work as an AssetLoader.

Note that it will not work with our OpenAL audio renderer, since the audio is played back using the audio hardware / driver on the OS and cannot be retrieved in PCM.

If you want to playback MIDI using OpenAL, I recommend converting it to a module format first, such as IT, and then playing it using the Javamod library. This way you also avoid any issues with the Java MIDI implementation.