macOSのiTunes NowPlayingはApple Music非対応である
itunes-nowplaying-macではiTunesのNowPlayingはできるがローカルなライブラリにない音楽(Apple Musicなど)は仕様上(*1の記事による)取れない。
*1の記事では、通知にSwiftからアクセスして、曲の変更時に表示する通知をウォッチして実現しているようであり、これが唯一の現実的解決手段っぽい。
(なお、Apple Developers Programに入ればApple Music APIが使えて、Recently Played APIが使えるらしいが、いけるかわからん*2 しまずADP代)
通知のウォッチはSwift以外でもできるだろうということで、探してみると*3に当たった。
この例ではSpotifyのネイティブアプリ(とかいってもElectronだが)の通知を見てNPしようとしている。com.spotify.client.PlaybackStateChanged(:26)を*1が示すようにcom.apple.iTunes.playerInfoに置換すればできそう。
任意のターゲットを指定すればいろんなソフトのNPもどきができそう(mora qualitasとか)だけど…
まぁ気が向いたらやってみます。
*1 cf: https://qiita.com/ayasuda/items/3773858e5e93ba94da48
*2 https://forums.developer.apple.com/thread/114660 とかいうIssueが建つくらいなので、できないのではと思う
*3 cf: https://gist.github.com/abhishekjairath/8bfb259c681ef52545b32c88db6336f5
Node.jsでできる is not Electronでできる なのでまぁ期待はあまりしてない
このgistのコード試したけど動かんかった
いろいろしてるけどelectron-rebuildで絶対エラる
僕が何かお手伝いできることはありますか?
時間のある時に、commit #208を試してみて報告します。
まだ全く根本的な解決はできてません ただnpexecというファイルをAppDataフォルダに作ってそこにコマンドを書いておけば、そのコマンドの返り値をNowPlayingの粗データとして使うように試しにしてみた。
Electronに内包するのはもう諦めたので
コマンドライン上でApple Musicの再生状況を返すアプリケーションがあればそれで何とかなるけどあるわけないし
commit #208が適応されたmasterをmacOS Catalina 10.15.2上で、yarnでビルドしてみました。 ビルドは問題なく成功します。しかし、Apple Musicをナウプレはできません。 同時に、ミュージックアプリからのナウプレもできなくなりました。 一つ前のビルドに戻したら、ミュージックアプリからのナウプレはできるようになりました。
上のnpexecをAppDataに作る…という方法がよく分かりません。 教えてもらえれば試してみます。
いろいろやったけどこりゃ無理そうだな
なんかできるらしい、なんでかはしらん。 cf: https://minohdon.jp/@toneji/103587918740949111
NowPlayingのアートワーク無いと投稿できん、っていうTheDesk側の問題をApple Musicのせいにしていた可能性がある つまり、「Apple MusicはAppleScriptから曲情報を取得できない」ではなく「Apple MusicはAppleScriptから曲情報を取得できるが、アートワークは無理」という話だったかもしれない。
ということは、アートワークの取得は原理的に無理ということですね。でも、他のアプリを見ると、URLの取得はできるようなので、それで代用できるかもしれません。
Appleに金を払えばApple Music APIが使えるのでURL取得もできるかもしれないしアルバムアートワークも取得できるかもしれないが、オープンソースでそれをやるのはちょっと無理なので…
強いてやるならSpotifyの楽曲検索APIで同一曲を引っ張り出して、アルバムアートワークはそこから、URLはsong.linkを使うという方法が…
song.linkで十分だと思います。 それでアートワークも見られるし。 可能なら対応してもらえたらありがたいです。
song.linkの検索をコンソールで追うと、iTunesの検索(ドメインの上では)公式のJSONPを発掘した 使っていいかは知らんが、これを使えば曲名とアーティスト名をq=したらいけるだろう
一応上記APIを使って書いたのをv20.3.0として出しました
設定でオンにしないとダメです
設定 -> SpotifyとNowPlayingの設定 -> アルバムアートワークが無い時補完する
コメントが遅くなりました。 TheDesk 20.3.2で問題なく、Apple Musicの曲をアートワーク付きでナウプレできています。 対応ありがとうございます。
いったん閉じます またいけそうな感じがすれば開けます
22.0.0になってから、またApple Musicのなうプレができなくなりました。 その間にはmacOS Big Surでのアップデートもありましたし、全てがTheDeskが原因ではないかもしれません。 急いでいませんので、また時間のある時に対応していただければありがたいです。
当時のリリースと比較すると、
当時: 20.3.2
現在:22.0.1
itunes-nowplaying-macの参照が変わっています。
しかしこれが原因と思い精査したところ、ここが変更されたのは、 039799083dcdc40c89e9248a105b5b384e382941 という20.3.2がリリースされてからわずか3日後のコミットなので、原因では無い可能性が高いです。
@toneji 今手元のmacOS環境(macOS Big Sur 11.0.1)でいろいろ試しているのですが、原因はいまだ不明です。ただ、少し手掛かりがつかめました。
まず、 https://thedesk.top で頒布されている自動ビルド版で動くかどうか確かめてください。もしこちらで動くのに自分のビルドだと動かないという場合、Node.jsのバージョンが不一致(自動ビルドでは12.17.0を使用しています)によるものかもしれません。
itunes-nowplaying-macはmacOSでしか動かないという制限上、Node.jsの問題でインストールできなくてもエラーで終了しない(optionalDependencies: 非対応なWin/Linuxでもビルドを完遂するための処置)ので、エラーに気付かない場合があります。
早速のお返事ありがとうございます。 公式で配布されている自動ビルドのアプリで確認しましたが、やはりナウプレはできませんでした。 私のmacOSのNode.jsは14.15.1です。macOSの場合公式なインストール方法は直接インストールで、そうしないとTheDeskそのもののビルドができない状態でした。そのためバージョンを変えるのは少し時間がかかりますので、後日確認してみたいと思います。 よろしくお願いいたします。
おそらく、ローカルの楽曲(macOSのストレージ上にある楽曲)はOKで、ストリーミングの楽曲(Apple Music)はダメという状況かと思いますが、正しいですか?
返事が遅くなりすみません。 まさにおっしゃる通りです。
突然Apple MusicからNowPlayingできなくなったのはBig Surの仕様としか言いようが無さそうだなぁ
ADP課金したので、Apple MusicをWeb経由で扱えなくもない。
- MusicKit JSを使う (これを見る限り辛そう。2年前なので何か改善しているかもしれないが)
- Web APIを使う 「今再生しているかどうか」が取得できないらしい。ユーザー操作によるNPなのでそれでもいいっちゃいいが、とにかくCutls Pが読んで理解できる程度のドキュメントが無さ過ぎる。
コントロールセンターをハックするとかいうめちゃくちゃなやり口

上記やり方でNowPlayingを実装したものをmasterに置いておきましたが、環境に割と依存している気がするので動くかどうかはわかりません。Big Sur 11.0.1な自環境では動きました。なお、コントロールセンターが無いBig Sur以前のmacOSには非対応です。 いろいろ制約がありますが、Apple Musicに限らずコントロールセンターに「再生中」と表示されるソースであればすべてNowPlayingの対象になります。
アルバムアートワークは取得できないので、従来通りApple Music APIを用いた補完となります。意図しないアルバムアートワークが添付される可能性もあるので注意してください。
ビルドするの辛いって人用のビルド済みdmgおいておきます https://drive.google.com/file/d/1Q-a4hLElHsM0FpLTT8AOrTL6-SdedSdK/view?usp=sharing