有馬総一郎のブログ

(彼氏の事情)

2021年07月17日 16:02:07 JST - 5 minute read - Comments - Audio Player

アーティスト画像を取得・保存したい part 1 (Last.fm、MusicBrainzのAPIでは難しい)

最近、というか、大分前からかアルバム画像だけでなく、アーティスト画像を表示する音楽プレイヤーとかが増えてきた。

foobar2000でのアーティスト画像の管理

foobar2000でアーティストの画像を表示・管理するにはどうしたら良いのか?調べてみた。

I want to add an Artist Picture for all my artists, but I don’t know an easy way, and this way doesn’t seem to work… : foobar2000

を見ると Preference -> Display -> Album art -> Artistにどのパスに配置された何という名前の画像ファイルが、アーティスト画像と処理されるかの設定となっている。

通常では 選択、もしくは再生中の曲ファイル の同フォルダ内のartist.jpgがアーティスト画像となる。

E:\My Music\氷室京介\ダイヤモンド・ダスト>dir /b
01_ダイヤモンド・ダスト.flac
02_Silent Blue.flac
03_ダイヤモンド・ダスト Instrumental.flac
artist.jpg
folder.jpg

ただ、これだとアーティスト画像をアルバム毎に何枚も格納する必要があるので、C:\My Music\[%album artist%]\artist.jpgとすることで、管理しやすくなる。

E:\My Music\氷室京介>dir /b
''B''ORDERLESS
''NEO FASCIO'' TOUR
20th Anniversary ALL SINGLES COMPLETE BEST JUST MOVIN'ON~ALL THE-S-HIT~ Disc 1
・・・中略・・・
artist.jpg
foobar2000 Artist Art
foobar2000 Artist Art

肝心の画像を取得するにはどうしたらよいかだろうか…

以下、タイトルどおりにLast.fm、MusicBrainzからアーティスト画像を取得・保存することは難しい という今更の結果なので読むだけ無駄。 次回へ

art.exe

コンポーネント一覧/External program - foobar2000 Wiki*を見ると、アーティスト画像を一気に取得できるツール、 art.exeartGui.exeについての記述がある。

が…2010年に開発されたソフトということもあって、エラーとなって動かない。

images:5 images
リモート サーバーがエラーを返しました: (403) 使用不可能
artistart

foo_uie_biography

ならばと、バイオグラフィーを表示、取得する foo_uie_biography というコンポーネントを使ってみる。

アーティストのバイオグラフィー(プロフィール)や画像、アルバムのカバー画像をダウンロード・表示するパネル。
表示するデータは、タグの%artist%や%album%を参照してインターネットを通じてLast.fmから取得します。
foobar2000 CoreのArtwrok Reader経由でローカルHDDにある画像を優先して表示することが可能です。

User interface/UI extension - foobar2000 Wiki

表示機能そのものは使えるが、やはり肝心のLast.fmからデータ取得が上手く行かない。

foo_uie_biography
実験的コンポーネントなのでリスクが伴う

Last.fm API

本丸のLast.fmのAPI使ってみようとしたが…

例:1

curl -X GET "http://ws.audioscrobbler.com/2.0/?method=album.getinfo&api_key=abcdefghijklmnopqrstuvwxyz123456&artist=Cher&album=Believe&format=json"

APIを使うためにはユーザー登録が必要なのだが、そこまで頑張ったとしても、 どこぞの違○アップロード画像を収集してるだけの癖して 画像のダウンロードをブロックしているらしく、白い星の画像しか帰さないらしい。

Last.fm API returns same “white star” image for all artists

MusicBrainz API

じゃあ MusicBrainzから取得すれば良いじゃない、ということで調べると、APIを使うのにユーザー登録も不要。しかも懇切丁寧。

curl -X GET --header 'Accept:application/json' https://musicbrainz.org/ws/2/release/76df3287-6cda-33eb-8e9a-044b5e15ffdd

ただ、こちらWindows版のcurlを使うと?Accept:application/jsonが機能しなくて、XML形式で帰ってくる。Accept: application/jsonと空白を空けるとcurl: (6) Could not resolve host: applicationとエラーを吐く。

curl — curl:(6)ホストを解決できませんでした:アプリケーション

fmt=jsonを付けることでJSON形式で取得することは出来る。

curl -X GET "https://musicbrainz.org/ws/2/release/76df3287-6cda-33eb-8e9a-044b5e15ffdd?fmt=json"

ちなみにPowerShellを使うと、curlは、Invoke-WebRequestの別名となっているために、curl.exeとする必要がある。

curl.exe -X GET "https://musicbrainz.org/ws/2/artist/?query=ac%5C%2Fdc&fmt=json"

で、まんま私と同じことを考えた方が 6 年前にいらっしゃって、どうにかアーティスト画像を Cover Art Archive / API - MusicBrainzから取得できないか?と質問してて、回答としては、結局無理で、関連URL(url-rels)から、つまり別サイトから取るしかない、としている。

web services - Musicbrainz artist image and information - Stack Overflow

つまり

  1. curl -X GET "http://musicbrainz.org/ws/2/artist/?query=artist:michael%20jackson&fmt=json" | jq2
{
  "created": "2021-07-22T15:04:19.521Z",
  "count": 9868,
  "offset": 0,
  "artists": [
    {
      "id": "f27ec8db-af05-4f36-916e-3d57f91ecf5e",
      ・・・後略・・・

artistidを取得して、

  1. curl -X GET "http://musicbrainz.org/ws/2/artist/f27ec8db-af05-4f36-916e-3d57f91ecf5e?inc=url-rels&fmt=json"を投げる。
・・・前略・・・
  "relations": [
    {
      "begin": null,
      "target-type": "url",
      "ended": false,
      "type": "allmusic",
      "source-credit": "",
      "url": {
        "resource": "https://www.allmusic.com/artist/mn0000467203",
・・・後略・・・
      "type-id": "221132e9-e30e-43f2-a741-15afc4c5fa7c",
      "url": {
        "id": "4cac77c7-348e-4618-b550-4cc735cab638",
        "resource": "https://commons.wikimedia.org/wiki/File:Michael_Jackson_in_1988.jpg"
      },
      "ended": false,
      "type": "image",

という結果が帰ってくるから、それで何とかしろ、ということ。回答にもあるとおり、今においても Wikimedia Commonsにアップされてる画像ぐらいしか辿れない。

curl -X GET "http://musicbrainz.org/ws/2/artist/f27ec8db-af05-4f36-916e-3d57f91ecf5e?inc=release-rels&fmt=json"と、リリース(release)から辿れば良いんじゃない?と思ったが、はたと気が付いた。Musicbrainzでもリリース作品毎のカヴァー画像という形でしか表示してなくて、アーティスト画像としては置いてないんだよなぁ。

凄い時間をかけた割に徒労に終わった。 次回に続く。


  1. 低レベルな話すると、クエリパラメーターが一つしかない場合はともかく、複数あって&が付く場合、cmdPowerShell、他のシェルでも特殊な意味を持つので、URLをコーテーションで括るべき。 ↩︎

  2. JSON加工・整形コマンド jq。Windows版もある。 ↩︎