TheDesk icon indicating copy to clipboard operation
TheDesk copied to clipboard

macOSのiTunes NowPlayingはApple Music非対応である

Open cutls opened this issue 6 years ago • 26 comments

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

cutls avatar Jan 04 '20 05:01 cutls

Node.jsでできる is not Electronでできる なのでまぁ期待はあまりしてない

cutls avatar Jan 04 '20 05:01 cutls

このgistのコード試したけど動かんかった

いろいろしてるけどelectron-rebuildで絶対エラる

cutls avatar Jan 05 '20 14:01 cutls

僕が何かお手伝いできることはありますか?

toneji avatar Jan 10 '20 14:01 toneji

時間のある時に、commit #208を試してみて報告します。

toneji avatar Jan 12 '20 01:01 toneji

まだ全く根本的な解決はできてません ただnpexecというファイルをAppDataフォルダに作ってそこにコマンドを書いておけば、そのコマンドの返り値をNowPlayingの粗データとして使うように試しにしてみた。

Electronに内包するのはもう諦めたので

コマンドライン上でApple Musicの再生状況を返すアプリケーションがあればそれで何とかなるけどあるわけないし

cutls avatar Jan 12 '20 04:01 cutls

commit #208が適応されたmasterをmacOS Catalina 10.15.2上で、yarnでビルドしてみました。 ビルドは問題なく成功します。しかし、Apple Musicをナウプレはできません。 同時に、ミュージックアプリからのナウプレもできなくなりました。 一つ前のビルドに戻したら、ミュージックアプリからのナウプレはできるようになりました。

上のnpexecをAppDataに作る…という方法がよく分かりません。 教えてもらえれば試してみます。

toneji avatar Jan 12 '20 07:01 toneji

いろいろやったけどこりゃ無理そうだな

cutls avatar Jan 12 '20 13:01 cutls

なんかできるらしい、なんでかはしらん。 cf: https://minohdon.jp/@toneji/103587918740949111

cutls avatar Feb 02 '20 06:02 cutls

NowPlayingのアートワーク無いと投稿できん、っていうTheDesk側の問題をApple Musicのせいにしていた可能性がある つまり、「Apple MusicはAppleScriptから曲情報を取得できない」ではなく「Apple MusicはAppleScriptから曲情報を取得できるが、アートワークは無理」という話だったかもしれない。

cutls avatar Feb 02 '20 07:02 cutls

ということは、アートワークの取得は原理的に無理ということですね。でも、他のアプリを見ると、URLの取得はできるようなので、それで代用できるかもしれません。

toneji avatar Feb 02 '20 07:02 toneji

Appleに金を払えばApple Music APIが使えるのでURL取得もできるかもしれないしアルバムアートワークも取得できるかもしれないが、オープンソースでそれをやるのはちょっと無理なので…

強いてやるならSpotifyの楽曲検索APIで同一曲を引っ張り出して、アルバムアートワークはそこから、URLはsong.linkを使うという方法が…

cutls avatar Feb 02 '20 11:02 cutls

song.linkで十分だと思います。 それでアートワークも見られるし。 可能なら対応してもらえたらありがたいです。

toneji avatar Feb 07 '20 13:02 toneji

song.linkの検索をコンソールで追うと、iTunesの検索(ドメインの上では)公式のJSONPを発掘した 使っていいかは知らんが、これを使えば曲名とアーティスト名をq=したらいけるだろう

cutls avatar Mar 21 '20 04:03 cutls

一応上記APIを使って書いたのをv20.3.0として出しました

cutls avatar Apr 07 '20 09:04 cutls

設定でオンにしないとダメです
設定 -> SpotifyとNowPlayingの設定 -> アルバムアートワークが無い時補完する

cutls avatar Apr 07 '20 12:04 cutls

コメントが遅くなりました。 TheDesk 20.3.2で問題なく、Apple Musicの曲をアートワーク付きでナウプレできています。 対応ありがとうございます。

toneji avatar Apr 23 '20 13:04 toneji

いったん閉じます またいけそうな感じがすれば開けます

cutls avatar Apr 27 '20 08:04 cutls

22.0.0になってから、またApple Musicのなうプレができなくなりました。 その間にはmacOS Big Surでのアップデートもありましたし、全てがTheDeskが原因ではないかもしれません。 急いでいませんので、また時間のある時に対応していただければありがたいです。

toneji avatar Jan 10 '21 15:01 toneji

当時のリリースと比較すると、 当時: 20.3.2 現在:22.0.1 itunes-nowplaying-macの参照が変わっています。

しかしこれが原因と思い精査したところ、ここが変更されたのは、 039799083dcdc40c89e9248a105b5b384e382941 という20.3.2がリリースされてからわずか3日後のコミットなので、原因では無い可能性が高いです。

cutls avatar Jan 10 '21 16:01 cutls

@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でもビルドを完遂するための処置)ので、エラーに気付かない場合があります。

cutls avatar Jan 10 '21 16:01 cutls

早速のお返事ありがとうございます。 公式で配布されている自動ビルドのアプリで確認しましたが、やはりナウプレはできませんでした。 私のmacOSのNode.jsは14.15.1です。macOSの場合公式なインストール方法は直接インストールで、そうしないとTheDeskそのもののビルドができない状態でした。そのためバージョンを変えるのは少し時間がかかりますので、後日確認してみたいと思います。 よろしくお願いいたします。

toneji avatar Jan 11 '21 01:01 toneji

おそらく、ローカルの楽曲(macOSのストレージ上にある楽曲)はOKで、ストリーミングの楽曲(Apple Music)はダメという状況かと思いますが、正しいですか?

cutls avatar Jan 11 '21 20:01 cutls

返事が遅くなりすみません。 まさにおっしゃる通りです。

toneji avatar Jan 15 '21 14:01 toneji

突然Apple MusicからNowPlayingできなくなったのはBig Surの仕様としか言いようが無さそうだなぁ

ADP課金したので、Apple MusicをWeb経由で扱えなくもない。

  • MusicKit JSを使う (これを見る限り辛そう。2年前なので何か改善しているかもしれないが)
  • Web APIを使う 「今再生しているかどうか」が取得できないらしい。ユーザー操作によるNPなのでそれでもいいっちゃいいが、とにかくCutls Pが読んで理解できる程度のドキュメントが無さ過ぎる。

cutls avatar Jan 15 '21 15:01 cutls

コントロールセンターをハックするとかいうめちゃくちゃなやり口 スクリーンショット 2021-01-16 2 27 09

cutls avatar Jan 15 '21 17:01 cutls

上記やり方で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

cutls avatar Jan 15 '21 19:01 cutls