TiMidityの音色データフォーマット | objective-cをちょい研究!ブログ

objective-cをちょい研究!ブログ

WILLCOMを卒業してiOS開発者に転身しました。。
コメント&トラックバック大歓迎です。

なんとか方形波による音色再生はできるようになったので、今度は音色を付けたいってことで、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形式だと思うんだけど、調査中。