2020年6月21日日曜日

NanoPi NEOにMPD

モチベーション/2020年6月21日

 その昔、3.5"サイズのx86ボードにmpd(music player daemon)を載せて音楽サーバーやらせてたんですが、HDDがお亡くなりになって以後、代替を用意することなく、だったのですが、それをNanoPi NEOで再現してみようと思います。

最近のNanoPi NEOには、CVBS(NTSC)出力も追加されているようですが、アナログオーディオインターフェースも、2.0mmピッチのスルーホール5pinで用意されています。
最初、これを使うために、PCで見るようなコネクタを搭載しようと用意したんですが、狭い、UART0とUSBポートの隙間で、干渉してしまうため、直接半田付けしてライン出力を引出しました。元々ランドがあんまり大きくないんですが、加えてGNDポートはサーマルランドになってないのか、なかなかはんだがうまくのってくれなかったんですがそれはさておき。

しかしこのライン出力は、NanoPi NEO回路図を見ると、H3端子が直接ACカップリングされているだけです。これじゃ多分、パワー足んないよね、とはおもいつつ、とにかく、PC用の、アンプ内蔵スピーカーをつないで、音を出してみることにします。

NanoPi NEOのオーディオ

 FriendlyARMのWikiにもかかれていますが、確認するもっとも簡単な方法は、alsa-utilsを使ってaplay -lかと思います。確認してみると:
user@nanopineo:~# aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: Codec [H3 Audio Codec], device 0: CDC PCM Codec-0 []
  Subdevices: 1/1
  Subdevice #0: subdevice #0
user@nanopineo:~#
となってます。

MPDと設定

 MPDはごく普通に、aptでインストールしてやります。設定も、あちこちに先人がおられるし、特に難しいことは不要なはずです。ただ、うちでは、ファイルサーバーにまとめて音楽データも置いてあるので、それをautofsを使ってマウントするようにしてやり、それを参照します。
/etc/mpd.confには、aplay -lで確認した結果を反映してやります。

audio_output {
        type            "alsa"
        name            "My ALSA Device"
        device          "hw:Codec,0"
        mixer_type      "software"
}

動作確認

 MPDのクライアントアプリケーションとしてmpcというCUIアプリがありますが、それだけではなくスマホからも接続してみます。
MPDを動かすNanoPi NEO以外の、スマホを含む端末からアクセスしたいので、mpd.confのbind_to_addressは、個別のアドレスが判っていない場合anyとするようです。ネットワークアドレス使えないのか試してみましたが、エラーになってしまいます。何か方法あるんでしょうか…。
で、rock64からアクセスしてやると:
foo@rock64 >> mpc
volume:100%   repeat: off   random: off   single: off   consume: off
foo@rock64 >>
おーOK。なので、updateコマンド入れて、データベース(音楽リスト)を更新してやります。

次、スマホ。Android向けにもiPhone用にもいくつかクライアントがあるようですが、Android向けにMPDroidを試しました。これはAndroid10よりも前のバージョンまでの対応のようですが、動いてくれているので、試験用途としてはOKかと思います。
で、さっきmpc側でupdateしたので、MPDroidでつないでやると(サーバーアドレスを設定してやります)、サーバー上にある音楽データのリストを取れます。MPDroidでもサーバーデータはアップデートできます。
リストから適当に選んで再生してやると、NanoPi NEOにつないだスピーカーから音が出ます…、が…、案の定ゲインが全く足らねー…(泣)。ボリューム最大で、スピーカーに耳近づけてヘッドホンで聞いてるようなレベルです。こりゃちゃんとプリアンプ入れてやんなきゃダメだぁ〜。


がまぁ、なんにせよちゃんと動いてくれてますんで、アンプ用意したら運用に入りたいと思います。
あとは、サーバーに音楽データをアップロードするところを用意して、子供らでも使えるようにすれば完成、ですかね…。

アンプ/2020年8月9日

 8/1に何やらChina Postから配達されてきたものが。はて?まさか、はやりの「種」…?
出てきたのは…、そうそう、こないだAmazonでオーダーしたアンプだ!
案内があったのは月末〜9月頭だったので、ほぼ4週間も早く届いたことになります。サイズイメージのために、となりにCR2032をおいてみました。
アンプをAmazonで探してみると、出力段アンプはいろいろ見つかるんだけど電源が大抵12Vだったりして、あんまり考えずにこういうところで使える、5V以下のものって意外と球数がなく、ヘッドホンアンプから選んでみました。で、こいつをNanoPi NEOのオーディオ出力につないで音を出してみると…

あれ?カラオケ?

つまり、左右どちらかが逆相になっている?いやいや…。んー、それにこのハム音は…

まずハム音。NanoPi NEOコンソールとして使っているUSB-UARTが、どうやら接続先からもらってきているらしいので、それは最終的にはなくなる、と。
PC用のアンプ内蔵スピーカーでテストしていて、こいつがUSB端子から内蔵アンプ用の電源を得るタイプのものでそれもちょっと原因ぽく、NanoPi NEO自身のUSBポートにしてみると、ACアダプタがたまたまあまりノイズを吐かないのか、調子良さげ。
そうなると、USBポートを取られてしまうので、USB Wi-Fiでネットにぶら下げていたものを一旦有線にしないとならず…しかし、まずは…

NanoPi NEOを有線にして、も一度試すと…あら不思議。ちゃんと鳴るじゃん!
USB Wi-Fiに戻すとカラオケに。んー。どうやらUSBの使い方に影響を受けるようです。
多分、チップレベルでの設定に関係してるんだろな。

となると、最終型は、有線LANで使うか、あるいは、I2SにDAC持ってくる形にしないとならんのかな…。まぁ、とりあえずは有線でちゃんと動くようだし、箱を何とかしましょうかね!