Home > develop > AppleScript Archive

AppleScript Archive

iTunesのプレイリストのトラック情報を整形してクリップボードに保存する

たまに社内のイベントなんかでBGM担当になることがあって、後日「こういう曲をかけたよ」を伝えるのに毎回丁寧にエディタで書いてたのですが、さすがに2時間分のプレイリストなんかを作ると写経が面倒くさくなったのでAutomatorで整形データを作れるようにしてみました。サービス化したので、iTunesから実行できる。どうでもいいけど、Automatorいじったの初めて。

iTunesでプレイリスト選択して、iTunesのメニューから「サービス」> 「Copy tracks from playlist」を選択すれば、「トラック名 / アーティスト名」のフォーマットでクリップボードに追加してくれます。あとは、エディタなり何なりにペーストしてよしなにやればOK。

本当は、iTunesのコンテキストメニューに追加して、「プレイリスト選択」 > 「右クリック」> 「Copy tracks from playlist」でいけるようにしたかったけど、Automatorで実現する方法がよくわからなかった。。多分、無理そう。 というか、Finder以外のアプリってコンテキストメニュー操作できるのかな??

AppleScriptを利用してiTunesにファイルを追加、再生、削除する

iTunes10.6.3からrb-appscriptが利用できない」の通り、rb-appscript経由でのiTunes操作が一切使えなくなっているので、その対応策としてAppleScriptを利用する必要があります。pop-zapでチャンネル変更時に、「変更後の番組情報を音声でスピーカーで出力させる」ということを実現したくて、AirPlay経由でiTunesで再生させればいいなというとこまでは考えられたので、そこから試行錯誤して次のような感じで実現できました。

tell application "iTunes"
  set added_track to add #{MacTypes::FileURL.path(File.expand_path("foo.aiff")).hfs_path)}
  play added_track with once
  delay 10
  pause
  set loc to (get location of added_track)
  delete added_track

  tell application "Finder"
    delete loc
  end tell
end tell
    

このAppleScriptを適当な名前、たとえばsound.scptで保存してAppleScriptを実行するインタープリタのosascriptで実行すればOK。

`osascript sound.scpt`

1つポイントとして、playしたあとにdelayさせてpauseさせています。これは、iTunesの再生処理が別スレッドで実行されるため、同期的に処理を行うにはdelay {再生時間}させないと、どうにもならなかったことによります。。。また、その後にpauseを明示的に実行しないと、指定のファイルを再生後に次のトラックを再生してしまったので、このような処理を行っています。もし、再生後にファイルの削除など(トリッキーなことが)必要なければ、delay, pauseは不要ですね。

しかし、AppleScriptはなかなか慣れずに苦労しました。。でも、この感じで手元で動かなくなったscriptも修正できそうです。

Index of all entries

Home > develop > AppleScript Archive

Search
Feeds

Return to page top