ラズパイ4BとMPD

2024年6月30日 追記
2024年6月3日 追記
2024年5月2日 追記
2024年1月23日 記

はじめに

ラズパイ4Bと MPD でミュージックプレイヤーを構成しました。 USB-DACとは異なり、 LAN接続になりますのでUSBケーブル接続による音質の劣化はありません。 また、MPDに対応するクライアント(コントローラー)をインストールすればパソコンの他、スマホからでもコントロール可能です。 音質・価格共に文句の付けようがありません。 私的には【素晴らしい】の一言です。 ただし構成するのにそれなりの知識と時間が必要になりますので、 万人向けとはいえないところが少し残念なところかもしれません。

なお、本ページを読んで【実際にやってみよう!】という方はあくまで【自己責任】でお願いします。 私は一切の責任を負いません(負えません)のでよろしくお願い致します。

2024/5/2日、以前から気になっていた「たまに音が途切れる」症状が改善したため、その設定値(mpd.conf)を公開する目的で追記しました。 その他、変更したところとか気になったところとかも少し追加・修正しています。

2024/6/3日、ひょんなことからクライアントから音量調節しても「音質」が劣化しない方法が見つかったので記しておきます。 追加・修正したファイルは mpd.conf(2024-06-03)asound.conf(2024-06-03) の2つです(クリックなどで、が使用しているファイルがダウンロードできます)。

1.asound.confに以下の変更(追加)を行いました。
/etc/asound.conf の先頭に下記を追加しました。
# 2024/6/3 add start
defaults.pcm.rate_converter "samplerate_best"
# 2024/6/3 add end

2.mpd.confに以下の変更を行いました。
mixet_type を "none" から "software" に変更しました。
audio_output {
   ・・・
    mixer_type "software"
#6/3  mixer_type "none" # "hardware"
   ・・・
}

3.下記コマンドを実行して(不足していた)ものを追加しました。
sudo apt install libsamplerate-dev
sudo apt install alsa-utils libasound2-plugins
sudo apt install libasound2-dev
sudo reboot

以上でcantata(私が使用しているmpdクライアント)からボリューム変更しても音質の劣化が無くなりました!
(2024/06/03 追記)








目次

(1)ハードウェア構成
(2)サウンドカード
(3)config.txt設定
(4)MPDインストール
   ⇒ ホスト名設定
   ⇒ sambaインストール
   ⇒ MPDとalsaイコライザー等をインストール
(5)イコライザー設定
(6)最後に







(1)ハードウェア構成

下の画像がミュージックプレイヤーとして使用しているラズパイの画像です。 3階建てで1番下がラズパイ、真ん中がサウンドカード、一番上がSSDです。 それと左上の方に少しだけ【白いの】が写っているのが分かるかと思いますが、これは冷却用のUSBファンです。 少し大き目ですが、回転数を抑えているので音は気にならない程度です。

rpi4b.png

SoC
ラズベリーパイ4B (4GB)

サウンドカード
オーディオカード Acouto I2SインターフェイスPiFi DIGI DAC + HIFI DIGIデジタルサウンドカード 3 Model B / 2B / Bに対応

SSD
256GB

冷却用ファン
おそらく電源入れっぱなしになるのではないかと思いますので、 24時間回せるやつ(耐久性があるやつ)がいいと思います。


私がここで用いたのはラズベリーパイ4Bですが、 もしラズベリーパイ5を入手可能であれば、そっちの方がより高音質を得られると思います (実際にやってみました。ただしconfig.txtとイコライザーの設定が4Bとは異なるところがあります。ご注意ください。)

サウンドカードは上記のような名前のものをAmazonで入手しました。値段は(購入時)3千円足らずくらいでした。

SSDはPI OS起動用(マイクロSDカードは耐久性に難ありのようなので)と音楽ファイル保存用として用意したものです。 他にNAS等があって利用できるような状態であれば特に必要ありません。

