KarmaLib
元ページはKarmaLib 0.9.1a。以下ランダムなメモ。
0.9.1aはJava2SE環境(1.5あるいは1.6)ではLITTLE_ENDIANのfidをJavaのデフォルトであるBIG_ENDIANで読み込んでしまい、この部分で失敗する。
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() で計算する。
このRIDは dev.karma.lib.util.FileUtils#calculateRid() で計算する。
dev.karma.lib.data.FileDetails#getOffset() / getTrailer()
楽曲ファイルのID3タグ等を除いたデータ部分のバイト位置。trailerはファイルの最後からの位置。
ID3タグに限って言えば、offsetがID3v2の長さに対応し、trailerがID3v1の長さ(128バイト固定)に対応する。APEタグには対応していない、つまり検知せずMP3データの一部として取り扱っている。
ID3タグに限って言えば、offsetがID3v2の長さに対応し、trailerがID3v1の長さ(128バイト固定)に対応する。APEタグには対応していない、つまり検知せずMP3データの一部として取り扱っている。
dev.karma.lib.data.FileDetails#getType()
プレイリストなら"playlist"、楽曲ファイルなら"tune"が返る。
ちなみにメインのプレイリスト(プレイリストを含むプレイリスト)の場合、fid_generationやctimeがプロパティとして存在しない。これで普通のプレイリストと区別しているのではないかと推測される。
ちなみにメインのプレイリスト(プレイリストを含むプレイリスト)の場合、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 |