Posted at

Unity から iTunes のステータスを知るほうほう

More than 3 years have passed since last update.


iTunes 内部の情報

Cocoa で iTunes のステータス(現在再生中の曲名とか時間とか)を得るには Scripting Bridge をつかう。


Using Scripting Bridge

https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ScriptingBridgeConcepts/UsingScriptingBridge/UsingScriptingBridge.html


ターミナルで

sdef /Applications/iTunes.app | sdp -fh --basename iTunes

ってやると iTunes.h っていうヘッダーファイルができあがる。import してごにょごにょ。


再生時間を得るには

#import "iTunes.h"

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


ちょーかんたん。

iTunes.currentTrack.artist ってやればアーティストとれる。ほかにもいっぱいとれる情報ある。iTunes.h みるよろし。


iTunes の動作イベント

再生開始したとか停止したとかのイベントを外から知るには、てきとうにとんでる Notification をつかまえればよい。


見えない通知を捕まえて通知駆動アプリケーションを作る - ザリガニが見ていた...。

http://d.hatena.ne.jp/zariganitosh/20120918/notification_driven_applescript


- (void)setup

{
[[NSDistributedNotificationCenter defaultCenter] addObserver:self
selector:@selector(updateTrackInfoFromITunes:)
name:@"com.apple.iTunes.playerInfo"
object:nil];
}

- (void)updateTrackInfoFromITunes:(NSNotification *)notification
{
NSLog(@"%@", notification.userInfo);
}

再生開始・停止のタイミングで通知とんでくる。userInfo にいろいろ情報はいってる。


Plugin にする

Example の Simplest Plugin を参考に↑のいろいろをまとめる。ARC が使えないのでメモリ管理ちゃんとやらないとすぐに Unity 落ちる。。。


ソースコード

こちら。

https://github.com/Saqoosha/UnityiTunes