【问题标题】:Control iTunes from a cocoa application从可可应用程序控制 iTunes
【发布时间】:2011-03-28 00:33:58
【问题描述】:

我正在开发一个涉及音频播放的 mac 应用程序。 我想在播放开始时暂停其他音频播放器。

我该怎么做
1) 检测 iTunes 正在运行
2) 检测到 iTunes 当前正在播放
3) 暂停 iTunes
4) 完成后恢复 iTunes

还有:
5)是否也可以暂停其他类型的媒体播放?比如浏览器中的音频和视频?

【问题讨论】:

    标签: cocoa macos itunes


    【解决方案1】:

    也许创建一个 AppleScript 可以解决这个问题?

    看看这个:

    http://dougscripts.com/itunes/

    或一些命令行脚本?:

    http://www.macosxhints.com/article.php?story=20011108211802830

    【讨论】:

      【解决方案2】:

      1) 检测到 iTunes 正在运行

      NSRunningApplicationProcess Manager

      2) 检测到 iTunes 当前正在播放
      3) 暂停 iTunes
      4) 完成后恢复 iTunes

      Scripting Bridge.

      5) 是否也可以暂停其他类型的媒体播放?

      这取决于应用程序。

      以浏览器中的音频和视频为例?

      没有。

      【讨论】:

        【解决方案3】:

        您可以使用以下使用 ScriptingBridge 的代码来做到这一点:

        #import "iTunes.h"
        #import "Cocoa/Cocoa.h"
        
        int main()
        {
          iTunesApplication* iTunes = [SBApplication applicationWithBundleIdentifier:@"com.apple.iTunes"];
        
          // check if iTunes is running (Q1)
          if ([iTunes isRunning])
          {
            // pause iTunes if it is currently playing (Q2 and Q3)
            if (iTunesEPlSPlaying == [iTunes playerState])
              [iTunes playpause];
        
            // do your stuff
        
            // start playing again (Q4)
            [iTunes playpause];
          }
          return 0;
        }
        

        文件iTunes.h 是通过从命令行运行sdef /Applications/iTunes.app | sdp -fh --basename iTunes 生成的。错误unknown type name "tdta"可以忽略。

        您还需要将 ScriptingBridge.framework 添加到链接的框架中。

        这里也是ScriptingBridge documentation的链接。

        【讨论】:

        • 什么是 iTunesEPlSPplaying?有没有办法检测音频是否正在快速播放?
        • playerState 是什么数据类型?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-10-30
        • 1970-01-01
        • 1970-01-01
        • 2012-02-15
        • 1970-01-01
        • 2015-12-27
        • 1970-01-01
        相关资源
        最近更新 更多