2 ポイント 投稿者 GN⁺ 6 일 전 | 1件のコメント | WhatsAppで共有
  • Music Decoyは実行中のプロセスとして存在し、誤って ▶ Play を押したときにシステムのMusicアプリが開かないようにするアプリ
  • バックグラウンドでは 一切何もせず、Musicアプリと同じバンドル識別子を使って、システムにMusicアプリがすでに実行中だと認識させる仕組み
  • v1.1からは mediaAppPath 設定により、▶ Play入力時にSpotifyのような別アプリを起動するよう構成可能
  • Musicアプリの自動起動は、キーボードの▶ Play入力、Bluetoothヘッドセット接続後の再生命令、通話終了後にヘッドセットが通話モードから音楽モードへ切り替わるときに発生
  • rcd は再生イベント時に現在オーディオ再生中のアプリがあればそのアプリに命令を送り、なければシステムの Musicアプリ を起動し、デーモンを無効化するとキーボードのメディア再生制御まで無効になる

Music Decoy

  • ダウンロード, ソースを見る, $brew install music-decoy インストールコマンドを提供

  • Musicアプリの起動を防ぐ

    • Music Decoyが実行中の間は、誤って ▶ Play を押してもシステムのMusicアプリは起動しない
    • アプリはバックグラウンドで一切何もせず、Musicアプリと同じバンドル識別子を持つ実行中プロセスとして存在する方式
  • 仕組み

    • バンドル識別子 com.apple.Music を使って、システムにMusicアプリがすでに起動していると判断させる構造
  • 設定

    • v1.1からは、▶ Playボタンを押したときに別のアプリを起動するようMusic Decoyを設定可能
    • Spotifyの設定例コマンド:
      defaults write com.lowtechguys.MusicDecoy mediaAppPath /Applications/Spotify.app
      
    • 設定初期化コマンド:
      defaults delete com.lowtechguys.MusicDecoy mediaAppPath
      
  • 終了方法

    • Dockアイコンとメニューバーアイコンがないため、次のいずれかで終了する必要あり
      • Activity Monitorを開き、Music Decoyを探して上部の ❌ ボタンを選択
      • Terminalで killall 'Music Decoy' を実行

自動起動の条件、原因、代替手段

  • いつMusicが勝手に起動するのか?

    • キーボードの ▶ Play キーを押し、他のアプリがオーディオを再生していないときに発生
    • Bluetoothヘッドセットが接続され、再生命令を送るときに発生
    • 通話終了によりBluetoothヘッドセットが通話モードから音楽モードへ切り替わるときに発生
  • なぜこれが起こるのか?

    • rcd は Remote Control Daemon の略で、メディアキー処理を担当するデーモン
    • 再生イベントが発生すると、rcd は現在オーディオを再生しているアプリがあるか確認する
    • オーディオ再生アプリがあればそのアプリに再生命令を送り、なければシステムのMusicアプリを起動
    • このデーモンを無効化する方法はあるが、キーボードでメディア再生を制御する機能も一緒に無効化される
  • 代替手段

    • StackExchangeの回答によると、同じ効果を得るいくつかの方法がある
    • launchctl unload -w /System/Library/LaunchAgents/com.apple.rcd.plist
      • 問題点: Playボタンを完全に無効化する
    • noTunes は起動したアプリを検知し、Musicが起動すると即座に終了させる方式
      • 問題点: バックグラウンドでごくわずかにCPUを使用するが、起動アプリの検知作業は非常に軽い

