下面的代码,我认为这是一个最小的程序来加载音乐
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
消息)。 path都是正确的,我可以打开目录,写入文件等。数据库对象看起来是正确的(例如,显示2个播放列表),并且存在SysInfoExtended文件。
我究竟做错了什么? 有没有人得到这个(libgpod Python包装)工作?
一个可能的线索是gtkpod提示我inputiPodtypes(Classic 160GB)。 上面我没有设置这些信息。 我该如何设置? 更新 – 我尝试了上面显示的调用,并在下面的答案中提到,但似乎没有效果(我没有包括它原来是因为我认为它一定是错的,但也许是必要的,问题是在别处)。 另外,gtkpod称之为“xB150”?
我已经问过libgpod / gtkpod邮件列表,但没有收到任何回应。 这是最新的稳定版本和git主干(用CFLAGS = -w编译)。
更新我删除了所有的音乐,然后用C297和xB150运行上面的代码。 在任何情况下,Extras.itdb文件(看起来像一个SQLite数据库)更改大小和断开的iPod没有歌曲。 相关的文件在以下链接:
关于这个问题的一般说明,将在这里进行更新。
一个可能的线索是gtkpod提示我输入iPod类型(Classic 160GB)。 上面我没有设置这些信息。 我该如何设置?
itdb_device_set_sysinfo (db._itdb.device, "ModelNumStr", "FOOBAR");
根据型号列表将FOOBAR
替换为您的型号 。
编辑:
我的建议是用调试符号编译gtkpod
,并用gdb
跟踪它的运行情况。 libgtkpod/file.c:add_track_by_filename()
断点libgtkpod/file.c:add_track_by_filename()
似乎是一个不错的起点。
比较它与你的libgpod
用法,看看是否有任何额外的电话。 显然,Python的绑定抽象的东西更多,但它不应该是一个问题,找出他们最终调用。
(例如, import_file
调用itdb_cp_track_to_ipod
和itdb_playlist_add_track
)
对不起,这是我无法访问设备的所有帮助。