动作时获取跟踪信息(iTunes Applescript)

时间:2014-02-28 15:40:32

标签: applescript itunes

当用户更改播放器(iTunes)状态时,我需要获取有关曲目(歌曲名称,艺术家,专辑)的信息:下一曲目,最后曲目,播放和停止。

我写了一些东西,但它不适合行动(玩,停等等)。

repeat
delay 1 
tell application "iTunes"
    if player state is stop then
        set myAlbumiTunes to {get name of current track, get artist of current track, get album of current track}
        log myAlbumiTunes
    end if
end tell
end repeat

1 个答案:

答案 0 :(得分:2)

最简单的方法是,如果您知道如何编写cocoa应用程序,因为每次iTunes中的某些更改都会发出系统范围的通知。古柯应用程序可以收到该通知并采取行动。

既然你想要一个AppleScript方法,那么你必须以艰难的方式去做。你需要一些变量来跟踪当前的歌曲和播放器状态。每次通过重复循环检查当前歌曲是否存储在变量中的歌曲和播放器状态。如果有什么变化,那么你可以采取行动。

我没有对此进行测试,但它显示了这个想法。我希望它有所帮助。祝你好运。

property savedSongName : missing value
property savedPlayerState : missing value

repeat
    delay 1
    set somethingChanged to false
    tell application "iTunes"
        set currentTrack to current track
        set currentSongName to name of currentTrack
        set currentPlayerState to player state


        if currentPlayerState is not savedPlayerState then
            set somethingChanged to true
        else if currentSongName is not savedSongName then
            set somethingChanged to true
        end if

        if somethingChanged then
            set myAlbumiTunes to {get name of currentTrack, get artist of currentTrack, get album of currentTrack}
            log myAlbumiTunes
        end if

        set savedPlayerState to currentPlayerState
        set savedSongName to currentSongName
    end tell
end repeat

编辑 :如果您确实编写了objective-c程序,请按以下方式注册通知。

[[NSDistributedNotificationCenter defaultCenter] addObserver:self selector:@selector(receivediTunesNotification:) name:@"com.apple.iTunes.playerInfo" object:nil];

然后创建一个处理程序“ - (void)receivediTunesNotification:(id)notif”。只要有变化,就会调用它。您可以从通知中获取字典,该字典提供如下更改信息。

NSDictionary* itunesDict = [notif valueForKey:@"userInfo"];