MIDI ファイルを作るにはSequenceに音の情報を書きこみ 最後にMidiSystemのwriteメソッドを使います。 手順としては以下の通りです。
import javax.sound.midi.spi.*; import javax.sound.midi.*; public class HelloFile { public static void main(String[] args){ try { /* * SequenceとTrackの作成 * 24tick=四分音符 * 戻る */ Sequence sequence = new Sequence(Sequence.PPQ, 24); Track track = sequence.createTrack(); /* * チャンネル:0, 音の高さ:48 音の強さ:127 音色番号:6 */ int channel = 0; int pitch = 48; int velocity = 127; int instrument = 6; /* * テンポの設定 四分音符の長さをμsecで指定し3バイトに分解する * ここでは20 四分音符/分 * 戻る */ MetaMessage mmessage = new MetaMessage(); int tempo = 20; int l = 60*1000000/tempo; mmessage.setMessage(0x51, new byte[]{(byte)(l/65536), (byte)(l%65536/256), (byte)(l%256)}, 3); track.add(new MidiEvent(mmessage, 0)); /* * 音色の指定 音色番号:6 * 戻る */ //set instrument ShortMessage message = new ShortMessage(); message.setMessage(ShortMessage.PROGRAM_CHANGE, channel, instrument, 0); track.add(new MidiEvent(message, 0)); /* * 音を鳴らす * 戻る */ // Note on message = new ShortMessage(); message.setMessage(ShortMessage.NOTE_ON, channel, pitch, velocity); track.add(new MidiEvent(message, 0)); // Note off after quater (24tick) message = new ShortMessage(); message.setMessage(ShortMessage.NOTE_OFF, channel, pitch, velocity); track.add(new MidiEvent(message, 24)); /* * ファイルに書き出す。 * 戻る */ //write to file MidiSystem.write(sequence, 0,new java.io.File("hello.mid")); } catch(Exception e){ e.printStackTrace(); } } }