如何通过applescript在随机播放或重复模式下设置iTunes 11

use*_*101 5 applescript itunes shuffle repeat

根据http://dougscripts.com/设置shuffle和重复模式通过applescript在iTunes 11中被破坏.

根据这个stackoverflow,回答 shuffle现在是一个独立于播放列表的设置.

因此,我试图通过UI设置随机播放值,可以通过iTunes的LCD-ish显示或通过菜单栏.当我尝试在LCD区域或菜单栏中单击随机按钮/菜单项时,我得到的只是"未知的UI索引"错误.(我是Apple的新手).

如果你们中的一些人想出一种在iTunes 11上切换shuffle模式的方法,那就太好了.此外,我更喜欢基于菜单栏而不是LCD显示器的解决方案,因为随机播放按钮在后者中并不总是可见.

理想情况下,我更喜欢基于语义的解决方案,而不是基于UI的解决方案,但我不确定它是否可能(iTunes 11 applescript库似乎已经过时,因为它提到了"播放列表"项目的"shuffle"属性).

ace*_*973 5

对于iTu​​nes 12.6,此方法有效:

现在可以将“重复”切换为“打开或“ 关闭”或“ 全部”

tell application "iTunes"
set song repeat to off
end
Run Code Online (Sandbox Code Playgroud)

随机播放可以切换为TrueFalse

tell application "iTunes"
set shuffle enabled to true
end
Run Code Online (Sandbox Code Playgroud)

您可以在Dougscripts中找到更多详细信息


reg*_*633 3

我非常喜欢 John Sauer 的方法,因此我使用他的方法为这些属性编写了一些 getter/setter。它的效果很好,因为您在使用它们之前无需激活 iTunes。不管怎样,我想我会把它们发布出来,以防它们对任何人有帮助。您将使用“类型”(根据菜单项名称建模)获取或设置它们的值,如下所示:

重复类型为“关闭”、“全部”或“一个”。

随机播放类型为“关闭”、“按歌曲”、“按专辑”或“按分组”

on getRepeatType() -- the return value is a string: Off/All/One
    tell application "System Events"
        tell process "iTunes"
            set menuItems to menu items of menu bar 1's menu bar item "Controls"'s menu 1's menu item "Repeat"'s menu 1
            set currentChoice to "unknown"
            repeat with anItem in menuItems
                try
                    set theResult to value of attribute "AXMenuItemMarkChar" of anItem
                    if theResult is not "" then
                        set currentChoice to name of anItem
                        exit repeat
                    end if
                end try
            end repeat
        end tell
    end tell
    return currentChoice
end getRepeatType

on setRepeatType(repeatType) -- repeatType is a string: Off/All/One
    set currentValue to my getRepeatType()
    ignoring case
        if currentValue is not repeatType then
            tell application "System Events" to tell process "iTunes"'s menu bar 1's menu bar item "Controls"'s menu 1's menu item "Repeat"'s menu 1
                if repeatType is "all" then
                    perform action "AXPress" of menu item "All"
                else if repeatType is "one" then
                    perform action "AXPress" of menu item "One"
                else
                    perform action "AXPress" of menu item "Off"
                end if
            end tell
        end if
    end ignoring
end setRepeatType

on getShuffleType() -- the return value is a string: Off/By Songs/By Albums/By Groupings
    tell application "System Events"
        tell process "iTunes"
            set menuItems to menu items of menu bar 1's menu bar item "Controls"'s menu 1's menu item "Shuffle"'s menu 1
            set onOffItemName to name of item 1 of menuItems
        end tell
    end tell

    -- is shuffle off
    ignoring case
        if onOffItemName contains " on " then return "Off"
    end ignoring

    -- shuffle is on so find how we are shuffling
    set currentChoice to "Unknown"
    tell application "System Events"
        tell process "iTunes"
            repeat with i from 2 to count of menuItems
                set anItem to item i of menuItems
                try
                    set theResult to value of attribute "AXMenuItemMarkChar" of anItem
                    if theResult is not "" then
                        set currentChoice to name of anItem
                        exit repeat
                    end if
                end try
            end repeat
        end tell
    end tell
    return currentChoice
end getShuffleType

on setShuffleType(shuffleType) -- shuffleType is a string:  Off/By Songs/By Albums/By Groupings
    set currentValue to my getShuffleType()

    script subs
        on toggleShuffleOnOff()
            tell application "System Events" to perform action "AXPress" of (first menu item of process "iTunes"'s menu bar 1's menu bar item "Controls"'s menu 1's menu item "Shuffle"'s menu 1 whose name ends with "Shuffle")
        end toggleShuffleOnOff

        on pressBySongs()
            tell application "System Events" to perform action "AXPress" of (first menu item of process "iTunes"'s menu bar 1's menu bar item "Controls"'s menu 1's menu item "Shuffle"'s menu 1 whose name ends with "Songs")
        end pressBySongs

        on pressByAlbums()
            tell application "System Events" to perform action "AXPress" of (first menu item of process "iTunes"'s menu bar 1's menu bar item "Controls"'s menu 1's menu item "Shuffle"'s menu 1 whose name ends with "Albums")
        end pressByAlbums

        on pressByGroupings()
            tell application "System Events" to perform action "AXPress" of (first menu item of process "iTunes"'s menu bar 1's menu bar item "Controls"'s menu 1's menu item "Shuffle"'s menu 1 whose name ends with "Groupings")
        end pressByGroupings
    end script

    ignoring case
        if shuffleType contains "off" then -- we have to make sure it's off
            if currentValue does not contain "off" then subs's toggleShuffleOnOff()
        else
            -- make sure it's on
            if currentValue contains "off" then subs's toggleShuffleOnOff()

            -- select the shuffle menu item for the type
            if shuffleType contains "song" and currentValue does not contain "song" then
                subs's pressBySongs()
            else if shuffleType contains "album" and currentValue does not contain "album" then
                subs's pressByAlbums()
            else if shuffleType contains "group" and currentValue does not contain "group" then
                subs's pressByGroupings()
            end if
        end if
    end ignoring
end setShuffleType
Run Code Online (Sandbox Code Playgroud)