macOSでMPDをlaunchdから起動するときはProcessTypeをInteractiveにする
久しぶりにMusic Player Daemon (以下MPD)を設定したところ、あまりにも音がブツブツ途切れるので原因を調査したメモです。
原因
launchdによるI/O帯域制限。
macOSでは、デーモンがリソースを食い潰してしまわないよう、launchdが自動でCPU使用量やI/Oの帯域を制限します。
通常は問題ないのですが、MPDのFIFO出力を有効にしていると、I/Oの帯域制限に引っ掛かって出力が詰まってしまい、それに合わせるために通常の出力も中断され、結果として音がブツブツ途切れることになります。
ProcessType
をInteractive
に設定することで、帯域制限を解除し、正常に出力させることができるようです。
対処
launchdの.plist
ファイルに以下を追加します。なお、HomebrewからMPDをインストールし、brew services
コマンドを利用し設定している場合、既に対策されているようなので必要ありません。
<key>ProcessType</key>
<string>Interactive</string>
nix-darwinを使用している場合はserviceConfig
に以下を追加します。
ProcessType = "Interactive";
もしくは、ビジュアライザなどを使用しなくてよいのであれば、FIFO出力を完全に無効化してしまう方が早いです。