その他、電源やケーブルなど、必要なものをご用意ください。

出力は3.5mmジャックソケットから【できるだけ短めのケーブルで】Bluetooth送信機(aptX HD)に接続しています。 受信側は【できるだけ小型の】Bluetooth受信機(aptX HD)で受信して、有線でヘッドフォン(今現在はBose NC700を愛用しています)に接続しています。

ちなみにaptX HDの仕様は48kHz/24bit(576 kbps)ということらしいです。 実際に使用してみての私の感想は、【有線で接続しているのとを比較して、遜色ありません※1】です。

※1 Bluetooth接続で聞き慣れてきたころに有線接続で聞いてみたところ、有線接続の方がずっとよかったです。 そんなわけで、それ以降はずっと有線接続で聞いています。(2024/5/2 追記)



あらかじめご注意させて頂きますが、電源(AC、USBの両方とも)の取り方(どこに接続するか)で ノイズが乗ったりすることがありますので、ノイズを拾っているようなときは異なるところから取るようにしましょう。 別の電源ラインへ接続を変えるだけでノイズが抑えられることは多々あります。


使用するラズパイ4BのOSのバージョン等の情報を掲載しておきます。
 $ cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux 12 (bookworm)"
NAME="Debian GNU/Linux"
VERSION_ID="12"
VERSION="12 (bookworm)"
VERSION_CODENAME=bookworm
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"




目次へ




(2)サウンドカード

サウンドカードはAmazonで比較的安く売っていたものをチョイスしてみました。 どの程度の音が出るのか分からなかったので【とりあえずお試し】みたいな感じで購入したのですが、 実際に出力される音を聞いて正直驚きました。 すごく高音質で(手持ちの)何万円程度のDACよりずっとよい音だったからです。 サウンドカードはもっと値段の高いものがありますが【どんな音が出るんだろう】とすごく興味があります。 ですが、今のところ財布の中身の都合で購入できません。 そのうち購入できるようになったら購入して試してみようと思います。

ちなみに、このサウンドカードは 【 HiFiBerry DAC+】と認識されます。 下記は【aplay -l】コマンドを実行したときの、サウンドカードのものです。

sndrpihifiberry [snd_rpi_hifiberry_dacplus], デバイス 0: HiFiBerry DAC+ HiFi pcm512x-hifi-0 [HiFiBerry DAC+ HiFi pcm512x-hifi-0]




目次へ




(3)config.txt設定

まずラズパイ4Bにサウンドカードを認識させて使える状態にしなければなりません。 で、最初にやることはconfig.txtの設定です。 config.txtはラズパイの動作の設定をするファイルです。 どのデバイスを有効にするとか、どんな感じに使うのかとかの設定をするファイルです。

config.txt は /boot ディレクトリで見えるようになっています(実体は /boot/firmware ディレクトリにあります)。 私が実際に使用している config.txt は こちらです。 オーバークロックとかもしていますので、よろしければご参考にして下さい。

なお、ラズパイ5にサウンドカードを乗せたときに設定していた config.txt もダウンロードできるように乗せておきます。 よろしければご参考にして下さい。ラズパイ5用はこちら(config_pi5.txt)です。

config.txt (ラズパイ4B用)

# /boot/config.txt

# For more options and information see
# http://rptl.io/configtxt
# Some settings may impact device functionality. See link above for details

# Uncomment some or all of these to enable the optional hardware interfaces
dtparam=i2c_arm=on
#dtparam=i2s=on
#dtparam=spi=on

# Enable audio (loads snd_bcm2835)
dtparam=audio=on

# Additional overlays and parameters are documented
# /boot/firmware/overlays/README

# Automatically load overlays for detected cameras
camera_auto_detect=1

# Automatically load overlays for detected DSI displays
display_auto_detect=1

# Automatically load initramfs files, if found
auto_initramfs=1

# Enable DRM VC4 V3D driver
dtoverlay=vc4-kms-v3d
max_framebuffers=1

