iTunesアートワークを取得したい

Github Copilotでアルバム画像の設定ツールをVive codingした

まとめ iTunes(「ミュージック」アプリ)の「アートワークを取得」で設定したアルバム画像は独自のデータベースで管理されていて音楽ファイル自体のタグとしては埋め込まれていない。このため音楽サーバなどに転送して別のVLC等の別のアプリで表示するとアルバム画像が認識されない(埋め込まれていないので当然)。 ミュージックアプリのライブラリでは、音楽ファイルはパスやその他の情報とともにMusic Libraryの中(xmlファイルで出力できる)のPERSISTENT IDというフィールドで一意に管理される。PERSISTENT IDは64ビット符号付き整数(NSNumber)のようだが、xmlに出力された際は16進数でエンコードされている。 肝心のアートワークの場所は ~/Library/Containers/com.apple.AMPArtworkAgent/Data/Documents/ のsqliteデータベースに保存されていて、そこからアルバム画像ファイル名の先頭hash値が検索可能である。※ちなみにhash文字列の後ろにあるsuffixのルールはよくわからなかったが、複数設定したときの何かなのだろう、きっと。 なお、「アートワークを取得」で自動で設定したアートワークでなく自分でダウンロードした画像ファイルを手動で設定した場合には音楽ファイルへの埋め込みとして(も?)処理されるようだった。 以上から、以下のようなアプリを作成した①ライブラリの情報から音楽ファイルのパスとPERSISTENT IDを取得②PERSISTENT IDからアートワークファイルのパスを検索③②を①に埋め込みアートワークとして設定④もしすでに埋め込まれていれば何もしない(オプションで強制上書きは可能) と、ここまでは調べて決めたのであとはきっとGithub Copilot氏が作ってくれるだろ…ということで今までやってなかったがVibe Codingをいうものを試してみむとするなりしてみました。 できたもの Githubで公開してみました。READMEも含めて基本的に全てGithub Copilotが生成した。https://github.com/hkurosawa/iTunesArtworkFetcher

16進数のPERSISTENT_IDをNSNumber相当の整数型に変換するPythonスクリプト

ミュージックアプリ(iTunes)のライブラリ書き出しで出力したxmlファイルにあるPERSISTENT_IDは16進数に変換されていて、sqliteの中に保存されているPERSISTENT_IDと対応させるには変換することが必要。 調べるとPERSISTENT_IDはNSNumber型で、どうもNSNumber=int64で変換すれば良いらしい

iTunesで自動取得したアートワークを取り出したい

やりたいこと iTunes(ミュージックアプリ)で「アートワークを取得」した音楽ファイルは、外部のサービスに持っていくとアートワークが設定されていないことがある。これはミュージックアプリが独自の形式でアートワークを管理しているからで、mp3のファイル自体に埋め込むようにしたい。 外部からダウンロードした画像をアートワークに設定した場合にはmp3のタグとして設定される仕様のようなので、すでに自動取得されているアートワークはとりあえずたとえば「アルバム名.jpg」のような形で保存したい。(とりあえず判別がつけばなんでも良い) アートワーク情報の保存場所 アートワークの情報は下記のパスにある~/Library/Containers/com.apple.AMPArtworkAgent/Data/Documents 上記の中に、・画像ファイル自体のフォルダ:artwork/がある。 ただしartwork/配下にはjpgファイルが直接置かれているが、ファイル名がhashっぽいものになっているので直接判別はできなそう。ここの対応付の解読がポイントになりそう。 その他、・データベースっぽいもの:artworkd.sqliteがこのフォルダにはあるので、このあたりに画像ファイルの情報が入っていると推測する。 その他元になりそうな情報としては、ミュージックアプリから「ファイル>ライブラリ>ライブラリを書き出し…」したxmlファイルが使えそう。※どうもswiftのフレームワークでライブラリファイルを直接読むこともできそうだがいったん書き出したxmlファイルで良しとする。 なんとなく上記の情報から取り出しはできそうな気がしてきた(続く)