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();
}
}
}