【问题标题】:Scripting iTunes: playing single tracks脚本 iTunes:播放单曲
【发布时间】:2015-07-04 21:46:33
【问题描述】:

我正在开发一个应用程序,我想在特定时间向 iTunes 发出信号,以播放来自任何播放列表的单曲。我刚刚开始学习 Scripting Bridge,我使用 Apple 引用的命令行工具创建了一个“iTunes.h”文件,并且我的项目中有这个和 ScriptingBridge.framework。现在我想我要做的就是

iTunesApplication *iTunes = [SBApplication applicationWithBundleIdentifier:@"com.apple.iTunes"];

当我想提示下一个曲目时:

[iTunes playOnce:YES];

iTunes 确实响应,但如果我理解 Apple 的示例代码,YES 参数应该会强制它播放一首且仅一首曲目。事实上,YES 或 NO 似乎并不重要:iTunes 总是从选定的曲目播放到播放列表的末尾,不管有多少曲目。我错过了什么吗?而且由于我只需要发送一个非常简单的 Apple Event,有没有比通过整个 Scripting Bridge 框架更简单的方法呢?

【问题讨论】:

    标签: cocoa itunes scripting-bridge


    【解决方案1】:

    在 Mac OS X 10.6 Snow Leopard 中,Apple 引入了 AppleScriptObjC 框架,它在 AppleScript 和 Cocoa 之间提供了更简单的桥接。不再有丑陋的头文件。

    在脚本类中,您可以将 AppleScript 与类似 Objective-C 的语法混合使用。 Xcode 中有一个 AppleScriptObjC 模板,但是你可以通过添加 AppleScriptObjC 框架并在 main.m 中调用来将 ASOC 添加到现有的 Cocoa 项目中

    [[NSBundle mainBundle] loadAppleScriptObjectiveCScripts];
    

    Apple 的文档很差,macosxautomation.com 上有一些资源,那里也有 Shane Stanley 撰写的综合书籍。

    【讨论】:

    • 有趣。 ASOC 看起来要直观得多,但在没有像样的文档的情况下,我现在又害怕另一个学习曲线。作为一个快速的替代方案,我对 iTunes 和一些直接的 AppleScript 进行了一些实验:tell application "iTunes" to play current track with once 结果:相同的行为。 iTunes 用户界面在过去几年中发生了显着变化。我敢怀疑它的 Apple 事件处理没有得到相应的关注吗?目前可能无法告诉 iTunes 只播放一首曲目。不过,我会牢记 ASOC 的未来。
    • 如果您已经了解 Cocoa,那么 ASOC 就足够简单了,而且 AppleScript 与 SB 不同,它知道如何正确地与应用程序对话,所以如果某些东西不起作用,那么您知道是应用程序造成的,而不是桥上有问题。这是quick how-to on adding ASOC 'classes' to your ObjC project.
    • 我最终得出结论,对于单行脚本,仅使用 NSAppleScript 对象比 ASOC 或 Scripting Bridge 更有意义。但感谢您让我加入 ASOC:我相信它在未来会派上用场。至于我的主要问题,经过大量实验后,我得出结论,AppleScript 编辑器显示的“iTunes 词典”中有很多内容非常古怪,或者在某些情况下根本不起作用。我暂时将此归因于 iTunes 用户界面开发超过了 iTunes Apple 事件处理。谢谢大家。
    猜你喜欢
    • 1970-01-01
    • 2023-03-08
    • 2010-12-30
    • 2011-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多