以编程方式更新iTunes跟踪位置

时间:2010-05-09 19:28:02

标签: applescript itunes

我想以编程方式修改itunes上轨道的文件系统路径,以便我可以将字符串转换应用到某些轨道位置(现在存储在文件系统的不同位置)。

我尝试使用AppleScript更新相关曲目的位置属性,但在调用“将mytrack的位置设置为...”时出现文件结束错误。

我在网上看到了其他各种黑客攻击,包括导出整个轨道数据库,用XML修改它,然后重新导入它 - 但这似乎丢失了太多元数据(例如播放列表)。

3 个答案:

答案 0 :(得分:3)

查看更多代码真的很有帮助。特别感兴趣的是您使用的价值及其衍生方式。查看您获得的确切错误消息也很有用(如果从脚本编辑器 / 运行程序,您应该可以从AppleScript错误对话框表中复制文本AppleScript的编辑器的)。

file track类的字典条目显示其location属性是可写alias值。您可能遇到的问题是您没有使用该值的别名。

以下代码显示了如何使用choose file(返回alias)的交互式提示更改曲目的位置:

set m to path to music folder
tell application "iTunes"
    set trk to first item of selection
    set l to location of trk
    if class of l is alias then
        set m to l
    end if
    set {d, a, n} to {database ID, artist, name} of trk
    choose file with prompt "Choose the file to use for " & d & ": " & a & "—" & n default location m
    set location of trk to result
end tell

choose file方法不是您想要的,因为您正在进行某种基于字符串的自动路径名转换。

在AppleScript中使用路径名时,您可以使用两种类型:POSIX和HFS。 POSIX路径名具有斜杠分隔的组件(并允许任何组件内的冒号)。 HFS路径名具有冒号分隔的组件(并允许在任何组件内部使用斜杠),并且它们通常以卷名组件开头。

要将存储在变量str中的POSIX路径名转换为AppleScript alias,请使用以下表达式:

POSIX file str as alias

要将存储在变量str中的HFS路径名转换为AppleScript alias,请使用以下表达式:

alias str

例如:

tell application "iTunes"
    set trk to first item of selection
    set l to location of trk
    set newPath to my computeNewPath(POSIX path of l)
    set location of trk to POSIX file newPath as alias
end tell

to computeNewPath(pp)
    -- presumably something interesting happens here
    return pp
end computeNewPath

答案 1 :(得分:2)

如何在保持iTunes资料库数据库(iTunes Library.itl)完好无损的情况下,将媒体文件(未经iTunes“整理”)移动到其他位置:

  1. 将文件移至新位置(例如mv ~/MyMusic /Volumes/Huge/
  2. 在指向新位置的旧位置创建符号链接
    ln -s /Volumes/Huge/MyMusic ~/MyMusic
  3. 启动iTunes(如果尚未运行)
  4. 选择已移动的所有曲目。
  5. 运行此AppleScript:

    -- Mark missing tracks (and update database with real path of existing
    -- tracks) in iTunes
    -- Instructions:
    -- * symlink new file location to old location (old location points to
    --   new location, file exists)
    -- * select tracks to scan/update
    -- * run the script
    -- * missing tracks are marked with (!) and all other track paths have
    --   been updated to the real path (symlinks eliminated) in iTunes
    tell application "iTunes"
        set fx to fixed indexing
        set fixed indexing to true
        set Sel to the selection
    
        repeat with i from 1 to number of items in Sel
            set trk to item i of Sel
            set loc to (get location of trk as text)
        end repeat
    
        set fixed indexing to fx
    end tell
    
  6. 现在所有曲目都应指向正确的位置,并且可以删除符号链接。这可以通过在移动的轨道上选择获取信息并验证路径指向新位置来验证。

  7. 如果没有让符号链接正确,iTunes将在每个缺失的曲目旁边显示(!)。要解决此问题,只需在旧位置创建一个指向新位置的符号链接,然后再次运行该脚本。提示:“获取信息”对话框可用于确定缺失轨道的旧位置。

    这适用于iTunes 11.0.5

答案 2 :(得分:0)

在millerdev的先前回答中添加了内容,我更新了脚本以与MacOS Catalina和新的Music应用程序一起使用。只需创建一个$ HOME / Library / Music / Scripts目录并将其放置在这里即可。

tell application "Music"
  set fx to fixed indexing
  set fixed indexing to true
  set Sel to the selection

  repeat with i from 1 to number of items in Sel
    set trk to item i of Sel
    set l to location of trk
    set location of trk to l
  end repeat

  set fixed indexing to fx
end tell