我正在编写一个自动点唱机应用程序,使用php/js作为前端,并使用itunes作为后端。问题是我需要一种方法来判断一首歌何时在itunes中停止播放。我想过用一个空闲的脚本通过applescript来轮询itunes。但是,我将不得不每隔这么多秒进行一次投票,相反,我希望一个事件在歌曲停止播放时运行一个applescript。什么好主意吗?
每当它的状态发生变化时,iTunes都会发送一个名为"com.apple.itunes.playerInfo"的全系统通知。所以如果你能从php注册系统通知(NSDistributedNotificationCenter)那么这将是一种方式,而不是轮询。快速搜索一下如何从python中做到这一点…这里。
我不完全确定是否存在允许您这样做的方法,但现在您可以始终使用iTunes的player state
属性,它通过返回以下五个值之一来告诉您iTunes当前正在做什么:
playing, stopped, paused, fast forwarding, rewinding
使用该属性,您可以创建一个没有命令的repeat until player state is stopped
循环(本质上,等待直到当前播放的歌曲停止),然后在循环之后,执行任何您想要的。翻译成代码,这段文字如下:
tell application "iTunes"
repeat until player state is stopped
--do nothing until the song currently playing is stopped...
end repeat
--[1]...and then execute whatever you want here
end tell
<标题>可选如果您只想运行脚本一次,那么您可以将上述脚本插入到无限的repeat
循环中,尽管您可能希望先执行delay
,以便开始播放歌曲。否则,[1]将在启动脚本后立即执行(假设没有正在使用的歌曲)。
repeat
delay 60 --1 minute delay
tell application "iTunes"
repeat until player state is stopped
--wait
end repeat
...
end tell
end repeat
repeat
delay 60 --1 minute delay
tell application "iTunes"
repeat until player state is stopped
--wait
end repeat
...
end tell
end repeat
如果你有任何问题,尽管问。:)
标题>