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

db = Database('/media/[email protected] 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)。我没有在上面设置该信息。我该如何设置? 更新-我确实尝试了上面显示的 call ,并在下面的答案中提到了该 call ,但它似乎没有任何效果(我最初未包含此 call 是因为我认为它一定是错误的,但也许是必需的,并且是问题所在在其他地方)。另外,gtkpod称它为“xB150”吗?

我已询问libgpod/gtkpod邮件列表,但未收到任何回复。最新的稳定版本和git trunk(与CFLAGS = -w一起编译)都具有此功能。

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

  • General notes on this issue, which will be updated in future, here.

    最佳答案


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

    根据model list用您的模型替换FOOBAR

    编辑:

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

    libgpod的用法与您的用法进行比较,看看是否还有其他调用。
    显然,Python绑定(bind)会更多地抽象事物,但弄清楚它们最终要调用什么也不应该成为问题。

    (例如import_file调用itdb_cp_track_to_ipoditdb_playlist_add_track)

    抱歉,这就是我无需访问设备即可提供的所有帮助。

    07-26 09:34