# Don't have the firmware create an initial video= setting in cmdline.txt.
# Use the kernel's default instead.
disable_fw_kms_setup=1

# Run in 64-bit mode
arm_64bit=1

# Disable compensation for displays with overscan
disable_overscan=1

# Run as fast as firmware / board allows
arm_boost=1

# Uncomment this to enable infrared communication.
dtoverlay=hifiberry-dacplus


[cm4]
# Enable host mode on the 2711 built-in XHCI USB controller.
# This line should be removed if the legacy DWC2 controller is required
# (e.g. for USB device mode) or if USB support is not required.
otg_mode=1

[all]
enable_uart=0

# hdmi設定
hdmi_force_hotplug=1	# 強制的にHDMI出力にする!


肝となるのは下記の2行の部分です。 i2cで制御していますので有効にする必要があります。 それと hifiberry-dacplus(サウンドカード)を有効(?)にしています。

dtparam=i2c_arm=on
dtoverlay=hifiberry-dacplus





目次へ




(4)MPDインストール

MPDをインストールしますが、その前にLANを用いてファイルをやりとりできるようにしておくと便利です。 そんなわけで ホスト名の設定と samba をインストールします。 sambaをインストールすると windows や mac からラズパイにアクセスできるようになります。


ホスト名設定

【ホスト名】とはwindowsだと【コンピューター名】とか【PCの名前】とかになっていると思います。 LANで接続されているコンピューターからこのコンピューター(今回はラズパイ4B)を認識するための名前です。 ここではホスト名を【raspi4b】として話を進めます。それとユーザー名(PI OSのログイン名)を【UserName】として話を進めます。 以降、使用するエディタは vi として話を進めますが、nano とかに置き換えてももちろん問題ありません。 それとコマンドの最後に記述してあります"[Enter]"は「Enterキーを押す」の意味です

ホスト名の設定の仕方ですが、 PI OSでGUIを利用している場合には、メニューより【設定】⇒【Raspberry Pi の設定】を選択して【Raspberry Pi の設定】ダイアログを開きます。 【システム】タブに【ホスト名の変更】というボタンがありますので、それを押して【ホスト名】を設定してください。

CUIの場合には、下記のように /etc/hosts ファイルと、/etc/hostname ファイルを編集することで設定することができます。

/etc/hosts を編集するためにviを起動します。 【sudo】はスーパーユーザー権限で実行することを指定しています。 普通のユーザーモードでは /etc ディレクトリのファイルを編集することができないからです。

sudo vi /etc/hosts [Enter]


hosts ファイルを開くと下記のような感じになっているのでは?と思いますが、 環境によって少し異なるところがあるかもしれません。

127.0.0.1       localhost
::1             localhost ip6-localhost ip6-loopback
ff02::1         ip6-allnodes
ff02::2         ip6-allrouters


先頭行の【localhost】の後に半角スペース(またはタブ)を1つ以上置いてホスト名【raspi4b】を記述してください。 ホスト名を記述して保存すると直ちにホスト名が書き換えられます(適用されます)。

127.0.0.1       localhost raspi4b
::1             localhost ip6-localhost ip6-loopback
ff02::1         ip6-allnodes
ff02::2         ip6-allrouters


同様な感じで /etc/hostname ファイルも編集します。

sudo vi /etc/hostname [Enter]


過去に「ホスト名」を設定したことが無いような状態であれば、 新規ファイル編集になると思います。 下記のように「ホスト名」を記述して保存します。

raspi4b


sambaインストール

sudo apt install samba [Enter]


sambaにパスワードを設定します。
(UserNameはPI OSの【ログイン名】でOKです。 コマンドを実行するとパスワードを聞かれますので入力してください。)

sudo smbpasswd -a UserName [Enter]


sambaの設定ファイル /etc/samba/smb.conf を編集します。

sudo vi /etc/samba/smb.conf [Enter]


