パスワードを忘れた? アカウント作成
14233377 journal
音楽

hixの日記: Raspberry Pi 4のCUIで音楽を聴く呪い

日記 by hix
いっこまえ

常にBluetoothで繋いで使っているのは、一連の記録に登場しているDR-BT140Qではなく、 KENWOODのCAX-NS1BT
首掛けスピーカー。
音が出る範囲の目安は、電車で使ったら音漏れってレベルじゃないので顰蹙を買う。自室なら部屋の外には音が出ない。
様々なヘッドホンに比べると、長時間の使用で疲れない。それと、呼ばれたら気づくので宅配が居留守にならない。
長時間の使用に(人間側が)耐えるが故に、電池の持ちがやや気になる。1日12時間使用で丸2日。まぁカタログスペックは満たしている。

プレーヤーは、少し前まで audacious を使っていた。
GUIなので操作のたびに、KVMでコンソールを切り替えたり、VNCで繋いだり、X Window で画面を飛ばしたりしていたのだが、 LAN上に画面描画の余計なトラフィックが出るのが気になって CUIのソフトウェアを探して、moc(Music on Console) に切り替えている。
Bluetooth周りをGUIからCUIに切り替えた際に色々とハマったのと、GUIで動かしている時も手順の確実性に難が有ったので、手順を再検証したのが前回のエントリ。

更に、mocを動かすのに追加の設定が必要だったので、こちらにまとめる。
参考にしたのはMusic on Console, ALSA, and Bluetooth on Raspbian Stretch

moc のインストールは sudo apt install moc moc-ffmpeg-plugin
moc-ffmpeg-pluginをインストールしないと、再生できるファイル形式がかなり制限されてしまうので注意。 わたくしはそれに気づかなくて、おびただしい数のファイルを無駄に変換した。

起動する前に幾つかの設定が必要となる。
まずはデバイス側。
~/.asoundrc または /etc/asound.conf に下記3行を追加。

defaults.bluealsa.interface "hci0"
defaults.bluealsa.device "デバイスアドレス"
defaults.bluealsa.profile "a2dp"

前回と今回のエントリの中で最もハマった所。
既存のファイルとは書式が異なるものだから、 バージョンの新旧かと思って新バージョンでの書き方を探したのだが、 そんな物はこの世に存在しない。
疑いや迷いを捨てて、気合でこの3行を追記だ。
interface に指定する「hci0」は大概この値なのだが、これが何かは良く解らない。syslog に bluetoothd の出力として下記のような物が出ている。

/org/bluez/hci0/dev_デバイスアドレス(-区切り)/fd2 fd(22) ready

続いて、 mocp --sound-driver=alsa -O ALSADevice=bluealsa -O ALSAMixer1='DR-BT140Q - A2DP' とするとmocが起動する。
-O ALSAMixer1 に指定するのは amixer -D bluealsa scontrolsで出力された Simple mixer controlの内容。
画面左側がホームディレクトリの内容、右側がプレイリストという水色の画面が出るだろうか?

Warning: Your system may be vulnerable to stuttering audio.
         You should read the example configuration file comments
         for the 'ALSAStutterDefeat' option and set it accordingly.
         Setting the option will remove this warning.

上記警告が出て気になるようであれば、 mocp --sound-driver=alsa -O ALSADevice=bluealsa -O ALSAStutterDefeat=no -O ALSAMixer1='DR-BT140Q - A2DP' とする。

mocは、本体はバックグラウンドで動作し目の前に見えているのはそれとは別のフロントエンドという構成になっていて、フロントエンドを終了させても本体は動作し続けている。
色々と試す中で、これを忘れると、引数の変化が動作の変化に反映しない事態になるので注意。
フロントエンドの画面で[Q]を押して終了すると本体も終了する。小文字の[q]だとフロントエンドのみの終了だ。
この操作では動きに違いが見えないので mocp -x としたほうがより解りやすい。

FATAL_ERROR: The server is not running!

と出たら裏で起動している moc は居ない。

うまく行かない場合の情報把握には、 引数に「-D」を付けてデバッグ情報を出力するか、或は「-SF」を付けて本体をフロントエンドで動かす方法が有る。
より解りやすいのは「-SF」のほう。
前述の、~/.asoundrc または /etc/asound.conf への設定が正しくない状態だと、

ALSA said: Unable to find definition 'defaults.bluealsa.device'
ALSA said: function snd_func_refer returned error: そのようなファイルやディレクトリはありません

という内容が出る。

mocp を起動するのに、毎回ごちゃごちゃと引数を指定しなければいけないのもかったるいので、設定フィアルを作成する。
cp -iv /usr/share/doc/moc/examples/config.example ~/.moc/config
初期状態は、全てコメントになっている。
これを参考にしながら、まずは引数で指定した内容を反映させる感じで変更を加える。抜粋すると下記。

SoundDriver = ALSA
ALSADevice = bluealsa
ALSAMixer1 = "DR-BT140Q - A2DP"
ALSAStutterDefeat = no

設定ファイル内のクォテーションは「"」なので注意。「'」は駄目。

.

typodupeerror

吾輩はリファレンスである。名前はまだ無い -- perlの中の人

読み込み中...