2011-09-09 3 views
0

を制御するために、私は、私が演じているか、一時停止現在のトラックをiTunesやRdioAlfredと組み合わせて使用​​するAppleScriptを持っているかに応じて、私は開いています。私のスクリプトでは、特定の目的のために必要なときにいつもiTunesを開いてRdioを開くだけなので、Rdioが優先されます。のAppleScriptをiTunesとRDIO

トラックがiTunesで再生されていて、グローバルショートカットを使用してこのスクリプトを実行すると、トラックを停止するのに最大15秒かかります。私はここでスクリプトを共有し、目立つ問題があるかどうか、またはそれを処理する方法がはるかに簡単で効率的な方法があるかどうかを確認したいと考えました。

私は何か助けていただきありがとうございます!

tell application "System Events" 
    if (name of processes) contains "iTunes" then 
     set iTunesRunning to true 
    else 
     set iTunesRunning to false 
    end if 
    if (name of processes) contains "Rdio" then 
     set RdioRunning to true 
    else 
     set RdioRunning to false 
    end if 
end tell 

if RdioRunning then 
    tell application "Rdio" 
     if player state is paused or player state is stopped then 
      play 
     else if player state is playing then 
      pause 
     end if 
    end tell 
else if iTunesRunning then 
    tell application "iTunes" 
     if player state is paused or player state is stopped then 
      play 
     else if player state is playing then 
      pause 
     end if 
    end tell 
end if 

答えて

1

このような問題を追跡することは困難です。一般的にあなたのスクリプトは正常に見えます。あなたの問題にも役立ついくつかのアイデアがあります。

一般に、リンスクリプトは実行時に解釈されます。つまり、スクリプトを実行するたびに別のプログラム(AppleScriptランナー)によってバイトコードを機械語コードに変更する必要があります。これは通常問題ではありませんあなたの場合は多分それはいくつかの遅さを引き起こしている。したがって、スクリプトを作成して、それを実行する必要はありません。アプリケーションはマシン言語形式で保存され、コードを実行するための別のプログラムを必要としないため、スクリプトをAppleScriptアプリケーションとして保存することで、これを行うことができます。さらに、両方のアプリケーションのコマンドが同一であることを利用することができますので、「using terms from」ブロックを使用できます。あなたのコードでは、 "プロセス名"のシステムイベントを2回クエリするので、最後に行うことができるのは一度だけです。

これを試して、役立つかどうかを確認してください。私はそれは確かではありませんが、試してみる価値があります。それをアプリケーションとして保存することを忘れないでください。

tell application "System Events" to set pNames to name of application processes 

    if "Rdio" is in pNames then 
     set appName to "Rdio" 
    else if "iTunes" is in pNames then 
     set appName to "iTunes" 
    else 
     return 
    end if 

    using terms from application "iTunes" 
     tell application appName 
      if player state is paused or player state is stopped then 
       play 
      else if player state is playing then 
       pause 
      end if 
     end tell 
    end using terms from 

EDIT:上記のコードは動作しない場合は、これを試してみてください。前述のように、アプリケーションとして試してみましょう。同じ原則が適用されます...システムイベントのクエリが少なくなり、コードを解釈する必要がないようにアプリケーションとして保存します。

tell application "System Events" to set pNames to name of application processes 

if "Rdio" is in pNames then 
    tell application "Rdio" 
     if player state is paused or player state is stopped then 
      play 
     else if player state is playing then 
      pause 
     end if 
    end tell 
else if "iTunes" is in pNames then 
    tell application "iTunes" 
     if player state is paused or player state is stopped then 
      play 
     else if player state is playing then 
      pause 
     end if 
    end tell 
end if 
+0

お寄せいただきありがとうございます!このエラーが表示される: エラー "Rdioにエラーがあります:続行できません。"番号-1708 –

+0

Brandon、私はRdioを持っていないので、上記の最初のコードを検証することができませんでした。私はあなたの問題が "用語を使う"ものだと仮定しているので、それを使わずに試してみてください。私は新しいコードで "EDIT"セクションを追加しました。私はそれが助けて欲しい – regulus6633

関連する問題