smb.conf

# /etc/samba/smb.conf の最後尾に下記を追加します。
# 下記のようにした場合、 //raspi4b/root_UserName/ でアクセスできるようになります。
# windowsの場合には / を \ に変更してエクスプローラーに入力してみてください。
#
# ※もし【ホスト名】が認識されずにアクセスできないような場合には、
# ipアドレスを入力してみてください。
# ipアドレスが例えば 192.168.0.1 だった場合には、
# //192.168.0.1/root_UserName/ としてみてください。
#
# ipアドレスを確認するには、ターミナルを開いて、
# 	windowsの場合	ipconfig [Enter]
# 	linuxの場合	ip a [Enter]
# です。
#
[root_UserName]
path = /
read only = no
browseable = yes
public = yes
guest ok = no
force user = UserName


sambaをリスタートします。

sudo systemctl restart smbd [Enter]
sudo systemctl restart nmbd [Enter]




MPDとalsaイコライザー等をインストール

MPDとalsaイコライザー等の必要なものをインストールします。
その後、一端再起動(reboot)しておきます。

sudo apt install mpd mpc [Enter]
sudo apt install libasound2-plugin-equal [Enter]
sudo reboot [Enter]


再起動後、aplayコマンドで音楽再生デバイスを表示します。

aplay -l [Enter]


aplayコマンドの実行結果(下記は私の環境で実行したときの参考です)

**** ハードウェアデバイス PLAYBACK のリスト ****
カード 0: vc4hdmi0 [vc4-hdmi-0], デバイス 0: MAI PCM i2s-hifi-0 [MAI PCM i2s-hifi-0]
  サブデバイス: 1/1
  サブデバイス #0: subdevice #0
カード 1: vc4hdmi1 [vc4-hdmi-1], デバイス 0: MAI PCM i2s-hifi-0 [MAI PCM i2s-hifi-0]
  サブデバイス: 1/1
  サブデバイス #0: subdevice #0
カード 2: Headphones [bcm2835 Headphones], デバイス 0: bcm2835 Headphones [bcm2835 Headphones]
  サブデバイス: 8/8
  サブデバイス #0: subdevice #0
  サブデバイス #1: subdevice #1
  サブデバイス #2: subdevice #2
  サブデバイス #3: subdevice #3
  サブデバイス #4: subdevice #4
  サブデバイス #5: subdevice #5
  サブデバイス #6: subdevice #6
  サブデバイス #7: subdevice #7
カード 3: sndrpihifiberry [snd_rpi_hifiberry_dacplus], デバイス 0: HiFiBerry DAC+ HiFi pcm512x-hifi-0 [HiFiBerry DAC+ HiFi pcm512x-hifi-0]
  サブデバイス: 0/1
  サブデバイス #0: subdevice #0


