トップ «前の日(12-18) 最新 次の日(12-20)» 追記

SewiGの日記

2004|01|04|05|06|07|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|

2004-12-19 [日]

[Other] 武蔵野から大物が来た

声楽の知り合いが大分に。同人も詳しい。


2005-12-19 [月]

[Java][Programming] JavaでSMF (2)

SMFの読み込みはjavax.sound.midi.Sequenceを使えば楽です。まず、以下のようなメソッドでSequenceを作ります。

public void open(File f) {
	try {
		sequence = MidiSystem.getSequence(f);
		if (sequence == null) {
			throw new MidiUnavailableException("Unavailable sequence.");
		}
		tracks = sequence.getTracks();
		
		init();
	} catch (IOException e) {
		e.printStackTrace();
	} catch (InvalidMidiDataException e) {
		e.printStackTrace();
	} catch (MidiUnavailableException e) {
		e.printStackTrace();
	}
}

それから、シーケンス内部のメッセージを取得していきます。以下は結構いい加減なので適宜データをキャッシュしてください。例では特にメッセージを解析せず内部に格納しています。解析したい場合は、もし独自に再生処理を行いたい場合にはtickとパラメータをまとめたクラスを作ってそれを格納していくといいでしょう。

public void init() {
	for (int j = 0; j < tracks.length; j++) {
		for (int i = 0; i < tracks[j].size(); i++) {
			MidiEvent event = tracks[j].get(i);
			long tick = event.getTick();
			MidiMessage message = event.getMessage();
			// ここでMidiMessageを独自に内部形式に
			data.addElement(message);
		}
	}
}

MIDIメッセージを解析したい場合、例えばShortMessageは以下のようにします。

if (message instanceof ShortMessage) {
	ShortMessage s = (ShortMessage)message;
	if (s.getCommand() == ShortMessage.NOTE_ON) {
		// なんらかの処理
	}
	// 以下略
}

2007-12-19 [水]

[Other] ボウリングに行って

マイボールマイボールを作ってきました。先日、研究室内でマイボールが流行していると言いましたが、このとき原稿書けたらマイボール作るよと冗談で言ったら本当に作っちゃったみたいな。

本日のツッコミ(全1件) [ツッコミを入れる]

Lea [Play inforamitve for me, Mr. internet writer.]


Copyright © 2004-2008 SewiG All rights reserved.