10

以下代码,我认为是加载音乐的最小程序

db = Database('/media/andrew@acooke.org ipod')
itdb_device_set_sysinfo(db._itdb.device, "ModelNumStr", "C297")
db.import_file('/home/andrew/some-track.mp3')
db.copy_delayed_files()
db.close()

将以下内容打印到 stderr:

** (utrunner.py:11333): WARNING **: Itdb_Track ID '0' not found.
** (utrunner.py:11333): CRITICAL **: itdb_get_mountpoint: assertion `itdb' failed
** (utrunner.py:11333): CRITICAL **: prepare_itdb_for_write: assertion `link' failed
** (utrunner.py:11333): CRITICAL **: mk_mhla: assertion `fexp->albums' failed
** (utrunner.py:11333): CRITICAL **: mk_mhli: assertion `fexp->artists' failed
** (utrunner.py:11333): CRITICAL **: itdb_splr_validate: assertion `at != ITDB_SPLAT_UNKNOWN' failed

并且不加载任何音乐。

当我运行 gtkpod(它使用 libgpod - 它们都来自同一个项目)时,它确实有效(并且只打印了初始警告和ITDB_SPLAT_UNKNOWN消息)。路径都是正确的,我可以打开目录、写入文件等。数据库对象似乎是正确的(例如显示 2 个播放列表)并且存在 SysInfoExtended 文件。

我究竟做错了什么?有没有人让这个(libgpod Python 包装器)工作?

一个可能的线索是 gtkpod 提示我选择 iPod 类型(经典 160GB)。我没有在上面设置该信息。我该如何设置? 更新- 我确实尝试了上面显示并在下面的答案中提到的调用,但它似乎没有效果(我最初没有包括它,因为我认为它一定是错误的,但也许它是必需的,问题出在其他地方)。另外,gtkpod 称它为“xB150”?!

我询问了 libgpod/gtkpod 邮件列表,但没有收到任何回复。这是最新的稳定版本和 git 主干(使用 CFLAGS=-w 编译)。

更新我删除了所有音乐,然后用 C297 和 xB150 运行上面的代码。在这两种情况下,Extras.itdb 文件(看起来像一个 sqlite db)都没有改变大小,并且断开连接的 iPod 没有歌曲。相关文件位于以下链接:

关于这个问题的一般说明,将来会更新,这里。

4

1 回答 1

4

一个可能的线索是 gtkpod 提示我选择 iPod 类型(经典 160GB)。我没有在上面设置该信息。我该如何设置?

itdb_device_set_sysinfo (db._itdb.device, "ModelNumStr", "FOOBAR");

FOOBAR根据型号列表替换为您的型号。

编辑:

我的建议是gtkpod使用调试符号进行编译并使用gdb. 断点libgtkpod/file.c:add_track_by_filename()似乎是一个不错的起点。

将它的用法libgpod与你的比较一下,看看是否有任何额外的调用。显然,Python 绑定更多地抽象了事物,但弄清楚它们最终调用什么应该不是问题。

(例如import_file呼叫itdb_cp_track_to_ipoditdb_playlist_add_track

抱歉,这就是我在无法访问设备的情况下所能提供的全部帮助。

于 2012-08-08T12:26:59.463 回答