※ここで【カード 3: ~[snd_rpi_hifi...】となっていますが、【~】に対応する【sndrpihifiberry】という名前がこのカードのデバイス名で 以下に出てくる mpd.conf ファイルと asound.conf という設定ファイルで記述することになりますので、 そのように覚えておいてください。

mpdのユーザー名を変更します。

sudo usermod -aG audio mpd [Enter]


MPD、イコライザー等の設定ファイルを編集します。 ですが、その前に私が使用しているMPDのバージョンをお知らせしておきます。

$ mpd -V
Music Player Daemon 0.23.12 (0.23.12)
Copyright 2003-2007 Warren Dukes 
Copyright 2008-2021 Max Kellermann 
This is free software; see the source for copying conditions.  There is NO
warranty; not even MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


上記のように mpd 0.23.12 となっています。


mpd.conf
下記のキーワードの行を下記のように変更します。

# /etc/mpd.conf  の 下記のキーワードを下記のように修正します。

# music_directory は 再生する音楽ファイルを格納(マウント)しているディレクトリを指定します。
# 下記の場合は "/nas/music" ディレクトリを指定しています。
music_directory		"/nas/music"

# 下記のキーワードの行を、下記のように編集してください。
user				"mpd"
bind_to_address	 "0.0.0.0"
port				"6600"
auto_update		"yes"


更に続けてmpd.confに下記を追加します。 私は、resampler については audio_output の直前当たりに追加しています。 私が実際に使っているファイル mpd.conf(2024/5/2日現在使用中)も置いておきます。 なお、以下の設定はCD音質(44.1KHz)を想定して設定しています。 私は主にCDからWAVファイルへ変換したものを再生していまして、それ以外はYouTube(48KHz or ハイレゾ?)からダウンロードしたファイルをたまに再生する程度です。 そのため下記のような設定で充分な感じの音質を得られています。 それ以外の音質のファイルを再生するときには、実際に聞こえる音を頼りに設定を変えてみてください。

少しだけ下記のaudio_outputの内容について記述しておきます。 下記の設定では mixer_type "none" に設定していますが、 これはクライアント側で音量調節できなくなる代わりにその分音質が劣化しなくなります。 音質重視の設定という事でご了承下さい。 私が使用している Bose NC700 ヘッドフォンはヘッドフォン側で音量調節※2できるので問題ないのです。 なお、コメントにも記述しましたが "none" を "software" に変更することでクライアント側で音量調節できるようになります

※2 最近「音量調節」する必要に迫られてミキサーを購入したのですが、 3千円程度で購入した品物でしたが音質の劣化は感じられませんでした。 もし音量調節したいならば"mixer_type"を"software" に変えるよりもミキサーを購入して調整できるようにした方が音質の劣化は抑えられると思います。 ただミキサーにも種類があるようですし、選択したものによっては期待した効果を得られない可能性もありますので、 その辺に詳しくない方はその辺についても調べてから購入した方が良いと思います。

# /etc/mpd.conf  に 下記の設定を追加・修正します。

resampler {
	plugin  "soxr"
	quality "very high"
	threads "2"
}

# 下に出てくる mixer_device "hw:~" の【~】の部分には、サウンドカードのデバイス名を記述してください。
# ここでは【sndrpihifiberry】ということになります。
# 良く分からない場合には、上に戻って aplay コマンドのところをご覧ください。

audio_output {
        type     "alsa"
        name   "equal"
        device  "plug:plugequal"
#      format "176400:32:2"
        format "352800:32:2"
#      format "384000:32:2"
        mixer_control  "Master"
        mixer_device    "hw:sndrpihifiberry"
        mixer_type        "none"	# "software" に変更するとクライアント側で音量調整できるようになります。
        auto_resample "yes"
# 2024/05/02追記 start
# 以下の3行を追加したことで、たまに音が途切れる症状が改善しました。
        priority        "FIFO:70"
        buffer_time     "150000"
        period_time     "37500"
# 2024/05/02追記 end
        dop     "no"
}


asound.conf ファイルを(無い場合には)作成します。 もし、asound.conf ファイルが既にあった場合には適切に編集してください。 asound.conf も /etc ディレクトリにあります。 私が実際に使用しているasound.confファイルは こちら です。

# /etc/asound.conf  を下記のようにしてください。

# 下に出てくる slave.pcm "plughw:~,0"; の【~】の部分には、サウンドカードのデバイス名を記述してください。
# ここでは【sndrpihifiberry】ということになります。
# 良く分からない場合には、上に戻って aplay  コマンドのところをご覧ください。

ctl.equal {
  type equal;
}
pcm.plugequal {
  type equal;
  slave.pcm "plughw:sndrpihifiberry,0";
#  slave.pcm "plug:dmixer";
}
pcm.equal {
#pcm.!default {
  type plug;
  slave.pcm plugequal;
}


(2024/6/30追記分)

「ラズパイ5」を新しく購入したので、 このページを参照しながらMPDを新規インストールしたらMPDが【自動起動しない】ことに気づきまして「自動起動させるコマンド」を追記することにしました。 MPDをインストールしたら下記コマンドを実行して(自動)起動するようにしてください。 動作確認はラズパイ5+PI OSでしています。
$ sudo systemctl enable mpd
$ sudo systemctl start mpd

ちなみにMPDをリスタートさせたいときは、下記コマンドでできます。
$ sudo systemctl restart mpd

更にちなみに・・・なんですが、やはり「ラズパイ5」の方が同じ設定でも【高音質】でした。 きっとCPUの処理速度以外もより良く変わっているのだろうと思います。 また新しいサウンドカードも注文したので、更にどんな音が出るのか楽しみです。 その辺を記述出来たら公開しようと思っています。




目次へ




(5)イコライザー設定

イコライザーの設定をします。
ターミナルを開いて下記コマンドを実行してください。

sudo -u mpd alsamixer -D equal [Enter]


上記コマンドを実行しますと下図のような画面が出て、イコライザーの設定ができます。 私はインターネット上で見つけた【パーフェクト設定】という設定を(参考に)しています。 私が【パーフェクト設定】として設定している値は更にその下のような値になっています。 ちなみに画像の最初の値が【42,41】になっているのですが、細かいことは気にしないで下さいね。 なお、このイコライザーの各設定値は最大で66くらいまでにしておいた方が良いかもしれません。 66より大きな値を入れてしまうと音割れ等が発生するかもしれませんのでご注意ください。

alsa_equal.png


パーフェクト設定 (AlsaMixer v1.2.8用)

2024/01/21 - https://muroix.com
パーフェクト設定(AlsaMixer v1.2.8用)
{一番右側の設定値が2024/5/2日現在、私が使用している設定値(左側の値より-10した値)です。}

31Hz	→	42	⇒	32
63Hz	→	51	⇒	41
125Hz	→	59	⇒	49
250Hz	→	53	⇒	43
500Hz	→	51	⇒	41
1KHz	→	47	⇒	37
2KHz	→	53	⇒	43
4KHz	→	59	⇒	49
8KHz	→	66	⇒	56
16KHz	→	56	⇒	46





目次へ




(6)最後に

ラズパイ4BのIPアドレスをルーターの自動割り当てではなくて固定IPにした方が便利かと思いますが、ラズパイの設定だけでなく、 ルーターの設定も記述しなければならないのでメンドくさい・・・というわけで割愛します。 ごめんなさい。 (LANの)固定IP化を知りたい方は他のホームページ等をご覧くださいね。

そう、それと今まで私知らなかったのですがラズパイからラズパイにSSH接続するときには 【ホスト名】に続けて【.localhost】を付けないといけないらしいです。 大抵windowsパソコンからしかSSH接続しなかったので気付きませんでした。

つまり他のラズパイからこのラズパイ4BにSSH接続したいときには、

ssh UserName@raspi4b.localhost [Enter]


とする必要があるんですね。

MPDのクライアントについてですが、私のパソコンには Cantata というMPDクライアントを入れています。 スマホには yaMPC というのを入れています。 他にも探せばいくつかあると思います。

さて、以上でラズパイ4Bで高音質のミュージックプレイヤーを構成することができましたが、 本サウンドカードはラズパイ5にも取り付けることができます...と言いますか、できました。 で、ラズパイ4Bより「いい音」が出たんですね。 ですが、使用中にですがたまに(過負荷になるのだと思うのですが)、 「不快なノイズ」が発生することがありました。 たまにとはいえ「不快なノイズ」を聞いてしまって不快になるのは【嫌】ですし、 ラズパイ5をもうひとつ買うお金はありませんし・・・、 というわけで、若干音質が低下したとしてもラズパイ4Bに乗せ換えた方が【いい】かなと思いまして元に戻しました。 ラズパイ4Bでもいい音ですよ。 私はもうUSB-DACに戻る気はありません。




目次へ






メニュー