iTunes(10.15以降は「ミュージック」)で再生中の楽曲情報を取得する方法。
簡単にどうするかの説明的なもの
iTunesがOS(NSNotificationCenter)に対して投げる通知(com.apple.iTunes.playerInfo)を捕獲する。
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
[[NSDistributedNotificationCenter defaultCenter] addObserver:self selector:@selector(stateChanged:) name:@"com.apple.iTunes.playerInfo" object:nil];
}
- (void)stateChanged:(NSNotification *)notification
{
NSDictionary *userInfo = notification.userInfo;
for (id key in [userInfo keyEnumerator]) {
NSLog(@"Key:%@ Value:%@¥n", key, [d valueForKey:key]);
}
}
注意事項としてはこのコードはサンドボックスの外で動かすこと。
取得できる情報
情報は連想配列に格納されているため、その値を全て取り出したものが以下の通りである。
Key:Display Line 1 Value:タンポポ — 乙女 パスタに感動 Key:Back Button State Value:Prev Key:Disc Number Value:1 Key:elapsedStr Value:-4:34 Key:Track Number Value:1 Key:Name Value:乙女 パスタに感動 Key:PersistentID Value:-7101576592875427120 Key:Player State Value:Paused Key:Display Line 0 Value:乙女 パスタに感動 Key:Location Value:file:///Users/miyu/Music/iTunes/iTunes%20Media/Music/%E3%82%BF%E3%83%B3%E3%83%9B%E3%82%9A%E3%83%9B%E3%82%9A/%E4%B9%99%E5%A5%B3%20%E3%83%8F%E3%82%9A%E3%82%B9%E3%82%BF%E3%81%AB%E6%84%9F%E5%8B%95/01%20%E4%B9%99%E5%A5%B3%20%E3%83%8F%E3%82%9A%E3%82%B9%E3%82%BF%E3%81%AB%E6%84%9F%E5%8B%95.mp3 Key:Album Artist Value:タンポポ Key:Artist Value:タンポポ Key:Rating Computed Value:1 Key:Skip Count Value:0 Key:Year Value:2000 Key:Disc Count Value:1 Key:Library PersistentID Value:7305280474900814239 Key:Artwork Count Value:1 Key:Play Count Value:0 Key:Store URL Value:itmss://itunes.com/link?n=%E4%B9%99%E5%A5%B3%20%E3%83%91%E3%82%B9%E3%82%BF%E3%81%AB%E6%84%9F%E5%8B%95&an=%E3%82%BF%E3%83%B3%E3%83%9D%E3%83%9D&pn=%E4%B9%99%E5%A5%B3%20%E3%83%91%E3%82%B9%E3%82%BF%E3%81%AB%E6%84%9F%E5%8B%95 Key:Playlist PersistentID Value:-4413412429483844047 Key:Total Time Value:273841 Key:Genre Value:Pop Key:Album Rating Computed Value:1 Key:Album Value:乙女 パスタに感動 Key:Album Rating Value:0 Key:Like Status Value:None
10.15以降はiTunesが標準でインストールされていないが、問題なく取得できるのか
結論から言うと前述の通り可能。
10.14で動作を確認したコードをそのまま11.6が動作するマシンへ持って行ってその上でビルドしたものであるが、下記画像の通り動作している。