Wild Arms - How to rip out midi file

someone42さんがpsfセットのドキュメントの中で記しているとおり、ワイルドアームズ(Wild Arms)のシーケンスは、PlayStation標準のSEQを圧縮したものです。

SEQファイルを利用するには圧縮形式を調べてSEQデータを適切にデコードしなければなりません。また、圧縮前のデータを適切に抜き出すことも必要です。幸い、圧縮前のデータの形式はsomeone42さんのドキュメントに記されています*1

unsigned long   uncompressed_length
char            something=0xEF
char            seq_magic='pQES'

調べた結果によれば、このデータはLZS圧縮で圧縮されているようです。LZS圧縮については、ANSI94やRFC 2395日本語版)でその詳細を知ることができるでしょう。

具体的な手順の一例

  1. stg*.psflib を展開します。
    • PSFファイルはPSFLabpsf2exeなどでデコードが可能です(PSFフォーマットの詳細は公式ドキュメントをご覧ください)。
    • 特定の曲が目当てでしたら、minipsf ファイルの _lib タグを見ることで、どのファイルを展開するべきか見当がつきます。
  2. 展開済みファイルの中から圧縮されたSEQを探します。ヘキサエディタなどで始点:pQESの文字列(SEQの識別子)や、終点:FF 2F 00(End of Track)を探してデータを抜き出します。
    • このとき、pQES以前のEFや展開後のサイズなどのデータは消さずに残しておいてください。
    • FF 2F 00の後ろに00などが続くようなら、それをカットしないと展開が成功しないかもしれません。
  3. FiceLZS を用いてデコードを行います(lzs -d test.seq.lzs test.seq)。必要以上にデータが付加されていると異常終了するので、その場合は適当に元ファイルを編集してみましょう。
  4. 展開したSEQファイルを、seq2midなどのツールMIDIファイルに変換します。

なお、VABに関しても同様にデコードできるかと思います。それでは、お楽しみください。

*1:ここに書かれているunsigned longは4バイト、charは1バイトのデータです