Volumio を pulseaudio に対応させる備忘録

Networks
Photo by hyt.

Volumio を pulseaudio に対応させる備忘録です.

なんで対応させたいの?

技術として興味があると言ってしまえばそれで終わりなので,いちおう言い訳しておきます.

Volumio って,基本的な中身は mpd (Music Player Daemon)です.そして,mpd はかなり多くの音声出力の方法をサポートしているのですが,Volumio の場合は alsa 経由の出力が使われています.

Music Player Daemon — Music Player Daemon documentation

これは Volumio の開発動機を考えると自然なです.

なんでかと言うと,Volumio は良い音を安価な音で楽しめるってのが,その開発動機ですが,良い音を鳴らすには,余計な経路や処理をなるべく加えないようにしないといけない.だからカーネルに最も近い(と言うかカーネルに含まれてしまっている)alsa を使うべきってことになるからです.

Advanced Linux Sound Architecture - Wikipedia

しかし,これは最近の Linux の開発の方向性とは微妙に合っていないようです.実際 alsa から Bluetooth 経由で音を出すことができなくなり,より抽象度の高い pulseaudio が使われるようになっています.

Bluetooth ヘッドセット - ArchWiki

これ,最初は不思議に思っていたのですが,よくよく考えてみると自然です.この辺りについては、

第177回 サウンドシステムの使いこなし | gihyo.jp
本連載ではこれまで十数回にわたり、Ubuntuでサウンドを扱う話題を紹介してきました。そこで今回は、UbuntuもといLinuxの現在のサウンドシステムに関して、MIDIも考慮しながら整理してみたいと思います。

の一番下にある図をみると分かりやすいと思います.

つまり,近年急速に広がった Bluetooth スピーカーとかヘッドセットに対応させようとすると必然的に pulseaudio に対応させるべき,って結論になります.あと,pulseaudio に対応させるとネットワーク経由で自由に音をやりとりできる.

つまり,Volumio を pulseaudio に対応させたい理由は,

これまでより多くの機器で音を出せるようになる

からな訳ですね.

mpd on Volumio は pulseaudio に対応しているのか?

では,Volumio2 の mpd が pulseaudio に対応しているのかと言うと,

残念ながらしていません.

これは ssh でログインして,次のようにすれば分かります.

$ /usr/bin/mpd --version
Music Player Daemon 0.20.18 (128d910-dirty)

Copyright (C) 2003-2007 Warren Dukes <[email protected]>
Copyright 2008-2017 Max Kellermann <[email protected]>
This is free software; see the source for copying conditions.  There is NO
warranty; not even MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Database plugins:
 simple proxy upnp

Storage plugins:
 local smbclient nfs curl

Neighbor plugins:
 smbclient upnp

Decoders plugins:
 [mad] mp3 mp2
 [mpg123] mp3
 [vorbis] ogg oga
 [oggflac] ogg oga
 [flac] flac
 [opus] opus ogg oga
 [sndfile] wav aiff aif au snd paf iff svx sf voc w64 pvf xi htk caf sd2
 [audiofile] wav au aiff aif
 [dsdiff] dff
 [dsf] dsf
 [faad] aac
 [mpcdec] mpc
 [wavpack] wv
 [modplug] 669 amf ams dbm dfm dsm far it med mdl mod mtm mt2 okt s3m stm ult umx xm
 [mikmod] amf dsm far gdm imf it med mod mtm s3m stm stx ult uni xm
 [sidplay] sid mus str prg P00
 [wildmidi] mid
 [fluidsynth] mid
 [adplug] amd d00 hsc laa rad raw sa2
 [ffmpeg] 16sv 3g2 3gp 4xm 8svx aa3 aac ac3 adx afc aif aifc aiff al alaw amr anim apc ape asf atrac au aud avi avm2 avs bap bfi c93 cak cin cmv cpk daud dct divx dts dv dvd dxa eac3 film flac flc fli fll flx flv g726 gsm gxf iss m1v m2v m2t m2ts m4a m4b m4v mad mj2 mjpeg mjpg mka mkv mlp mm mmf mov mp+ mp1 mp2 mp3 mp4 mpc mpeg mpg mpga mpp mpu mve mvi mxf nc nsv nut nuv oga ogm ogv ogx oma ogg omg opus psp pva qcp qt r3d ra ram rl2 rm rmvb roq rpl rvc shn smk snd sol son spx str swf tak tgi tgq tgv thp ts tsp tta xa xvid uv uv2 vb vid vob voc vp6 vmd wav webm wma wmv wsaud wsvga wv wve
 [gme] ay gbs gym hes kss nsf nsfe sap spc vgm vgz
 [pcm]

