プログラミングに関する私的メモ

KarmaLib

最終更新:

gen3

- view
だれでも歓迎! 編集

KarmaLib

元ページはKarmaLib 0.9.1a。以下ランダムなメモ。
0.9.1aはJava2SE環境(1.5あるいは1.6)ではLITTLE_ENDIANのfidをJavaのデフォルトであるBIG_ENDIANで読み込んでしまい、この部分で失敗する。
PlaylistUtils.getPlaylistEntriesFromString(String playlistString)
...
ByteBuffer bb = ByteBuffer.allocateDirect(playlist.length)
                          .order(ByteOrder.LITTLE_ENDIAN); // これを追加
PlaylistUtils.getPlaylistStringFromEntries(PlaylistEntry[] entries)
...
ByteBuffer bb = ByteBuffer.allocate((8 * entries.length) + 4)
                          .order(ByteOrder.LITTLE_ENDIAN); // これを追加
を直して、ユーザープログラム動作時に次のようにJavaVMのデフォルトエンコーディングをUTF-8にして、
System.setProperty("file.encoding", "UTF-8");
以上で使えるはず。このデフォルトエンコーディングは、
KarmaClient.getDeviceSettings()
の出力
{
device_generation=1302852415,
name=Rio Karma,
capabilities=;read_content;utf8;rewrite_metadata;file_replace;
              playlists;root_playlist;played_statistics;, 
serial=0034373,
max_playlist_entries=15000,
codecs=;mp3;wma;vorbis;flac;wave;,
recovery=0,
device_id=0x5210,
hwrev=0x4,
storage_name=??????????????£????? ̄,
rns_version=805016800,
manufacturer=Rio Audio,
firmware_version=1.68,
rns_prefix=KRM
}
の中でcapabilities=の値にutf8とあればUTF-8に、その他の設定であればそれに合わせるのが正しいのだろうと思われる。
  • 追加事項
PropertiesWrapper.java
...
public void readPropertyFromByteArray( byte[] property )
{
    try
    {
        String temp = new String(property, "UTF-8");
という風に、強制的にUTF-8でエンコードしないとダメの様子。new Stringのデフォルトはfile.encodingで決まるんじゃないのかなあ。


dev.karma.lib.data.FileDetails#getRid() / setRid(String)
RIDは、楽曲ファイルのID3タグ等を除いた楽曲本体データ部分について計算したMD5値でHEX文字列。ただし、データサイズが64KB超える場合は、データの最初と真ん中と最後を取り出して計算している。
このRIDは dev.karma.lib.util.FileUtils#calculateRid() で計算する。
dev.karma.lib.data.FileDetails#getOffset() / getTrailer()
楽曲ファイルのID3タグ等を除いたデータ部分のバイト位置。trailerはファイルの最後からの位置。
ID3タグに限って言えば、offsetがID3v2の長さに対応し、trailerがID3v1の長さ(128バイト固定)に対応する。APEタグには対応していない、つまり検知せずMP3データの一部として取り扱っている。
dev.karma.lib.data.FileDetails#getType()
プレイリストなら"playlist"、楽曲ファイルなら"tune"が返る。
ちなみにメインのプレイリスト(プレイリストを含むプレイリスト)の場合、fid_generationやctimeがプロパティとして存在しない。これで普通のプレイリストと区別しているのではないかと推測される。

プレイリストのプロパティ

プレイリストの場合に取得されるプロパティは次の通り。
プロパティ名 意味/内容 値の例
marked 不明 0
length playlistのバイト長 68
playlist fidの羅列となるバイナリデータを、iso-8859-1エンコーディング(要はASCIIの範囲外の文字もあるが普通のASCIIとして)16進エスケープ表示した文字列 ?\x02\x00\x00?\x02\x00\x00D?\??\x02\x00\x00D?\??\x02\x00\x00D?\?\x00\x03\x00\x00D?\?\x10\x03\x00\x00D?\? \x03\x00\x00D?\?0\x03\x00\x00D?\?`\x01\x00\x00D?\?
fid ファイルの識別番号 7728
fid_generation fidの生成日時 2007/11/21 14:48:16
file_id 別のバージョンのfid相当と思われるが使われていない模様 0
play_count 再生回数らしいがプレイリストでは常に0 0
ctime ファイルの生成日時、「プレイリストのプレイリスト」ではこの項目がない 2007/11/21 14:48:16
tracknr ID3でのトラック番号 0
type ファイルタイプ(playlist/tune) playlist
play_count_limit 古い楽曲から順次入れ替えていく機能で使用するための再生回数上限 0
title このファイルのタイトル アルバムタイトル

曲データのプロパティ

プロパティ名 内容/意味 値の例
fid ファイル識別子 288
fid_generation fidの生成日時 2076/09/03 6:06:12
type ファイルタイプ tune
length ファイルのバイト長 6223504
offset ID3v2タグの長さ 2058
trailer ID3v1タグの長さ 128
bitrate ビットレート vs192
samplerate 曲データのサンプリングレート(Hz) 44100
codec コーデック mp3
rid 曲データを一意に識別するための特殊な計算したMD5値 6a16b2bdf9750c3501e7386f229a4b57
play_count_limit 再生回数上限 0
play_count 再生回数 106
ctime ファイルの作成日時 2007/11/21 14:48:16
play_last 最終再生日時となっているが再生しても更新されない 2008/09/20 17:05:15
profile 不明 \x00\x00\x00\x00UUE\x05????\x01P?? ̄j??????????? ̄?????k\x00P\?
profiler_version profileのバージョンと思われるが不明 1001
rms 不明 3583
stddev 不明 603
marked 不明 0
file_id 使われていないファイル識別子 0
duration 不明 259186
artist ID3の作曲者タグ Lyric by:yukki♪ Composed by Azell
genre ID3のジャンル Vocal
source ID3タグのアルバム ニコ動
title ID3の曲タイトル BEST FRIENDS
tracknr ID3のトラック番号 0
year ID3タグの年 2007


タグ:

KarmaLib java
+ タグ編集
  • タグ:
  • KarmaLib
  • java

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約 が適用されます。

目安箱バナー