gpt4 book ai didi

python - 如何使用 Python 和 Scripting Bridge 将轨道添加到 iTunes 播放列表

转载 作者:太空狗 更新时间:2023-10-30 01:02:51 25 4
gpt4 key购买 nike

我在上一个问题中学习了如何创建播放列表,但现在我不知道如何向其中添加轨道。现在我有:

tracks.sort(key=lambda tup: tup[0])
i = 0
for trackList in generatePlaylists(tracks,10):
i += 1
playlistname = str(i)
p = {'name': playlistname}
playlist = iTunes.classForScriptingClass_("playlist").alloc().initWithProperties_(p)
iTunes.sources()[0].playlists().insertObject_atIndex_(playlist, 0)

# Find the playlist I just made
for playlist in iTunes.sources()[0].playlists():
if playlist.name() == playlistname:
newPlaylist = playlist

# Add the tracks to it
for track in trackList:
print track[1].name()
iTunes.add_to_(track[1],newPlaylist)

我的轨道在元组列表 tracks 中,其中元组的第一个元素是分数,第二个是实际的轨道对象。 generatePlaylists 是一个迭代器,它将所有库轨道分成 10 个列表。

上面的代码运行没有错误,但在 iTunes 中播放列表是空的。

最佳答案

首先,这是一个简短的回答:

track.duplicateTo_(newPlaylist)

问题是 iTunes.add_to_ 发送了 add 命令,该命令获取一个文件(别名)并将其导入播放列表;您要发送 duplicate 命令,该命令获取任何对象并制作该对象的另一个副本。你没有文件,你有轨道。 (您可以通过 track.location() 获取文件,但您不想重新导入该文件,只需将轨道复制过来即可。)

此外,在这种情况下,您需要在轨道上调用该方法,而不是在应用程序上调用它并将其传递给轨道。

如果不透彻理解 iTunes 对象模型(及其下的 AE 模型),就很难解释前半部分。但你真的不需要理解它。在大多数情况下,通过查看 iTunes 脚本字典(在 AppleScript 编辑器中)和反复试验(在 AppleScript 编辑器中或使用 py-appscript),您可以弄清楚您想要什么。 (只要确保你正在处理一个废料库,或者有一个备份……)在这种情况下,唯一可能的命令是addcopyduplicate,或者move,所以只要全部尝试一下,看看它们能做什么。或者,也可以转到 dougscripts 并下载一堆示例,然后找到一个可以满足您要求的示例。

这一部分的后半部分,弄清楚如何转换为 ScriptingBridge……好吧,如果不对 SB 进行长篇大论,我无法解释它(如果你想阅读的话,它比我做得更好)。但基本原理是这样的:就 iTunes 而言,duplicate 是一个命令。如果您给它一个直接对象(告诉应用程序“iTunes”将轨道复制到播放列表),它会使用它;如果不是,则您要求主题复制自身(告诉 theTrack 复制到 thePlaylist)。它的工作原理与英语完全一样。但是 SB 坚持面向对象的模型,其中 duplicate 是某个对象上的方法。因此,这两种形式中只有一种会起作用。通常,您可以通过查看 dir(iTunes)dir(track) 来确定哪个具有看起来像您想要的命令的方法。

从上面的内容可以看出,如果您要尝试做任何复杂的事情,您将面临大量的反复试验。祝你好运,继续提问。

PS,我不知道为什么你的代码会默默地失败。 add_to_ 方法应该转换为命令的明显方式应该引发 -1708 错误(如 appscript iTunes.add(track, to=newPlaylist) 或 AppleScript add theTrack 到 newPlaylist 两者都......)。

关于python - 如何使用 Python 和 Scripting Bridge 将轨道添加到 iTunes 播放列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12971306/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com