sound

music player daemon

pyspa Advent Calendar 2022 9日目です。8日目は分散処理に詳しいオタク kumagi でした。 去年のエントリでswayをコンポジターにしてwayland生活をするようにしたわけだが、軽量なデスクトップにしていくのでも音楽を聴く余裕は欲しいものである。 mpd (Music Player Daemon) は名前の通りデーモンで動くミュージックプレイヤーである。もちろんヘッドレスでGUIどころかクライアントは別途選ぶもので、軽量デスクトップ野郎どもの友と言えるミュージックプレイヤーだ。 Linuxで音楽を聴く ところでLinuxで音楽を快適に聴くにはある程度仕組みを知っていないと設定がおぼつかない。一応mpdを設定する上で調べてみたところを書いておく alsa, pulseaudio,pipewire まずはdacなりHDMIなりのデジタルオーディオデバイスを操作する部分が必要だが、これはALSA(Advanced Linux Sound Architecture) というカーネルコンポーネントの仕組みとなっている。とりあえずALSAが設定されてないとそもそも音を出せないが、まあ最近のディストロはデバイスを認識して設定してくれるのでそれほど問題ないだろう。ここでつまずいた場合はなんかがんばってください。そしてアプリケーションがどう音を出すかだが、直接alsa APIを扱うアプリケーションもあるがデスクトップ環境ではソフトウェアミキサーがあって多くのアプリケーションはそこを経由して効果音や音楽など音を出す。過去にはGNOMEがesound、KDEがartsだったが、どちらもpulseaudioに移行した。 pulseaudioは音質が抑えめでjackという高音質な代替もある。さらにpulseaudioからpipewireに移行しつつある。色々あるがwaylandでは画面共有などの都合もあるのでpipewireを使うのが普通な気がする。 pipewireとwireplumber, spa ということでwaylandにした環境でさらにpulseaudioを捨ててpipewireに移行。 debianを使っているので PireWire - Debian Wiki を参考にpipewireやspa(pipewireのプラグインみたいなやつ?)をインストールしてpulseaudioのインターフェイスも動くようにした。 mpdのインストールと設定 mpdをインストールしてサービス起動を設定 さて、本題のmpdである。aptで入れたので、他のディストロ使っている人やソースから入れる人は Download the Music Player Daemon のページなどを参照のこと。 mpdはデーモンなのでsystemdのservice unitで管理したい。 debianでインストールするとsystemd service unitの定義も一緒に入ってるのでこれを利用する。デフォルトでsystem sessionで起動するようになっているが、音楽ファイルのディレクトリはユーザー以下にしたいのでuser sessionのサービスとして扱いたい。 さらにservice unitだけでなくsocket activationも用意されているのでこれらをuser sessionで有効にする。 socket activateは直接サービス起動するのではなくポートへのアクセスで初めて本体が起動するやつ。まあどうせすぐ使うからログインしたらすぐ起動しちゃってもいいんだけど。 $ sudo systemctl --now disable mpd.socket $ systemctl --now --user enable mpd.socket mpdの設定 システム的なmpd自体の設定は /etc/mpd.conf にあるが、ディレクトリの指定やoutputなどだいたい変更するのであんまり気にしない。ユーザーとして実行する場合の設定ファイルはXDGを尊重して /.