1

我以这个例子为基础,很想检索有关当前曲目的更多信息。例如,轨道的当前时间是多少(“播放头”在哪里)以及总轨道长度是多少。

4

2 回答 2

1

获取有关应用程序脚本属性信息的正确方法是通过 AppleScript 编辑器打开其字典。这会在适当的上下文中显示所有内容以及文档。

但是,有时我们并不关心做事的正确方式,我们只想要一种Python方式,嗯?.__dict__而且,在 Python(通过 PyObjC)中,您可以在运行时使用和等工具检查大量类dir。因此,您可以将 iTunes 应用程序对象的属性与 vanillaSBApplication对象进行比较,或者将任何随机脚本事物的属性与 vanilla 进行比较SBObject,这就是您得到的结果:

>>> from ScriptingBridge import SBObject, SBApplication
>>> iTunes = SBApplication.applicationWithBundleIdentifier_("com.apple.iTunes")
>>> (list(set(dir(iTunes)) - set(dir(SBApplication))))
['fullScreen', 'selection', 'mute', 'visuals', 'setSoundVolume_',
# ...
'setVisualSize_', 'currentStreamURL', 'setFixedIndexing_']
>>> (list(set(dir(iTunes.currentTrack())) - set(dir(SBObject))))
['rating', 'databaseID', 'setUnplayed_', 'lyrics', 'show', 'releaseDate',
# ...
'setSkippedCount_', 'skippedCount', 'setSeasonNumber_', 'sampleRate']

碰巧的是,“播放器头”是应用程序的一个属性(一次只能播放一首歌曲)而不是当前曲目(这实际上是相同的“曲目”对象,即使它不是正在播放的那个,仅代表元数据,而不是播放状态)。它和曲目的“持续时间”属性都以秒为单位,因此您可以计算(例如)歌曲的百分比,如下所示:

>>> "{0:0.0f}%".format((iTunes.playerPosition() / iTunes.currentTrack().duration()) * 100)
于 2012-11-28T08:41:32.340 回答
-1

如果您想开始使用 Python 和 AppleEvent 脚本,我强烈建议您使用py-appscript而不是 Scripting Bridge。appscript 由其独立开发人员强大且维护良好,而 Scripting Bridge 在 Apple 似乎不再受到关注。 py-appscriptPython 2 和 Python 3 也支持。

您可以使用 ASDictionary 提供的工具appscript来探索可编写脚本的应用程序提供的脚本字典。或者您可以查看 Apple AppleScript Editor.app(以前称为Script Editor)中的字典并手动翻译语法。在这种情况下,在py-appscript您的一个 Python 实例中安装后,这非常容易。在 iTunes 的脚本字典定义中,列出了application对象的各种属性。列出的一个是:

播放器位置(整数):播放器在当前播放曲目中的位置,以秒为单位。

另一个是:

播放器状态(停止/‌播放/‌暂停/‌快进/‌倒带,r/o):iTunes是停止、暂停还是播放?

为了生成有效的 Python 名称,py-appscript自动将任何空格字符替换为下划线字符:

>>> from appscript import *
>>> it = app('iTunes')   # the "application" object
>>> it.player_state()    # access properties of the "application" object
k.playing
>>> it.player_position() #   (calling the property "( )" implies a "get" action)
1958
>>> it.player_position()
1961
>>> it.current_track.artist()
u'Bavarian Radio Symphony Orchestra'
于 2011-11-29T03:49:19.163 回答