徒然なる実験帖

興味のあることでも徒然に...の筈が、完全にギガビ部屋に。あれ?

HD20GA7/KXDファイルヘッダ解析

2005-07-02 01:05:36 | Media KEG
えー早速ですが HD20GA7 で使用される音楽ファイル(KXDファイル)のタグ格納情報を確認してみました。基本は gigabeatF Ver.1.x の SAT ファイルですので、それをベースに、注意しなければいけない点を書き連ねてみました。よって以下で触れていない点は Ver.1.x の SAT ファイルと同じとでも思ってください。というかほとんど同じなんですが……。

あ、念のためバージョン情報は以下のとおりです。

・HD20GA7 本体:Ver.1.00.03
・Kenwood Media Application:Ver.1.0.0.2


【参考資料】
SAT ファイルヘッダ解析(Ver.1.x)


【ヘッダ識別子】
前回も書いたとおり「SAT AUDIO ##004 」

まさかここまで露骨に同じとは……(苦笑


【各名称の最大文字列長】
タイトル:63文字
アーティスト:31文字
アルバム:31文字
ジャンル:31文字

いずれも Unicode で、文字列の最後に終端文字(0x00 0x00)を付加します。
(gigabeatF と同じです)
(なので各項目とも最大 128、64、64、64 byte となります)

また長い名称を設定後に短い名称に変更すると、前の長い名称を消さずにその上に短い名称を上書き記録している(ゴミが残る)模様です。
そのため、実際に各名称を取得する場合は終端文字の確認が必須となります。
(綺麗に記録しましょうよ……)

例)
変更前:123456:「31 00 32 00 33 00 34 00 35 00 36 00」
変更後:123:「31 00 32 00 33 00 00 00 35 00 36 00」


【トラックNoの格納サイズ】
0x0200~0x0201 の 2 byte に格納。

gigabeatF は 0x0200~0x0203 の 4 byte にトラックNoを格納していたと記憶していますので微妙に異なりますね。
まぁ通常のトラックNo(1~99)を設定していれば特に意識する必要はないと思いますが。

ちなみに 0x0202~0x0203 の 2 byte は常に「00 00」。
(今のところ。別用途がないとも限りませんので……)


【ジャケット画像設定FG】
0x0204~0x020b は常に 0xFF で埋められる模様。

ジャケット画像の有無については gigabeatF の Ver.2 仕様と同様にジャケットファイル名が設定されているか否かで有無を判断しているみたいです。
故に「ジャケット画像設定FG」という考え自体不要ということでしょうか?


以上、ざっくりとですが KXD ファイルの解析結果です。

KXD ファイルのベースとなった SAT ファイルを既に解析済みですので、今回は各タグの意味や配置等が判っていてとても簡単に解析することができました。
流用ってスバラシイ(笑

最新の画像もっと見る

2 コメント

コメント日が  古い順  |   新しい順
STEP_SAT (matritico)
2005-07-04 03:05:26
morihata氏の情報を元にとりあえずβ版出してみました。



> 【トラックNoの格納サイズ】

これはgigabeatもHD20GA7も4byteではないですか?gigabeatの場合はroomで制限をかけてなかったみたいなのでどんな値でも書き込めたようですが、Kenwoodの場合は制限かけてるのかもしれません。他の例を見ても4byteが最小ブロックサイズっぽいですし...確かに0x203-204に何か格納されるようになった時が怖いのですが^^;
返信する
Re: STEP_SAT (morihata)
2005-07-07 18:02:35
試しに Kenwood Media Application、gigabeat room それぞれのタグ編集画面でトラックNoに「65536」を設定してみたら、以下のようにヘッダに格納されました。



KMA:「00 00 00 00」

GR :「00 00 01 00」



これを見るに、少なくともトラックNoの考え方は双方で違っているようですね。



双方ともどんな値を設定しても再度タグ編集画面を開くと -32768~32767 の範囲でしか値が表示されませんので、もしかしたら gigabeat も 2byte 管理をしていて、3~4byte 目に値が書き込まれるのは…… room のバグとか(苦笑



なんにせよ、タグエディタ上はトラックNoを 0~32767 の範囲しか許可しないとか制限を付けておいた方が安全かもしれませんね。
返信する