SoundFont の parse に挑戦

SoundFont2 の処理しか実装していませんが、1 も需要があれば対応します。
今のところ Chunk の分解が出来てて、pdta の詳細を分解してるところです。

とりあえず出来てる分だけ openpear に commit しました。

資料は wiki にまとめ中

一応、後で build 処理を作るのを念頭にいれて作ってます。
あとで C 言語で実装し直すつもりですが。

SoundFont2 の chunk構造

* RIFF 全体
+------+-------+------+---------+---------+---------+
| RIFF | sizeF | sfbk | LIST ...| LIST ...| LIST ...|
+------+-------+------+---------+---------+---------+
<- 4B -><- 4B-><- 4B->
                <--- sizeF -------------------------->

- INFO-list (サウンドフォント自体のメタ情報)
+------+-------+------+---------+---------+---------+
| LIST | sizeL | INFO | <chunk> | <chunk> | ...     |
+------+-------+------+---------+---------+---------+
               <--- sizeL -------------------------->

- sdta-list (全サンプリングデータを1つに連結したもの)
+------+-------+------+-------------------------+
| LIST | sizeL | sdta |         <chunk>         |
+------+-------+------+-------------------------+
               <--- sizeL ---------------------->

- pdta-list (音色のメタデータやサンプリングデータへのポインタ)
+------+-------+------+---------+---------+---------+
| LIST | sizeL | pdta | <chunk> | <chunk> | ...     |
+------+-------+------+---------+---------+---------+
               <--- sizeL -------------------------->

soundfontdump

yoya@sakura:~/svn/IO_SoundFont$ php sample/soundfontdump.php emuaps_8mb.sf2
RIFF=>sfbk
  LIST=>INFO
    ifil: (size:4)
      sfVersion: 2.01
    INAM: (size:22)
      sfName: 8MBGM E-Mu APS Rev B^@^@
    isng: (size:10)
      sfEngine: E-mu 10K1^@
    IENG: (size:2)
      sfEngineers: ^@^@
    ISFT: (size:66)
      sfTools: E-mu Systems SoundFont Designer, Beta 2.02a, 2/28/96:SFEDT v1.28:^@
    ICMT: (size:2)
      Comments: ^@^@
    ICOP: (size:2)
      Copyright: ^@^@
  LIST=>sdta
    smpl: (size:7387924)
      Samples/2: 3693962 (16bit Samples)
  [Samples]
  LIST=>pdta
    phdr: (size:5206)
  [0]  PresetName: Contra Bass   Preset: 43   Bank: 0   PresetBagNdx: 0   Library: 0   Genre: 3292327936   MorphologyGenre: 1049056
  [1]  PresetName: Piano 1   Preset: 0   Bank: 0   PresetBagNdx: 2   Library: 0   Genre: 0   MorphologyGenre: 0