本文主要使用 mac OS 自带的 Automator,结合 AppleScript 实现自动化控制 Spotify,读者可根据类似方法实现其他软件的全局控制。

Automator 部分

简略版

首先打开 Automator,选择 Quick Action(或者 Service),在 Workflow receives 后的第一个选项中选择 no input,在左侧 Actions 栏中找到 Run AppleScript。

详细图文版

首先在 LaunchPad 中寻找或在 Spotlighting Search 中搜索 Automator,其图标如下。

Automator

打开后出现如下图界面,我们选择 Quick Action(当搜索相关内容时,有时会看到 Service,指的也是 Quick Action)。

选择后会出现下面的默认动作

我们在第一行的第一个选择栏中选择 no input,也可以根据实际情况自行选择。选择完成后在左侧 Actions 栏中选择 Run AppleScript,拖拽至右侧操作界面,完成后我们会看到下面的界面。

AppleScript 部分

只需把给出的代码复制进入上图中的白色编辑区即可,点击蓝色框中左上角的三角形可以执行脚本查看效果。注意下文中下一首、上一首以及暂停/播放各需要一个文件,即若完全跟随本文则需要新建三个 Automator 中的 Quick Action。

切歌

代码

  • 下一首 

    tell application "Spotify"

    if it is running then

    play (next track)

    end if

    end tell

  • 上一首 

    tell application "Spotify"

    if it is running then

    play (previous track)

    end if

    end tell

  • 样式(只给出一个,另一个类似)

解释

两块代码只有一个区别:第三行中的 next/previous,分别代表下一个和上一个。第一行和最后一行是调用程序,双引号中为程序名,这里是 Spotify,第二行和倒数第二行是一个条件语句,表示如果,这里表示如果程序正在运行,效果是让快捷键只在 Spotify 运行时才生效,如果不加判断程序是否运行的语句,即使程序未运行,按下快捷键后也会打开程序,执行操作。

暂停/播放

代码

tell application "Spotify"

if it is running then

set isPlaying to the player state

if (isPlaying = playing) then

pause

else

play

end if

end if

end tell

样式


解释

关于调用以及条件的部分不再描述。第三行是一个设置变量语句,将变量 isPlaying 设置成 Spotify 当前的 player state。第五行和第七行则是在判断当前状态后作出暂停/播放的动作。

你也可以像播放下一首/上一首中一样,用最简单的语句分分两个文件执行,但由于这两个动作是对立的,完全可以只用一个快捷键操控,用条件语句可以节省一个快捷键位。

疑问

在跟随上述流程时,难免会产生许多问题,比如“如果我要自己写其他软件的控制,要怎么知道 next track?player state?哪里应该加括号?”,“为什么是 if it is running,而不是 if "Spotify" is running?”等等。在总结中我会分享我自己是如何解决类似问题的。

设置快捷键部分

点击 Run AppleScript 中左上角的三角形可以测试脚本是否管用,若没有问题则可以保存后退出 Automator,建议取名尽量详细。

保存后我们进入到 macOS 的系统偏好设置,可以通过点击屏幕最左上角的 ,选择“系统偏好设置”,之后选择“键盘”,再选择“快捷键”,在左边栏选择“服务”,将右栏中拉到最下方,单击“通用”左边的三角形,可以看到刚刚编写的脚本程序,单击后会出现“添加快捷键”,直接在键盘上按下希望设置的快捷键即可。下图是我自己设置的快捷键,建议设计得复杂一点。我自己的逻辑是⌃ (control)、⌥ (option)、⌘ (command)全按下,上一首/下一首分别用","和"."控制,因为他们在键盘上同时也对应"<"和">",十分直观,而暂停键则是加上空格键(Space)。

总结

全篇下来,Automator 部分很好理解,设置快捷键部分也不难,唯独 AppleScript 部分十分复杂,因为我根本不知道为什么是这个单词而不是那个单词。这是有解决方法的。我用的方法是结合 Dictionary 和搜索引擎。

Dictionary

我们可以在官方程序 Script Editor 的菜单栏中选择“文件”中的“打开字典”来查看,

Script Editor

打开后界面如下图所示

选择 Spotify 后进入详细界面便可以知道有哪些属性(PROPERTIES)和动作可供调用。

最后结合搜索 #AppleScript, #Automator, #Spotify 等关键词即可自行写出想要的自动化脚本。

关于本程序的提醒

有两件事情要注意

  • 一是当在其他应用运行时首次调用快捷键时,会出现弹窗,比如下图就是我在 Apple Music 中调用开始/暂停 Spotify 时出现的界面,只需要点击 OK 即可。
  • 二是在调用播放上一首时,发现如果歌曲已经播放了一段时间(未确认具体时长),则会从头播放这首歌曲,需要再执行一次播放上一首才能真正切歌。
谢谢大家的阅读,欢迎大家在评论区交流。