Filters:
 libsamplerate soxr

Tag plugins:
 id3tag

Output plugins:
 shout null fifo pipe alsa roar ao openal httpd recorder

Encoder plugins:
 null vorbis opus lame wave flac

Archive plugins:
 [bz2] bz2
 [zzip] zip
 [iso] iso

Input plugins:
 file alsa archive curl ffmpeg smbclient nfs mms cdio_paranoia

Playlist plugins:
 extm3u m3u pls xspf asx rss soundcloud flac cue embcue

Protocols:
 file:// http:// https:// mms:// mmsh:// mmst:// mmsu:// gopher:// rtp:// rtsp:// rtmp:// rtmpt:// rtmps:// smb:// nfs:// cdda:// alsa://

Other features:
 avahi epoll icu inotify ipv6 systemd tcp un

この Output plugins の欄に残念ながら pulse がありません.mpd 自体は pulseaudio に対応しているのですが,どうも Volumio2 の mpd は pulseaudio に対応するようにコンパイルされていないようです.

Music Player Daemon — Music Player Daemon documentation

したがって,pulseaudio 経由で出力させるには,mpd on Volumio2 を pulseaudio に対応するようコンパイルし直すのが正攻法でしょう.しかし,これはやりたくない.面倒だし,Volumio のアップデートにも追従しにくくなるからです.なお, pulseaudio plugin に対応している場合は,/etc/mpd.conf に,

...
audio_output {
       type			"pulse"
       name		"Local Music Player Daemon"
       server		"127.0.0.1"
}
..

のような設定をするだけのようです.server 部分を適当なアドレスに置き換えればネットワーク経由で音を転送できます.

と言うことで,コンパイルし直す以外のやり方を検討したのですが,これは ao プラグインを使うことで解決できました.

ao plugin の使い方

ao plugin というのは,libao

Xiph.org: libao: a cross platform audio library

にある通り,クロスプラットフォームで使えるオーディオ用の API のライブラリで,プログラム時ならともかく,設定で使えるようにするなんてものではないと思います.しかし,なぜか mpd on Volumio はこの plugin に対応しており,libao は pulseaudio に対応しているのが普通なので,キチンと設定すれば,

mpd → libao → pulseaudio

のようにできるはずですし,実際できます.分かりにくいのですが,libao のマニュアルとmpd のマニュアルを参照することで,以下のように mpd.conf に追加すれば良いことが分かります.

....
audio_output {
                type    "ao"
                name    "ao"
                device  "pulse"
                options "server=127.0.0.1"
}
....

もちろん server=127.0.0.1 を適当なアドレスに変更すればネットワーク経由で音を転送することができます.

結論だけ書くと,なんだ,それだけかと思う程度の内容なんですが,アッチコッチの文章を当たらないといけなかったので分かるまでにかなりの時間がかかってしまいました.

応用は?

さて,これで Volumio で pulseaudio を使えるようになりました.そして,pulseaudio を使えば,ネットワーク経由で音を転送できますし,Bluetooth スピーカーとかにも対応させやすくなります.だから,実際にこれをやってみたい,が次の目標になるのですが,かなりこの記事長くなりましたので,実際やってみた内容については別記事にしてご紹介したいと思います.

以上!

NetworksServer
スポンサーリンク
Following hyt!
タイトルとURLをコピーしました