遅れて申し訳ありません。
知り合いから聞いたら下記のようなことを言われました。
●SMFの仕様
・ファイル名は自由
・最初の一小節のみを使用(セットアップ小節はないものとする)
・ファイル自体の分解能は自由(読み込む際に分解能4tick/beatに直して配列に格納する)
・ノートナンバー24〜47はノートナンバーに対応する役割のメロディやコードを表す
 ※インスタンスを生成する時、Note(またはChord).FUNCTION.getFunction(NoteNo)で取得した役割をコンストラクタの引数にぶち込む
 ※ノートオンからノートオフの長さがNote.lengthに対応する
 ※同時にノートナンバー0〜11のノートオンイベントがある場合、そのノートナンバーをインスタンス変数paramに代入する
・ノートナンバー48〜127はデータベースのフラグ(タグ的なもの)を表す
 ※ファイル中にこれらの音高のノートがある場合、HashSet<Integer>型のインスタンス変数flagにノートナンバーの値をaddする
・分類・構成部分・小節番号はフォルダ階層で判別する(詳細は下記)
●だいたいの使い方
getChordDatabaseメソッドを用いることで、指定した条件を満たすコードのデータベースを取得する
getMelodyDatabaseメソッドを用いることで、指定した条件を満たすメロディのデータベースを取得する
上記メソッド名+AtRandomメソッドで、それらのうちのひとつをランダムに取り出す
select( Collection<Database> database, int... flags )メソッドでデータベースのCollectionから特定のフラグが立っているもののみを取り出す
●フラグのうち使い方が既に決まっているもの
48(C3) 短調