うちがお外で開発するときは、Parallels Desktop の Windows をフルスクリーンで立ち上げるのですが、Mac OS X のアプリケーションにフォーカスを移そうとすると、結構固まったりするんです。iTunes の操作や現在聴いてる曲を知りたくなったときに不便だったのでなんとかしようと思いたった。
Mac 側の共有設定でリモートログインを入れておけば、PoderosaからMacのシェルにログインできるので、iTunes の操作をするスクリプトを書けばよさそう。そういうわけで、Ruby の AppleScript ブリッジ、RubyOSA で操作するスクリプトを書くことにしました。
準備
まずは、RubyOSA が必要なのでインストールする。
$ sudo gem install rubyosa
rubygems と rbosa を require し、OSA.app でオブジェクトを生成。
irb> require 'rubygems'
irb> require 'rbosa'
irb> itunes = OSA.app('iTunes')
再生中の曲を取得する
current_track プロパティに現在の曲の情報を表すオブジェクトが入っている。ここから、name、artist、album がとれる。うちの環境だとどうも化けるっぽいので、kconv を取り込んで toutf8 した。
irb> require 'kconv'
irb> itunes.current_track.name.toutf8
=> "そらのうた"
irb> itunes.current_track.artist.toutf8
=> "和来"
再生とかのコントロール
こんなメソッドが使えます。
irb> itunes.play
irb> itunes.stop
irb> itunes.pause
irb> itunes.next_track
irb> itunes.previous_track
ちょっと使いづらかったので
以上、一通り動かしたところでよく使う次の曲へ移るとか、現在のトラック情報とかメソッド名長かったりしてちょっと面倒だったので、クラス定義してみた。
require 'rubygems' require 'rbosa' # gem install rubyosa require 'kconv' require 'forwardable' class ItunesMusicControl extend Forwardable def initialize @itunes = OSA.app('iTunes') end def track_info track = @itunes.current_track name = track.name.to_s.toutf8 artist = track.artist.to_s.toutf8 album = track.album.to_s.toutf8 puts "#{name} / #{artist} (#{album})" end def_delegator :@itunes, :next_track, :next def_delegator :@itunes, :previous_track, :prev def_delegators :@itunes, :play, :stop, :pause end puts 'input "itunes = ItunesMusicControl.new"'
あとは、irbからこんなかんじで操作できる。
irb> require 'iTunesControl'
irb> itunes = ItunesMusicControl.new
irb> itunes.track_info
そらのうた / 和来 (らくえんのうた)
irb> itunes.next
Parallelsからウィンドウ切り替えるのは非常に時間がかかるので、これだけでも十分楽になりました。