なんとか方形波による音色再生はできるようになったので、今度は音色を付けたいってことで、TiMidity用の音色データを調べてみました。
TiMidityの音色データは、Gravis Ultrasound(GUS)というサウンドボード用のパッチファイル(.pat)を使っているようです。
http://www.linux.or.jp/JF/JFdocs/Sound-Playing-HOWTO-2.html
2. 各種音声フォーマットの再生(The Linux Sound Playing HOWTO様)
バイナリエディタとgspmidiのソースより、patファイルのフォーマットを調べて見ました。
※2byte以上の数値情報は、リトルエンディアン(下位バイト→上位バイトの順に格納)です。
<全体の流れ>
000H~ ヘッダーブロック[239byte]
0EFH~ 音色情報ブロック[96byte]
14FH~ 音色データブロック(最後まで)
<ヘッダーブロック>
ファイル情報がテキストで書かれている。
以下の情報が\0区切りで格納されている。
ファイル識別とバージョン
GF1PATCH110
ID
ID#000002
著作権情報
Copyright 1992,1993 EYE&I Productions and Advanced Gravis\1A
<音色情報ブロック>
0EFH 音色名[7byte]
0F6H 分数?[1byte] (上位4bit=ループ開始用/下位4bit=ループ終了用)
0F7H 音色データブロックサイズ[4byte]
0FBH ループ開始[4byte]
0FFH ループ終了[4byte]
103H サンプリングレート[2byte]
105H Low周波数[4byte]
109H High周波数[4byte]
10DH Root周波数[4byte]
111H 未使用(?)[2byte]
113H パン[1byte] (0~15の16段階)
114H エンベロープ[12byte]
120H トレモロ[3byte]
123H ビブラート[3byte]
126H モデルビット情報[1byte]
(※gspmidiのinstrum.hより
0bit=16BIT/1bit=UNSIGNED/2bit=LOOPING
3bit=PINGPONG/4bit=REVERSE/5bit=SUSTAIN
6bit=ENVELOPE)
127H 未使用(オプション)[28byte]
<音色データブロック>
PCM形式だと思うんだけど、調査中。