1件のコメント

 
GN⁺ 6 일 전
Hacker News のコメント
  • アプリがバックグラウンドで何もせず、Music アプリと同じ バンドル識別子 を持つ実行中プロセスとして存在しているだけで機能するという点が本当に巧妙だ
    こういうローコード/ノーコード的な解決策は、システムを非常に深く理解していないと出てこない優雅さがある。macOS で再生ボタンを押したときに正確に何が起きるのか、バンドル識別子がどう機能するのかを理解している必要があり、成果物はほとんどコードのない 1 つの「衝突」だけというのが美しい
    余談だが、こういう問題はコーディングエージェントが苦手だ。今の Codex なら、Music アプリの起動をループで監視しては終了させる大げさなアプリを作ってしまいがちだろう

    • むしろこれは、コーディングエージェントを効果的に使う良い仮想例に見える
      「Apple Music アプリの起動を止めて」と頼めば、多くの人がそうするように、監視して終了する方式に向かいがちだろう。だが「なぜ Apple Music が起動するのか調べて」と頼めば、調査結果をもとに Music と衝突する ノーコードアプリ を作るのが最善だという結論に、ユーザーはすぐたどり着けるはずだ
    • 高校生のとき、父が Apple ScreenTime でゲーム時間を制限していたのだが、ゲームの info.plistBundleIdentifiercom.apple.systempreferences に変更し、自分の開発者証明書で .app に署名して回避したことがある
      見つかるまではかなり面白かった
  • いまだに Apple が iTunes をなくしたのが信じられない
    昔はデジタル音楽ライブラリ全体を iTunes に入れていて、その大半は CD から自分でリッピングしたものだったが、iTunes で買ったアルバムや TV 番組もあった。Apple が iTunes を丸ごと捨てて Mac OS から削除し、Apple Music のようなもので置き換えたとき、もう二度と信用しないと思った
    しばらくのあいだまともな MP3 プレーヤーを探して AIMP も使ってみたが、今は AI を使って、自分向けのインターフェースを持つローカルファイルベースのプレーヤーを自作しようと思っている。ストリーミングは必要ないし、望んでもいない。iTunes でアルバムを買い続けていたかもしれないが、今は CD で買うほうがましだ

    • Apple Music では クラウドサービス を無効にしても、ローカルトラックや iTunes Music Store から入手した音楽をそのまま使える
      去年はほとんどその使い方をしていて、クラウド機能を無効にしたまま、すべてのローカル音楽を Apple Music に入れ、昔の iPod のようにケーブルで iPhone に同期していたが、今でもちゃんと動いていた
    • Music アプリは iTunes と同じライブラリを読み込むし、音楽の中核機能もほぼ同じだ。残念なのは インターフェース 側の話だろうか?
    • https://www.strawberrymusicplayer.org のような、丁寧に手作業で作られた ライブラリ管理/プレーヤー もある
    • foobar が最高だ: https://www.foobar2000.org/mac
    • 違いがよくわからない。今でも Music アプリを使っているが、名前が変わる前とまったく同じように動く
      Apple Music を契約しなくても、デジタル音楽ライブラリ全体を iTunes/Music に入れて、昔と同じように使っている
  • 内蔵ユーティリティ hidutilF3〜F9 キー を好きなキーに再マッピングして使っている
    F3/F4 はキーボードのバックライト輝度に、F5〜F9 は普通のファンクションキーに変えた。この記事には役立つ情報が多い: https://news.ycombinator.com/item?id=35555475
    M1 MacBook では hidutil property --setUserKeyMapping を使い、HIDKeyboardModifierMappingSrc / HIDKeyboardModifierMappingDst の値を指定する方式で適用している

  • 数か月前、まさにこういうものが必要だった。ライブ公演で MacBook でキーボードリグを動かし、モニタリングには 低遅延ワイヤレスヘッドホン を使っている
    ヘッドホンの送信ドングルをノート PC に挿しているのだが、ヘッドホンのボタンを押すと、ドングルが「再生/一時停止」コマンドを送り、Music が起動してデフォルト出力デバイスから音を流し始める。しかもヘッドホン送信機がデフォルト出力として選ばれているかどうかすら気にしないので、複雑なマルチデバイス構成ではまったく別のデバイスから音が出ることがある
    公演中に誤ってボタンを押し、デフォルトが P.A. システムにつながったインターフェースだったら、会場全体にランダムな曲が最大音量で鳴り響く可能性がある
    今はドングルをノート PC ではなくオーディオインターフェース側につなぐようハードウェア構成を変えたので、当面は問題ではないが、こうした誤動作を防ぐことも再構成の理由の一つだった。創作のプロ向けプレミアム機器で、こうした 設定不能な挙動 はライブ公演環境にはあまりにも不適切だ

  • Apple がこんな低級な Microsoft 的戦術を使うのを見ると悲しくなる。ユーザーを無理やり別製品へ誘導するのは ブランドの自己侵食

    • メディアセッションがないときに再生ボタンを押したら、OS に含まれる 音楽プレーヤー が開くのはなぜおかしいのか?
    • 「低級な Microsoft 的戦術」という表現には笑ってしまうが、解決策を読んで最初に思ったのは、むしろ「いかにも Apple らしいやり方だな」だった
    • Apple は Spotify を潰すことに執着している。だから Apple らしくなく、顧客に敵対的なことをしているように見える
      昔の Microsoft 対 Netscape に似た構図だ
    • こういう挙動はかなり逆効果だ。Apple Music 関連の製品は絶対に使いたくない
      どうしてこういう攻撃的な動作を無効にする簡単な方法がないのか理解できない。意図的に強制的で不快な動きにしているように見えるし、初期の段階で断ち切らなければ、後になってもっと広がり、ユーザーを締めつけることになりかねない
      Apple だけの問題ではなく、多くの製品デザイナーがこういう 傲慢な態度 を受け入れてしまっている
    • 音楽を再生しようとしたときに OS 付属の音楽プレーヤーが開くことを、「無理やり誘導されている」と見るのは難しい
  • オーディオファイルを開くと Music が自動起動するだけでなく、音楽ライブラリ に追加されるのが嫌だ
    そのあと自分で削除しつつ「ファイルを保持」を選ばなければならない

    • 昔、Music アプリがまだ iTunes だったころ、すべての音楽ファイルが QuickTime Player で開くように設定していた
      あまりに昔のことなので、デフォルトが Music アプリだということすら忘れていた。ファイルを再生したいというのは、そのファイルをライブラリに入れたいという意味ではないと思う
    • そのせいで仕事関連の音声がプレイリストに紛れ込み、何度も驚かされたことがある
    • いらいらはするが、直すのはかなり簡単だ。.mp3 のようなファイルを右クリックして情報を見るを開き、デフォルトアプリを好きなアプリに変えてから「Change all...」を押せばいい
      ファイル形式ごとに一度ずつやる必要はあるが、一度やれば終わりだ
  • AirPods を誤ってクリックすると、使ってもいないし望んでもいないアプリが突然起動するのが本当にうっとうしい

    • Apple ファンではないが、不要なアプリならなぜ削除しないのか気になる
    • 同じ問題に遭っている。上に出てくるブロッキング型のモーダルダイアログにも目立つ閉じるボタンがなくて、ダークパターン のように感じる
  • https://github.com/tombonez/noTunes を使っている

    • 昔の Mac では noTunes を使っていた。ただ、この方式はアプリの起動を検知して終了させるのではなく、そもそも起動自体を防ぐという利点がページに明記されている
      メニューバーアイコンも使わないので、限られたスペースを節約できるのも良い
  • このアプローチは本当に気に入った。賢い。ただ、個人的にはキーボードの PLAY ボタン を押したときに Apple Music が開くのは好きだ

  • 以前これを防ごうと検索したが良い結果がなく、Music アプリが開いたらまた閉じる Shortcut を作って使っていた
    実際かなりうまく動いていたが、本当に Music アプリを使いたいときには問題になった。Apple のユーザー体験としては今ひとつで腹立たしい