WindowsのGM.DLSファイル解析 | objective-cをちょい研究!ブログ

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

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

Windows標準の音色ファイルであるGM.DLSのフォーマットについて調べました。
wvplチャンクに音色データとして複数のWAVEファイルが埋め込まれています。
WAVEデータ部分だけ抜粋して解析。


<wvplチャンク>

wvpl


LIST・・・ 音色1(WAVE部分の全体構造参照)

LIST・・・ 音色2

・・・


<WAVE部分の全体構造>
LIST nnnnnnnn
WAVデータのブロックサイズ


wavefmt\20 12000000
waveフォーマットデータチャンク[0x12=20byte]
内容はwaveファイルのWAVEfmt\20と共通


wsmp 24000000
音色情報チャンク[0x24=36byte]


data nnnnnnnn
データチャンク


LIST…
以下著作権情報チャンクの列挙


DLSファイルから以上の部分を抜き出して、先頭のLISTをRIFF、wavefmtをWAVEfmtに変更すればエクスプローラのプロパティでWAVEファイルとして認識しました。


<音色情報(wsmp)チャンクのデータ部>
※英語のコメントはMIDI Manufacturers Association公開のdls.hより転記
次の2つのブロックに分かれています。


14000000 自身を含むサイズ(20byte)
nnnn 基準ノートNo

nnnn 基準ノートからのオフセットピッチ(符号型)

Specifies the tuning offset from the usUnityNote in 16 bit relative pitch.

nnnnnnnn 音量のオフセット減衰量?

Specifies the attenuation to be applied to this sample in 32 bit relative gain.
00000000 フラグオプション(1=F_WSMP_NO_TRUNCATION 2=F_WSMP_NO_COMPRESSION)
0n000000 ループ種別(0=ループしない/1=ループする/2~未定義)


(ループする場合のみ)

10000000 自身を含むサイズ(16byte)
00000000 ループ種別(0固定=WLOOP_TYPE_FORWARD)
nnnnnnnn ループ開始サンプル数(16bitの場合は、1サンプル=2byte)

nnnnnnnn ループする長さ(ループ開始位置からのサンプル数)


http://www.midi.org/about-midi/dls/abtdls.shtml
MIDI Manufacturers Association