BeagleBone Black/GreenへArch linuxをインストール

本題に入る前に二つ脱線します。

一つ目は前回のrpiや今回のbbb/bbgへのインストールと「音楽用APU2c4にArch Linuxシステムを作る」の違いです。armアーキテクチュアとインテルアーキテクチュアの違いということになります。「何でarmアーキの方がシンプルになんだ」といわれそうですが、ちょっと違うのですね。ヘッドありとヘッドレスの差が大きい。気が付いていらっしゃると思いますが、念のため確認です。

二つ目は「音楽用APU2c4にArch Linuxシステムを作る(1)」で「RaspberryPIのようなLinux用のSoCもいいのだけど、ヘッドレスというハードはないですから。」と書いたのですが、間違えでしたね。BBGを忘れていました。capeを使って、後付けでHDMI接続出来るようですが、ディフォルトはヘッドレスです。このハードはコンパクトに音楽専用システムを作るのに最適だと思います。rpiよりも値段も安いし、お勧めですね。



以降はBBGを使って確認しました。
それで、前回書き忘れていますが、arm系の arch linux システムの作成には、インストールするハードとは別にlinuxが動作する環境が必要です。僕はVmwarePlayer上のarch linuxを使っていますが、linuxなら何でもOKです。例えばvoyage mpdが動くlinux環境があれば、それでもOKですし、使っていない古いcuboxをもっているということであれば、それでarch linuxを動かしてもいいです。以前に僕が公開したarch linuxのイメージファイルはここからどうぞ(ダウンロード不能になっていたので、ダウンロード先を変更しました)。

ついでに写真の説明をすると、BBGの場合、電源は標準ではMicroUSB端子で入力するしかありません。このため電源供給型のUSBハブとifiのDC電源フィルターを使いを対策しています。
画面上のp8のジャンパケーブルは無条件にsdカードから起動させるための仕掛けです。こういう具合にp8の1/2番と43番を繋げばいいです。
p9の上に刺さっているケーブルはシリアルモニタ用です。反対側はUSBになっていて、パソコンのUSB端子と繋ぐとシリアル接続できます。在り処はここ。繋ぎ方が要注意で、黒いケーブルをLAN端子側にする必要があります。逆に接続すると悲惨な未来が待ち構えているでしょう。ヘッドレスマシンには必需品です。僕は二本持っています。病膏肓ですね(^^;;;。無いと、何か問題が発生した時、手も足も出ないというダルマさん状態になります。
ピン配列の情報はここにあります。3.3Vということなので、単純にUSBケーブルと接続するだけでは繋げないと思います。

やっとここから本題です(^^;;;。
BBB/BBG用の arch linux のインストールの仕方はrpiと似ています。違いはBBB/BBG用が1パーティション構成であることと、BBB/BBGの方がブートローダを明に書き込むことです。BBB用のarch linuxのインストールサイトに説明がありますので、詳細はそちらを参照して下さい。以下、リンク先のコマンドだけ羅列しておきます。

#Zero the beginning of the SD card:
dd if=/dev/zero of=/dev/sdb bs=1M count=8
fdisk /dev/sdb
o -> n -> -> default -> p -> w
# Create the ext4 filesystem:
#        For e2fsprogs < 1.43:
[root@arch ~]# pacman -Qs e2fsprogs
local/e2fsprogs 1.43.1-2 (base)
#Ext2/3/4 filesystem utilities
#   For e2fsprogs < 1.43:
mkfs.ext4 /dev/sdb1
#   For e2fsprogs >= 1.43:
mkfs.ext4 -O ^metadata_csum,^64bit /dev/sdb1
# Mount the filesystem:
mkdir mnt
mount /dev/sdb1 mnt
# Download and extract the root filesystem:
wget http://os.archlinuxarm.org/os/ArchLinuxARM-am33x-latest.tar.gz
bsdtar -xpf ArchLinuxARM-am33x-latest.tar.gz -C mnt
sync
# Install the U-Boot bootloader:
dd if=mnt/boot/MLO of=/dev/sdb count=1 seek=1 conv=notrunc bs=128k
dd if=mnt/boot/u-boot.img of=/dev/sdb count=2 seek=1 conv=notrunc bs=384k
umount mnt
sync
############
Insert the SD card into the BeagleBone, connect ethernet, and apply 5V power.
Use the serial console or SSH to the IP address given to the board by your router.
Login as the default user alarm with the password alarm.
The default root password is root.

以上です。簡単でしょ。apuにarch linuxをインストールするよりはるかに楽です。
ついでに、リンク先にやり方が解説されている eMMCを arch linuxにする方法も実行しましょう。要するにSDカードを作ったと同じ手順をSDカードで起動した状態でeMMC(mmcblk1)に対して行えばいいということです。ただ、SDカード作成をした状態と作成したSDカードで起動した状態では多少の差はありますから、読み替えが必要です。読み替えたコマンドを羅列しておきます。

pacman -Syy
dd if=/dev/zero of=/dev/mmcblk1p bs=1M count=8
fdisk /dev/mmcblk1
o -> n -> -> default -> p -> w
mkfs.ext4 -O ^metadata_csum,^64bit /dev/mmcblk1p1
mount /dev/mmcblk1p1 /mnt
wget http://os.archlinuxarm.org/os/ArchLinuxARM-am33x-latest.tar.gz
pacman -S bsdtar
bsdtar -xpf ArchLinuxARM-am33x-latest.tar.gz -C /mnt
sync
dd if=/mnt/boot/MLO of=/dev/mmcblk1 count=1 seek=1 conv=notrunc bs=128k
dd if=/mnt/boot/u-boot.img of=/dev/mmcblk1 count=2 seek=1 conv=notrunc bs=384k
umount /mnt
sync

エラーがあったら、自力で何とかして下さいね。
システムをeMMCから起動するか、SDカードから起動するかで音は多少変わります。eMMCの方が音が良いような気がするのですが、気のせいですかね(^^;;;。

さて、この先のシステムのセットアップの仕方はrpiと基本的には同じですので、省略します。

ちなみに

[root@alarm ~]# uname -a
Linux alarm 4.8.11-1-ARCH #1 Mon Nov 28 19:47:50 MST 2016 armv7l GNU/Linux
[root@alarm ~]# mpd -V
Music Player Daemon 0.19.21

です。さすがarchという感じでほぼ最新版ですね。

短いですが、お正月だし、これでお終い。

p.s. と書きましたが、ちょっとだけ、おまけ。
このシステムをベースに boticize しようとやっているのですが、難行しています。うまくいかない理由は debian jessie と arch のブートの仕組みの差です。

root@arm:~# ls /boot/
config-4.4.30-ti-r66          initrd.img-4.8.13-botic7-rc3  uEnv.txt
config-4.5.0-botic7-rc1       initrd.img-4.8.7-armv7-x4     vmlinuz-4.4.30-ti-r66
config-4.8.13-botic7-rc3      SOC.sh                        vmlinuz-4.5.0-botic7-rc1
config-4.8.13-rt6-botic7-rc3  System.map-4.4.30-ti-r66      vmlinuz-4.8.13-botic7-rc3
config-4.8.7-armv7-x4         System.map-4.5.0-botic7-rc1   vmlinuz-4.8.13-rt6-botic7-rc3
dtbs                          System.map-4.8.13-botic7-rc3  vmlinuz-4.8.13-rt6-botic7-rc3_bak
initrd.img-4.4.30-ti-r66      System.map-4.8.7-armv7-x4     vmlinuz-4.8.7-armv7-x4
initrd.img-4.5.0-botic7-rc1   uboot
root@arm:~# ls /boot/uboot/
root@arm:~#

これが boticize された debian jessie の /boot。/ubootは空っぽです。

[root@alarm ~]# ls -l /boot/
total 5852
-rw-r--r-- 1 root root   74816 Jun  8  2015 MLO
drwxr-xr-x 2 root root    4096 Nov 29 02:52 dtbs
-rw-r--r-- 1 root root  398132 Jun  8  2015 u-boot.img
-rw-r--r-- 1 root root      25 Jun  8  2015 uEnv.txt
-rwxr-xr-x 1 root root 5501312 Nov 29 02:52 zImage

これが arch linux latestの /boot。
違いは一目瞭然だと思います。
jessieの方はinitrdとvmlinuzをベースにした構成なのに対し、archはubootによるarmアーキテクチュアで典型的な構成をしています。問題はこのubootベースの構成にboticドライバを認識させられないことなのですよね。手作業でboticizedされたkernelの起動までは出来るのですが・・・。

手作業boticized-arch化の方法は以下の通りです(掲示板のこのメッセージを参照)。

sudo mount /dev/sdb1 /mnt
cd linux-dev-botic7-v48/deploy/disk/
sudo cp /mnt/boot/zImage /mnt/boot/zImage.org
sudo cp ../4.8.13-botic7-rc3.zImage /mnt/boot/zImage
tar -zxvf ../4.8.13-botic7-rc3-modules.tar.gz
sudo cp -av lib/modules/* /mnt/lib/modules/
rm -rf ./*
tar -zxvf ../4.8.13-botic7-rc3-firmware.tar.gz
sudo cp -av ./* /mnt/lib/firmware/
rm -rf ./*
tar -zxvf ../4.8.13-botic7-rc3-dtbs.tar.gz
sudo cp -av ./* /mnt/boot/dtbs/
sync
sudo umount /mnt

/boot/uEnv.txtには

dtb=am335x-boneblack-botic.dtb
optargs=snd_soc_botic.ext_masterclk=3 snd_soc_botic.serconfig=MMMM snd_soc_botic.dsd_format_switch=3

と設定してありますが、起動後

[root@alarm ~]# cat /proc/asound/cards
--- no soundcards ---

となってしまうのですよね。今のところ思案投首状態です。

(PC_Audio)   2017/01/02

コメントする

I2Sの世界(1)


UPnPとI2SがPC/ネットワークオーディオの世界で良い音を出すための最新のキーワードだと思っています。
UPnPは Volumio vs JPLAY/lightMPD連合軍というソフトウェアの世界ですが、I2Sは RaspberryPI vs BeagleBone BlackというSoCの世界です。どちらもグローバルで鈍感なガリバーに対して零細だけどgenuineな小人が真実の音を求めて戦いを挑むという構図なのはいっしょです(^^;;;。

I2Sについては2年半位前に4回記事を書き込みました。記事の中で当時はしりだったrpi直結のI2S接続基板を紹介し、たかじんさん設計のIrBerryの制作してみました。また、試験的にaitlabo DACを直接BBBに繋いで、素晴らしい音がすることを確認しています。
I2Sとは何か関しては記事の1回目に紹介していますのでリンク先を参照して下さい。
I2Sのメリットはそのシンプルさです。

図1 パソコンとdacの通常の接続

pc --> (usb接続) -> ddc(spdif変換) --> (spdif 同軸/光ケーブル接続) -> dac(I2S変換 -> I2S入力)

図2 ddcとdacをi2s接続

pc --> (usb接続) -> ddc(I2S変換) -> (I2S ワイヤ接続) -> dac(I2S入力)

図3 パソコンとdacをi2s接続

pc(I2S変換) --> (I2S ワイヤ接続) -> dac(I2S入力)

という具合にどんどんシンプルになります。このシンプルさが音に影響しない筈はないと思います。

ところで、最後の図を見て、何か気が付きませんか。

これってネットワークプレーヤの内部の接続方式と同じなのですよね。

図4 ネットワークプレーヤの内部

nas/dlnaデータの受信機能(I2S変換) --> (I2S ワイヤ接続) -> dac機能(I2S入力)

となっているはずです。僕はLinnなどのネットワークプレーヤが音が良く出来る大きな理由の一つはこれだと思っています。
インタネットでパソコンに適当な音楽プレーヤソフトとDACを組み合わせてネットワークプレーヤを作るという書き込みをよく見かけます。しかし、図1のようにパソコンを使った通常の接続方式では間にusb接続とspdif接続のための余分なインターフェース変換が入るので、ネットワークプレーヤと同じにはならないのですよね。
図2、図3は、そのような無駄な変換を省き、ネットワークプレーヤと同じような仕組みで、音を良くしようととしているわけです。

さて、UPnPとI2S接続ですが、2年半前と比較すると、UPnPの世界は大きく変わっているのに、「I2S接続の世界」は相変わらずですね。UPnPの世界は新しいストリーミングサービスやアプリケーションが次々と登場し、ハード/ソフトが対応がすすんでいます。ところが「I2S接続の世界」はいっこうに標準化は進まないし、対応するハード/ソフトもほとんど出てこないという状態です。「I2S接続を試してみたい」という時に問題になるのはこの対応ハード、ソフトの少なさですね。

何故 I2Sは流行らないのか。大きな理由はその生い立ちにあります。
I2Sという規格は機器内部の規格のため、機器間でケーブルを引き回して数十センチ~数メートルの距離を接続するためのものではないということです。

無理矢理、機器間の接続をHDMI端子とLAN端子を使った実験については、ここに mi-take さんの実験の報告が、ここにPCど素人さんの実験の報告があります。
どちらも十数センチメートル以上離すことは問題ありという結果です。この対応策として、HDMIケーブル/端子やLANケーブル/端子を使って、長距離の伝送を出来るように増幅(?)してI2S信号を送り出すという方法が考えられます。
HDMIを使ったものについては PS Audio が最初に製品を発売しましたが、標準化はまだ進んではいません。HDMI入力端子をもつDACは、ネットで捜すと結構な数の製品がありますが、規格はバラバラのようです。HDMI伝送するためのキットはやなさんの製品があります。
LANを使ったものについては、TPA社がTeleporterという製品をキットとして販売しています。Teleporterの情報はここ(ComputerAudiophileのスレッド)にあります。また、LKSという香港の会社が自社製品の接続に独自の方式を採用しているようです。

次にこのような状況にハードの対応はどうなっているかです。

DACのI2S接続対応
DACをI2S対応するには、疑似標準のHDMIによるか、内部にI2S入力用のピンが用意されていて、あとは好きにして頂戴となっているかです。
HDMIによるものは日本のメーカの製品はないと思います。欧米では PS Audio の製品が代表的ですが、他にもMytek、M2TECHなどいくつかあるようです。I2S対応が進んでいるのは中華製DACで、このシンセンオーディオのサイトで扱っている製品に対応可能なものがいくつかあります。中には接続にLANを使ったものもあります。
次に内部にI2S入力用のピンを持ったもの。キットと提供されている製品はこれが可能なことが多いです。もともとI2S規格は基板間の接続用ですからこれは当たり前ですね。日本製ではaitlaboのDACやRATOC社の基板キットなどがあります。海外製品も星の数ほどありますので、検索してみて下さい。問題は電源など別に用意する必要がありますし、難度は低いですが、ハンダ付けが必要なことですかね。
DDCのI2S接続対応
DDCとしてHDMIかLANでI2S信号をDACに送り出す機能を持つ製品を使う必要があります。製品は上記のシンセンオーディオのサイトいくつかあります。この他にM2TECH製品がLAN端子を使う形で対応しているようです。
基板レベルでピンを出して対応させるというものは amaneroのCOMBO384が有名です。というか、以前はこれ位しかなかったです。I2S使いで、これを持っていないとう人はもぐりだと思ってよいといえる位です。僕も一つもっています。
しかし、最近はDIYINHKに使えそうな製品があります。シンセンのサイトにあるこの製品(F-1)は最新のXMOSチップを使い、クロックもそれなりのもの(CCHD-575)を使っていますので、お勧めです。ケースに入っているので、基板で無いように見えますが、裸にする(^^;;;ことができます。
他にもネットで捜すといろいろなボードがありますね。
パソコン側のI2S接続対応
現時点で可能なのは RaspberryPI と BeagleBone Black/Green だけです(以降rpiとbbb/bbgと略記)。
理由はパソコン側のI2S接続対応はGPIOという特殊なインターフェースを使っているため、可能になるのはLinux動作可能なSoCだけとなるからです。また接続にはソフトの開発が必要です。この対応がされているのが上の二つ機種だけということです。
OSレベルの対応が必要となるため、上記の機種でも対応されるディストリビューションは限定されます。RPIの場合はこのGPIOによるオーディオ対応がOS(Linux)レベルで取り込まれているので、音楽用ディストリビューションであれば、I2S接続には問題はなさそうです。BBB/BBGの場合はI2S対応のLINUXドライバシステムを組み込んだ音BOTICという音楽用ディストリビューションが孤軍奮闘、頑張っているという状況ですね。

どうですか。四面楚歌。項羽の心境もかくやという状況でしょ。
まあ、上にあげたメーカの製品を組み合わせれば、なんとかなりそうですが、工夫が必要です。オーディオコンポーネント製品のように、単純に組み合わせて、OKとはいきません。

しかし、ここで諦めては、PC/ネットワークオーディオの世界の最前線にはたどり着けません。
全て自作すればいいわけだから、「俺はデジタル回路に精通している。ハンダ付けも自由自在、達人の境地」という方は勝手にやって下さい。ここでは僕のように、「電子回路のことはさっぱり分からん。ハンダ付けは初心者。チップをハンズ付けしろといわれたら、裸足で逃げ出す(^^;;;」という方々のためにどうやってこの難境をクリアするか。方法を考えてみます。

合体型のDAC基板を使う

簡単なのは rpi、bbb/bbg のGPIO端子に合体し、直接接続する方式の基板レベルの製品を使うことです。日本製、海外製、様々な製品がありよりどりみどり。特にrpiはグローバルですのでいろいろあります。それらを紹介しているサイトはこちらがお勧め。bbb/bbg用のものは、以前は、ほとんどなかったのですが、最近はLINUXCOMさんたかじんさんの活躍で製品が登場しています。



画面左が合体前。右が合体後。左の写真はB3D-A4495の裏側です。こういう具合に、BBBのIOコネクターp8とp9のピンソケットにB3D-A4495のピンヘッダーを差し込みます。
これらの基板はハンダ付けは不要で基板をrpi、bbb/bbgに接続し、適切にソフトをセットアップすれば動くようになります。ソフトのセットアップはちょっと大変かもしれませんが、僕のサイトを読んでいるという方からみれば「タヌキでも出来る」というレベルでしょう。
僕はrpi用に TerraBerry、bbb/bbg用に B3D-A4495 という基板を使っています。どちらもDSD再生に対応した最近の製品ですが、それなりの音がして、満足しています。いずれ紹介する予定です。

ただし、これらの基板はサイズや電源などから来る限界はあります。ちゃんとした箱に入り、電源をもつDACと比較すると音は多少薄っぺらくなります。例えばピアノの鍵盤の打音のリアルな感じとか、ティンパニーの皮が震える感じの音を出すことは出来ないのですよね。

HDMI伝送可能なDDC/DACを選ぶ

図2の接続方式で確実に繋がるHDMI伝送方式をとり、音の良いDDCとDACを選ぶという方法です。ハンダ付けゼロですみます。パソコン側は標準のUSB接続でOKです。問題点はHDMI方式がまだ標準化されていないこと位ですかね。ただ、現状ではこの標準化されていないという点はかなり高いハードルになっています。対応できるハードが少ないのですよね。情報もほとんど無いですから、ハード選択の幅は狭いです。
HDMI方式で接続した例はJPLAY日本語サイトのこの情報位ですかね。
PS Audio の接続例は日本語ではこれくらいでした。残念ながらDDCによるパソコンとの接続ではありません。

やけのやんぱち自作する

直結基板も駄目、HDMI接続製品も駄目となると、後はいよいよ自作となります(^^;;;。
諦めて、半田ゴテを握る覚悟するしかないです。ここまで来たら、どうすれば難しいハンダ付けを回避するかです。間違ってもDACチップを基板にハンダ付けするなどという無謀な試みは避けることになる。キット製品を使うしかなさそうですが、DACチップは最初からハンダ付けされているという基板を選べばいいです。
ネットでDACを基板として発売しているサイトをご紹介します。

  • 美武クリエト(Mi-Take) DACキット紹介インデックス
    基板は部品を含めてハンダ付け済で、基板を組み合わせDACとして完成させるという仕組みです。マニュアルも整備されているようですので、初級・中級の方でも制作可能かもしれません。
  • お気楽オーディオキット資料館
    基板だけの取り扱いが中心です。サイトの最初に「なお、すべての基板は中・上級者向けです。初心者の方はご遠慮ください」とあります。上級者以上の人を対象としたサイトです。
  • ヤナソフト やなさんの部屋
    基板だけの取り扱いが中心なので、上級者以上を対象としたサイトです。だだし、「HDMI-I2S送受信基板」はここでしか入手できません。
  • aitlabo DAC
    ES9018K2MとES9038PROの2タイプがあります。電源を含めて指定の組み合わせで基板を繋ぐという方式なので、基板のハンダ付けは不要です。だれでも制作可能だと思います。
  • RATOC オーディオKIT
    基板は完成しています。電源を用意すれば、I2S対応はできそうです。DDC基板が制御基板となっているので、無しでも動かせるは不明です。
  • Twisted Audio Pair Buffalo DAC
    DACチップは取り付け(ハンダ)済なので、ハンダ付けが必要なのは部品だけです。マニュアルも整備されているようなので、中級者レベルでも対応可能かもしれません。

    適当なキットを組み上げたとしても、まだ茨の道は続きます。SoCとどのうように繋ぐか。距離の制限があることから難問が待ち構えていますね。このあたりは長くなるので、稿を改め次回に。

    最後にこのサイト(お座敷ガジェット)「Raspberry PIを超高音質オーディオマシンに仕上げる」のrpi I2S接続に関する紹介記事は参考になりますので、リンクしておきます。
    ここまで書いた後に見つけたのですが、同じサイトに「PS-AUDIO互換のI2S入力、出力があるデバイス一覧」がありますね。非常に参考になります。

(PC_Audio)   2016/12/25

コメントする

Raspberry PI 2へArch linuxをインストール

MPDのセットアップ、ビルド、カーネルのビルドなどAPU用のArch Linuxシステムの作成の書き込みを続けるつもりだったのですが、ちょっと脱線して Raspberry PI 2 用のArch linuxの話題です。

Raspberry PI用にもArch Linuxのディストリビューションは存在します。以前はRaspberry PIご本家のサイトで公開されていたようですが、今はArch Linuxのサイトで独自に公開されています。Arch側が撤退した理由はRPIサイトの運営ポリシーがArchの開発ポリシーに合わなかったということのようです。そのあたりの事情を示す書き込みはこちらにあります。「サルでも出来る」を目標とするRPI側と「サルには触らせない」がポリシーのArch側では一緒にやっていくことは困難ということだったようです。

Raspberry PI 2へのArch linuxのインストール方法はググれば情報は山ほど出てきます。丁寧にまとまっているのはこのあたりですかね。
R-PIへのArch Linuxのインストールは三段ロケット方式のAPUへのインストールと比較すればはるかに簡単です。試しにLinux環境でインストールするためのコマンドだけ並べると

pacman -S dosfstools
fdisk -l
fdisk /dev/sdb
n -> (+100M) -> t-> (c) -> a -> n -> p -> w
mkfs.ext4 /dev/sdb2
mkfs.vfat /dev/sdb1
mkdir /mnt/boot
mkdir /mnt/root
mount /dev/sdb1 /mnt/boot
mount /dev/sdb2 /mnt/root
wget http://archlinuxarm.org/os/ArchLinuxARM-rpi-2-latest.tar.gz
bsdtar -xpf ArchLinuxARM-rpi-2-latest.tar.gz -C /mnt/root
sync
mv /mnt/root/boot/* /mnt/boot
sync
umount /mnt/boot /mnt/root

これだけです。要するにインストールしたいマイクロSDカードをパーティショニング、フォーマット、マウントし、インストールするArchシステムをダウンロードし、書き込んでいるだけです。
起動後ユーザ名とパスワードは

alarm
alarm

rootで操作するには

su -
Password: root

とすればいいです。DHCPネットワークは立ち上がっているので、rootになったあと

pacman -Syy           : パッケージリストの更新
pacman -Syu           : パッケージのアップグレード
#pacman -S openssh
#systemctl start sshd

とすれば、SSHログインが可能となります。(archではSSHは立ち上がっているようなので、インストールは不要ですね。)
さて、ログインしての作業の大半はシステムでしょうから、毎回、alarmユーザでログインしたあと、rootユーザに変更するのは大変です。sshでログインするユーザ名にrootを使えるよう変更しておきます。

自動ログイン(これは rpi arch では出来ないようです)

nano /etc/systemd/system/autologin@.service
# ExecStart=-/sbin/agetty --autologin pi --noclear %I $TERM
ExecStart=-/sbin/agetty --autologin root --noclear %I $TERM

rootでログインできるようssh定義ファイルを修正(こちらは必須です)

nano /etc/ssh/sshd_config
PermitRootLogin yes
systemctl enable sshd.service


音楽用にするため、MPDのインストールとセットアップを行います。これも簡単で、以前「サルでも作れる MPD on Arch Linux」に書き込んだ方法そのままです。

必要なバッケージのインストール(nasがcifsならば、cifs-utilsだけでOK)

pacman -S cifs-utils nfs-utils ntfs-3g
pacman -S alsa-plugins alsa-utils alsaplayer
pacman -S mpd mpc ncmpc

MPDのセットアップ 音楽ファイルの登録

nano /etc/fstab

fstabに以下の行を追加(nnn,xxxは各自の環境に合わせて適当に設定して下さい)

//192.168.nnn.nnn/public /root/Music cifs username=xxx,password=xxx,sec=ntlm,uid=mpd,file_mode=0666,dir_mode=0766,iocharset=utf8,rsize=130048,wsize=4096,noauto,x-systemd.automount 0 0

sec=ntlmはカーネル3.8以降の対応ため、noauto,x-systemd.automountが自動マウントのために必要なようです。
次にmpdの設定ですが、これはarch流の設定方法に合わせないとうまくいきません。詳しい内容についてはリンク先を参照して下さい。
rootでログイン。ホームディレクトリ(/root)にいるものとします。まず、mpd設定関連のディレクトリを作成します。

mkdir .config .config/mpd mkdir Music

mpd.confの設定、ひな型を/rootにコピー。

cp /usr/share/doc/mpd/mpdconf.example ~/.config/mpd/mpd.conf

コピーしたひな型に対して以下の通りを変更(dsd_usb行以外はコメントアウト+α)

nano .config/mpd/mpd.conf

db_file            "~/.config/mpd/database"
log_file           "~/.config/mpd/log"
music_directory    "~/Music"
playlist_directory "~/.config/mpd/playlists"
pid_file           "~/.config/mpd/pid"
state_file         "~/.config/mpd/state"
sticker_file       "~/.config/mpd/sticker.sql"
user               "root"
audio_output {
        type            "alsa"
        name            "My ALSA Device"
        device          "hw:0,0"
        dsd_usb         "yes"
}
filesystem_charset              "UTF-8"
id3v1_encoding                  "UTF-8"

上で設定したファイルとディレクトリを作成。

mkdir ~/.config/mpd/playlists
touch ~/.config/mpd/{database,log,pid,state,sticker.sql}

mpd.serviceを修正。

nano /usr/lib/systemd/system/mpd.service

ExecStart=/usr/bin/mpd --no-daemon /root/.config/mpd/mpd.conf

設定内容を反映させるため、リブートします。

reboot

mpdがちゃんと立ち上がっていることを確認します。

[root@alarmpi ~]# systemctl status mpd.service
* mpd.service - Music Player Daemon
   Loaded: loaded (/usr/lib/systemd/system/mpd.service; enabled; vendor preset:
   Active: active (running) since Tue 2016-12-13 23:39:38 UTC; 12h ago
 Main PID: 266 (mpd)
    Tasks: 5 (limit: 4915)
   CGroup: /system.slice/mpd.service
           `-266 /usr/bin/mpd --no-daemon /root/.config/mpd/mpd.conf

Dec 13 23:39:38 alarmpi systemd[1]: Started Music Player Daemon.

簡単でしょ。これでそれなりのレベルの再生能力をもつ音楽専用システムが出来上がりますので、お勧めです。
ただ、この先が大変です。カーネルのビルドが上手くいかないのですよね。只今調査中です。いずれまとめて書き込むつもりです。

最後におまけ。mpd.serviceを使わない方法です。rc.localを復活させる魔法の呪文を唱える方法となります。

systemctl disable mpd.service
nano /etc/rc.local

#!/bin/bash
/usr/bin/mpd --no-daemon /root/.config/mpd/mpd.conf

rc-local.serviceを作成します。

chmod +x /etc/rc.local
nano /usr/lib/systemd/system/rc-local.service

[Unit]
Description=/etc/rc.local Compatibility
Wants=network.get

[Service]
Type=oneshot
ExecStart=/etc/rc.local
TimeoutSec=0
#StandardInput=tty
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

リンクします。

ln -s /usr/lib/systemd/system/rc-local.service /etc/systemd/system/multi-user.target.wants/

リブートします。
もう一つおまけ。

[root@alarmpi ~]# uname -a
Linux alarmpi 4.4.37-1-ARCH #1 SMP Fri Dec 9 19:03:41 MST 2016 armv7l GNU/Linux
[root@alarmpi ~]# mpd -V
Music Player Daemon 0.19.20

カーネルのレベルがえらく低いのですが、勘繰ると、このあたりも、archがrpiとしっくりいかない理由なのですかね(^^;;;。

(PC_Audio)   2016/12/17

コメントする

音楽用APU2c4にArch Linuxシステムを作る(3)

ここから先の「ヘッドレスブートできるUSBメモリを作成」と「SSDにヘッドレスブートできるArch Linuxをインストール」は以前書き込みした「arch linux on apu1(1)」「arch linux on apu1(2)」とほぼ同じですので、違うところ以外はコマンドを羅列しておきます。

ヘッドレスブートできるUSBメモリを作成

スクリプト実行に必要なパッケージをインストール。

pacman -S squashfs-tools
pacman -S cdrkit

ヘッドレス実行スクリプトの作成。

nano arch-headless

リンク先のコードを貼り付けます。 実行権の設定とisoファイルのダウンロード。

chmod 777 arch-headless
curl -O http://ftp.jaist.ac.jp/pub/Linux/ArchLinux/iso/2016.08.01/archlinux-2016.08.01-dual.iso

32ビット版なら上、64ビット版なら下を実行。

./arch-headless -a 32 archlinux-2016.08.01-dual.iso
./arch-headless -a 64 archlinux-2016.08.01-dual.iso

カレントににそれぞれの版のisoが作成されますので、次にそれをusbメモリに書き込みます(日付の部分は変わります)。
usbメモリの準備。

fdisk /dev/sdb
Command (m for help): a
Selected partition 1
The bootable flag on partition 1 is enabled now.
mkfs.ext2 /dev/sdb1
tune2fs -c 0 /dev/sdb1

書き込むのはISOフォーマットなので、loopデバイスとしてusbメモリをマウントし、コピーする

mkdir -p /mnt/iso
mount -o loop ./arch-i686-20160810-2027.iso /mnt/iso
64butなら
mount -o loop ./arch-x86_64-20160810-2046.iso /mnt/iso
(日付の部分は変わります)
mount: /dev/loop0 is write-protected, mounting read-only
mkdir /mnt/usb
mount /dev/sdb1 /mnt/usb
cp -a /mnt/iso/* /mnt/usb
sync
umount /mnt/iso

ブートローダはusbメモリ&シリアルローディングなので、syslinuxを使います。
mbrを書き込み

dd bs=440 count=1 conv=notrunc if=/usr/lib/syslinux/bios/mbr.bin of=/dev/sdb

以下を確認

[root@arch ~]# blkid -s PTTYPE -o value /dev/sdb
dos
[root@arch ~]# blkid
・・・・
/dev/sdb1: UUID="xxxxxxxxxxxxxxxxxxx" TYPE="ext2" PARTUUID="02b22687-01"
xxxxxxxxxxxxxxxxxxxの部分を次のシリアル設定で使う

コンフィグにシリアルを設定

nano /mnt/usb/arch/boot/syslinux/archiso.cfg
32bitの場合
serial 0 115200
PROMPT 0
DEFAULT arch-i686
LABEL arch-i686
LINUX boot/i686/vmlinuz
INITRD boot/i686/archiso.img
#APPEND archisobasedir=arch archisolabel=ARCH_201408
APPEND console=ttyS0,115200n8 archisobasedir=arch archisodevice=/dev/disk/by-uuid/xxxxxxxxxxxxxxxxxxx rw clocksource=hpet

64bitの場合
serial 0 115200
PROMPT 0
DEFAULT arch-x86_64
LABEL arch-x86_64
LINUX boot/x86_64/vmlinuz
INITRD boot/x86_64/archiso.img
#APPEND archisobasedir=arch archisolabel=ARCH_201608
APPEND console=ttyS0,115200n8 archisobasedir=arch archisodevice=/dev/disk/by-uuid/xxxxxxxxxxxxxxxxxxx rw clocksource=hpet

extlinuxをインストール

[root@arch ~]# extlinux --install /mnt/usb/arch/boot/syslinux
/mnt/usb/arch/boot/syslinux is device /dev/sdb1

usbをアンマウントしてお終いです。

umount /mnt/usb


APU実機を使いSSDにヘッドレスブートできるArch Linuxをインストール

基本的には標準のArch Linux インストールと同じです。違いはシリアルの設定のみ。
パーティションニングはfdiskなので省略。設定後のSSDディスクの状態です。

Device     Boot  Start       End   Sectors  Size Id Type
/dev/sda1  *      2048    206847    204800  100M 83 Linux
/dev/sda2       206848 125045423 124838576 59.5G 83 Linux

フォーマット

mkfs.ext2 /dev/sda1
mkfs.ext4 /dev/sda2
tune2fs -c 0 -o journal_data_writeback /dev/sda1
tune2fs -c 0 -o journal_data_writeback /dev/sda2
mkdir /mnt/boot
mount /dev/sda1 /mnt/boot
mount /dev/sda2 /mnt

ミラーサーバーを設定

nano /etc/pacman.d/mirrorlist
    ## Score: 1.5, Japan
    Server = http://ftp.jaist.ac.jp/pub/Linux/ArchLinux/$repo/os/$arch
    ## Score: 1.9, Japan
    Server = http://ftp.tsukuba.wide.ad.jp/Linux/archlinux/$repo/os/$arch

基本パッケージのインストール

pacstrap /mnt base base-devel
10分以上かかります。
pacstrap /mnt grub-bios os-prober
pacstrap /mnt net-tools netctl dnsutils sysstat mlocate openssh syslog-ng

syslinux使わないので不要です。
fstabを生成

genfstab -U -p /mnt >> /mnt/etc/fstab

chrootでの設定はシリアルの設定前までは標準と同じです。

arch-chroot /mnt

ロケールの生成と設定
nano /etc/locale.gen
    en_US.UTF-8 UTF-8
    ja_JP.UTF-8 UTF-8
locale-gen
echo LANG=en_US.UTF-8 > /etc/locale.conf
export LANG=en_US.UTF-8
echo "KEYMAP=jp106" > /etc/vconsole.conf
タイムゾーンとハードウェアクロックの設定
ln -s /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
hwclock --systohc --utc
ホストネームの設定
echo "arch" > /etc/hostname
passwd
# ram image の作成
# mkinitcpio -p linux
ワイヤレスツールのインストール、ネットワークの設定
pacman -S wireless_tools wpa_supplicant wpa_actiond dialog
systemctl enable dhcpcd.service
nano /etc/ssh/sshd_config
PermitRootLogin yes
systemctl enable sshd.service

grub インストール
grub-install --target=i386-pc --boot-directory=/boot --recheck --debug /dev/sda
grub-mkconfig -o /boot/grub/grub.cfg
cp /usr/share/locale/en@quot/LC_MESSAGES/grub.mo /boot/grub/locale/en.mo
cd /boot/grub/locale
gzip en.mo

さて、ここからが標準のインストールと違うところです。

nano /etc/default/grub

以下の通り、grubにシリアルを設定します。

GRUB_CMDLINE_LINUX_DEFAULT="consgrub-install /dev/sdaole=tty0 console=ttyS0,115200n8"

## Serial console
GRUB_TERMINAL=serial
GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1"

設定した内容を反映させます。

grub-install /dev/sda

grub.cfg をビルド

grub-mkconfig -o /boot/grub/grub.cfg

chroot環境より抜けインストール用ディレクトリをunmount後、システム再起動。

exit
umount /mnt/{boot,}
reboot

めでたく、ヘッドレスArch Linuxのインストールが完了しました。

(PC_Audio)   2016/12/10

コメントする

UPnPの世界(5)


前々回紹介したメールの中で

4. Separation of Ethernet(lightmpd.conf-upnpgw-nasgate)

図は省略

lightMPD-v1.1.0 はこのモードのための次期バージョンです。
このモードでlightMPDはJPLAYのdual modeに匹敵するものになると思います。
期待しています。

と書きましたが、間違えでした。作者のデジファイのおとさんがlightMPDの掲示板の「player側にupnpgw を使う場合の設定」というタイトルの書き込みで解説されていますが、back-end側をlightmpd/upnpgwにして、設定ファイルの/lightMPD/conf/lightmpd.conf-upnpgw-nasgateを使えば、イーサネットの分離モードが出来るのですね。

というわけで試してみました。これは素晴らしいです。音はアダプターモードよりさらによくなります。楽器が目の前でなっているという音がします。解像度は高いのですが、ギスギスしたところはなく、自然に聴けます。予想通り、これが最高峰のようです。
ちょっと悪戦苦闘しましたが、設定は作者が簡明に解説されているので、問題なくできます。悪戦苦闘した部分は後で紹介することにして、設定方法について簡単に紹介します(詳しく知りたければ、asoyajiさんのサイトに丁寧に解説されています)。

まず、front側ですが、デジファイのおとさんの書き込みにあるpolipoのクライアントアドレスの修正以外はipアドレスの設定だけですので、省略。
次にback-end側。これも /lightmpd/lightmpd.mpd のオリジナルの内容を全て削除して、デジファイさんの書き込みの切り取り線内の部分をそのまま張り付ければいいだけなので、省略。
back-end側のmpd.confはそのまま使えます。
というわけで、変更は修正の一行と外部接続用の固定ipアドレスの設定一行の二行だけですので、超簡単です。多分4種類のモード中で一番簡単ですね。では、いったい何に悪戦苦闘したのか。

僕のapu二台の構成は

Back-EndFront-End
apu1c2apu2c4

です。 Front-End側のapu2c4は問題なく立ち上がるのですが、Back-End(Player)側のapu1c2は立ち上がりはするが、

# ifconfig
lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

# ls /var/lightMPD/etc/
default   mpd.conf  network   ntp.conf  samba     timezone
#

となっていて、lightMPDの初期設定がうまくいっていないようです。
シリアルのログはブート直後

[    0.000000] Linux version 4.6.5-rt10-lightMPD (araki@lmpddev) (gcc version 5.3.1 20160413 (Ubuntu 5.3.1-14ubuntu2) ) #1 SMP PREEMPT RT Fri Aug 12 23:09:33 JST 2016
[    0.000000] Command line: root=/dev/ram0 ro console=ttyS0,115200n8 ramdisk_size=98304 rootfstype=romfs rootdelay=5 clocksource=tsc idle=poll processor.max_cstate=1 isolcpus=1 nohz_full=1 rcu_nocbs=1 lightmpd.systype=apu1 lightmpd.bootdev=/dev/sda1

となっていて、ブートそのものは問題なく開始されていますが、その後

[    2.812483] usb 3-1: New USB device found, idVendor=058f, idProduct=6366
[    2.812488] usb 3-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[    2.812492] usb 3-1: Product: Flash Card Reader/Writer
[    2.812496] usb 3-1: Manufacturer: Generic
[    2.812499] usb 3-1: SerialNumber: 058F63666485
[    2.812974] usb-storage 3-1:1.0: USB Mass Storage device detected
[    2.836466] scsi host0: usb-storage 3-1:1.0
[    2.851868] usb 1-1: SerialNumber: P16019650703685F1EEC8E33
[    2.857738] Waiting 5 sec before mounting root device...
[    2.863508] usb-storage 1-1:1.0: USB Mass Storage device detected
[    2.879811] scsi host1: usb-storage 1-1:1.0
[    3.019828] usb 1-5: new high-speed USB device number 3 using ehci-pci
[    3.210761] usb 1-5: New USB device found, idVendor=221b, idProduct=0006
[    3.217469] usb 1-5: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[    3.224619] usb 1-5: Product: Phasemation HD7-192
[    3.229359] usb 1-5: Manufacturer: KYODO
[    3.530140] clocksource: Switched to clocksource tsc
[    3.871676] scsi 0:0:0:0: Direct-Access     Multiple Card  Reader     1.00 PQ: 0 ANSI: 4
[    3.874264] sd 0:0:0:0: [sda] Attached SCSI removable disk
[    3.950756] scsi 1:0:0:0: Direct-Access     UFD 2.0  Silicon-Power4G  PMAP PQ: 0 ANSI: 6
[    3.952742] sd 1:0:0:0: [sdb] 7593984 512-byte logical blocks: (3.89 GB/3.62 GiB)
[    3.953860] sd 1:0:0:0: [sdb] Write Protect is off
[    3.954981] sd 1:0:0:0: [sdb] No Caching mode page found
[    3.954986] sd 1:0:0:0: [sdb] Assuming drive cache: write through
[    3.960489]  sdb: sdb1
[    4.012098] sd 1:0:0:0: [sdb] Attached SCSI removable disk
[    7.939392] RAMDISK: gzip image found at block 0
[    9.674566] VFS: Mounted root (romfs filesystem) readonly on device 1:0.
[    9.681475] devtmpfs: mounted
[    9.687675] Freeing unused kernel memory: 720K (ffffffff81668000 - ffffffff8171c000)
[    9.695598] Write protecting the kernel read-only data: 6144k
[    9.701866] Freeing unused kernel memory: 120K (ffff8800013e2000 - ffff880001400000)
[    9.716584] Freeing unused kernel memory: 780K (ffff88000153d000 - ffff880001600000)
lightMPD initializer start SYSTYPE=apu1 BOOTDEV=/dev/sda1
setup /var  OK
mount: mounting /dev/sda1 on /mnt failed: No such file or directory
copy script file   OK
copy conf file   OK
OK
config umount: can't unmount /mnt: Invalid argument
OK
Starting logging: OK
read-only file system detected...done
Starting network...
sh: yes: unknown operand
sh: yes: unknown operand
Starting telnetd: OK

Welcome to lightMPD
lightmpd login: root
Password:

「ウームですね」、ブートの終わりで起動用のUSBメモリのデバイス名がsdaからsdbに変わってしまって、lightMPDの初期処理がエラーとなっているように見えます。

「変だなぁ。Front-End側のapu2c4ではOKだし、USBメモリはちゃんと上段に差しているし、同じ手順で作ったv1.02なら問題は起きないのに何故だろう。試しにと、リブート(reboot)してみました。すると、

・・・・
[    2.974530] usb 3-1: Product: Flash Card Reader/Writer
[    2.979739] usb 3-1: Manufacturer: Generic
[    2.983844] usb 3-1: SerialNumber: 058F63666485
[    2.989027] usb-storage 3-1:1.0: USB Mass Storage device detected
[    3.005391] scsi host1: usb-storage 3-1:1.0
[    3.099015] usb 1-5: New USB device found, idVendor=221b, idProduct=0006
[    3.105718] usb 1-5: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[    3.112875] usb 1-5: Product: Phasemation HD7-192
[    3.117591] usb 1-5: Manufacturer: KYODO
[    3.729873] scsi 0:0:0:0: Direct-Access     UFD 2.0  Silicon-Power4G  PMAP PQ: 0 ANSI: 6
[    3.730967] sd 0:0:0:0: [sda] 7593984 512-byte logical blocks: (3.89 GB/3.62 GiB)
[    3.732080] sd 0:0:0:0: [sda] Write Protect is off
[    3.733204] sd 0:0:0:0: [sda] No Caching mode page found
[    3.733208] sd 0:0:0:0: [sda] Assuming drive cache: write through
[    3.738959]  sda: sda1
[    3.777203] sd 0:0:0:0: [sda] Attached SCSI removable disk
[    3.878343] clocksource: Switched to clocksource tsc
[    4.049946] scsi 1:0:0:0: Direct-Access     Multiple Card  Reader     1.00 PQ: 0 ANSI: 4
[    4.052549] sd 1:0:0:0: [sdb] Attached SCSI removable disk
[    7.878141] RAMDISK: gzip image found at block 0
[    9.621307] VFS: Mounted root (romfs filesystem) readonly on device 1:0.
[    9.628269] devtmpfs: mounted
[    9.634421] Freeing unused kernel memory: 720K (ffffffff81668000 - ffffffff8171c000)
[    9.642325] Write protecting the kernel read-only data: 6144k
[    9.648580] Freeing unused kernel memory: 120K (ffff8800013e2000 - ffff880001400000)
[    9.663330] Freeing unused kernel memory: 780K (ffff88000153d000 - ffff880001600000)
lightMPD initializer start SYSTYPE=apu1 BOOTDEV=/dev/sda1
setup /var  OK
copy script file   OK
copy conf file lightmpd.conf mpd.conf sysctl.conf upmpdcli.template   OK
OK
config pid 87's current scheduling policy: SCHED_FIFO
pid 87's current scheduling priority: 50
pid 87's new scheduling policy: SCHED_FIFO
pid 87's new scheduling priority: 99
OK
sysctl vm.swappiness = 0
kernel.sched_rt_runtime_us = -1
kernel.sched_rt_period_us = 10000
kernel.printk = 4 4 1 4
OK
Starting logging: OK
read-only file system detected...done
Starting network...
Getting initial time via ntp.
Starting telnetd: OK
Starting polipo: OK
 webconsole started
Starting mpd affinity mask 2: OK
set affinity 2 1 2 (("ehci_hcd:usb1" "FIFO:99"))OK
Starting upmpdcli: OK

Welcome to lightMPD
lightmpd login: root
Password:
# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0D:B9:31:30:20
          inet addr:10.0.0.2  Bcast:10.0.0.3  Mask:255.255.255.252
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:3 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:126 (126.0 B)

eth1      Link encap:Ethernet  HWaddr 00:0D:B9:31:30:21
          inet addr:10.0.1.2  Bcast:10.0.1.3  Mask:255.255.255.252
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:6 errors:0 dropped:0 overruns:0 frame:0
          TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1
          RX bytes:524 (524.0 B)  TX bytes:524 (524.0 B)

# ls /var/lightMPD/etc/
default            nasmount.sh        resolv.conf        upmpdcli.template
lightmpd.conf      network            samba
localtime          ntp.conf           sysctl.conf
mpd.conf           polipo.conf        timezone

「あら不思議」。ちゃんと起動出来ていますね。
「変だなぁ。mSSD(mSata)だとどうなるのかな」と試してみました。
mSSDにイメージを書き込んで、システムを作成するする必要がありますが、DDWINはmSSDを認識しないので、ubuntu環境を使うことにしました。sambaクライアントが動いているので、あらかじめGUIでホームディレクトリに必要なファイルをコピーしておきます。

yo@ubuntu:~$ sudo fdisk /dev/sdb
yo@ubuntu:~$ sudo dd if=apuboot2g.img of=/dev/sdb
yo@ubuntu:~$ sudo reboot
yo@ubuntu:~$ df -h
yo@ubuntu:~$ cd /media/LMPDAPU/
yo@ubuntu:/media/LMPDAPU$ unzip /home/yo/lightmpd-upnpgw-apu1-v1.0.0.zip
yo@ubuntu:/media/LMPDAPU$ nano lightMPD/lightmpd.conf
back-end用内容を貼り付け

やってみましたが、起動エラー。リブートしてもエラー。必ずエラーになるという意味では状況は悪化してしまいました。
「あれれれれ。どうなっているのか。こうなるとお手上げだなぁ。」
まあ、この程度のことでメゲていては、apuは使えませんね。気を取り直して、いろいろ考える。

まずbiosのチェック。ご本家(PC Engines)の情報はこちら。日本語の情報はこちら
ご本家のサイトに、 TinyCore Linux を用いたBIOSアップデート用のインストーラが公開されているので、それをダウンロード。USBメモリを差して、ダウンロードしたapu-tinycore-usb-installer.exeを実行すれば、ヘッドレスブートされるTinyCoreがUSBメモリに作成されます。作成されたUSBメモリのルート(ルートしかありませんが)にアップデートするBIOSイメージをコピーし、シリアル接続したAPUで起動します。起動完了後

[root@box:~]$ flashrom -w apu140908.rom -p internal

これでアップデートできます。
試してみましたが、残念ながら結果は同じ。USBメモリの電源オンではエラーになるし、mSSDは全てエラーになります。
次にブートの設定ファイルをチェック。lightMPDapu1-v1.0.2-64のmenu.istは。

kernel		/boot/bzImage-64 root=/dev/ram0 ro console=ttyS0,115200n8 ramdisk_size=65536 rootfstype=romfs rootdelay=5 clocksource=tsc idle=poll processor.max_cstate=1 isolcpus=1 nohz_full=1 rcu_nocbs=1 lightmpd.systype=apu1 lightmpd.bootdev=/dev/sda1

lightmpd-upnpgw-apu1-v1.0.0のmenu.istは。

kernel          /boot/bzImage-4.6.5rt10-64 root=/dev/ram0 ro console=ttyS0,115200n8 ramdisk_size=98304 rootfstype=romfs rootdelay=5 clocksource=tsc idle=poll processor.max_cstate=1 isolcpus=1 nohz_full=1 rcu_nocbs=1 lightmpd.systype=apu1 lightmpd.bootdev=/dev/sda1

と、違いは bzImage と ramdisk_size だけ。試しに ramdisk_sizeと rootdelayをいろいろ変えてみたが、変化はなし。/bootはtelnetで簡単に修正出来るので楽ですね。
「ウーム、ここまで来ると残った手は少ないなぁ」。悩む。

今回使ったapu1cは2台目として入手したものなのですが、その前にgetしたファイナルベータの試作機をnas用に使っています。apu2c4ではOKなのだからハードの差があるのかなと考え、やけのやんぱち、nas用に使っているapu1cと取り替えてみる。
状況は変わらず。

「もう駄目だね。こうなったらデジファイのおとさんのサイトの掲示板に駆け込むしかないかな」と考えましたが、mSSDを取り外すため蓋をあけたので、SDカードを試していないことに気が付いた。

やってみました。まったく問題なし。電源オンもリブートも問題なく起動出来ます。素晴らしい。

USBメモリの起動は結果が不安定なので、いろいろ試してみました。「どうなってるんだ、これ」という結果ですね。

いろいろやってみて分かったことをまとめると

使用媒体PowerOnreboot
usbメモリ(SiliconPower)50%OK
mSSD(mSata)NGNG
SDカードOKOK
usbメモリ(KingMAX 4GB)OKOK
usbメモリ(KingMAX 8GB)NGNG
usbメモリ(PicoDrive)OKNG

となります。試した順番に並べました。NGはエラーになり動かない。OKは動く。%は動いたり動かなかったりするが、その確率(数字は感じのレベル)。rebootはrebootコマント。PowerOnは電源オンですが、タイミングはいろいろです。

「もう、何がなんだか、訳がわからん」という感想。
同じメーカのメモリなのに片方は全てOK、もう片方は全てNGと真逆逆の結果とか、rebootなら全てOKのメモリがある一方、PowerOnなら全てOKというメモリがあるとか、ともかく奇怪な結果です。

まあトラブルを回避するためには、SDカードから起動すれば全てOKなので、問題はなさそうです。デジファイのおとさんの掲示板には一応報告しておきますかね。

きちんと音を出すまでにいろいろありましたが、この音は本当に素晴らしいですね。デュアルモードの最高峰です。苦労の甲斐はあったと思います。トラブルの原因がAPU側にあるのか、lightMPD側なのかは不明ですが、一応の回避策はあるので、十分使えます。

こうしてみると、lightmpd/upnpgwのデュアルモードはいろいろな可能性がありますね。
UPnP化に不都合があれば、オーディオ用ネットワークルーターモードという手がとれます。
Apuが一台しかなくても、アダプターモードでBack-EndをRaspberryPIかBeagleBone Blackなどを使うことができます。Apuが一台+Atom機という環境でもAtom機側をVoyageMPDにすれば、対応できます。
イーサネットの分離モードは今のところApu二台が必要ですが、これも次の改版でRaspberryPIかBeagleBone Blackなどを使うことが出来るようになりそうです。
設定ファイルは良く出来ているので、Linuxの知識はゼロで操作できるというのも強みです。
今のところApuを一台は持っている必要が有るというのがちょっと高めのハードルですが、ここがRPIやBBB/BBGで出来るとなれば、強力になるでしょうね。

(PC_Audio)   2016/12/03

コメントする

UPnPの世界(4)


前回紹介したメールを書いている時に気が付いたのですが、lightmpd.conf-upnpgwの図がこんな具合になっているのですよね。



back-endの箱の中にはvolumioとかvoyageMPDなんて書いてありますね。
サイトの図では



となっています。箱の上にハードの名前。下にlightMPDv1.0.2underとあります。
「あれれれれ!!」とビックリ。「ひょっとして、back-end側はlightmpdだけではなく、mpdなら何でも動くのかな」という具合にみえる。早速、試してみました。

使ったのはBoticです。「Boticって何?」という方はこちら(たかじんさんの解説)を参照して下さい。
僕がBoticを選んだ理由はBBB(BeagleBone Black)/BBG(BeagleBone Green)はこれを使わないとi2s接続が出来ないからです。lightmpdのrpi版はi2s接続に対応していますが、BBB/BBG版はi2s接続に対応していません。

やり方はfront-end側からhttp streamとしてデータが送られてくるわけなので、それらを受けられるよう、ネットワークとMPDを設定すればいいです。この場合は、lightmpdというお手本(conf)があるから、マネをすればよいということになります。

B3D-A4495をBoticで動かしている環境で試してみたら、簡単に繋がりました。
Front-Endはrpiと接続しているAPU2c4を線だけつなぎ直して使用しました。




変更は /etc/network/interfaces と /etc/mpd.conf だけです。/etc/network/interfacesについてはipアドレスの設定部分だけです。

# The primary network interface
auto eth0
##iface eth0 inet dhcp
iface eth0 inet static
        address 10.0.0.2
        netmask 255.255.255.252
        network 10.0.0.0
        broadcast 10.0.0.3
        gateway 10.0.0.1
        dns-nameservers 192.168.0.0

次にmpd.comf。これはあっちこっち変更したので、ちょっと長くなりますが、全部引用し、変更(追加、修正)した部分を赤で示します。B3D-A4495をi2s接続した時の変更内容です。

# An example configuration file for MPD.
# Read the user manual for documentation: http://www.musicpd.org/doc/user/
# or /usr/share/doc/mpd/user-manual.html


# Files and directories #######################################################
#
# This setting controls the top directory which MPD will search to discover the
# available audio files and add them to the daemon's online database. This
# setting defaults to the XDG directory, otherwise the music directory will be
# be disabled and audio files will only be accepted over ipc socket (using
# file:// protocol) or streaming files over an accepted protocol.
#
music_directory         "/data"
#
# This setting sets the MPD internal playlist directory. The purpose of this
# directory is storage for playlists created by MPD. The server will use
# playlist files not created by the server but only if they are in the MPD
# format. This setting defaults to playlist saving being disabled.
#
playlist_directory              "/var/lib/mpd/playlists"
#
# This setting sets the location of the MPD database. This file is used to
# load the database at server start up and store the database while the
# server is not up. This setting defaults to disabled which will allow
# MPD to accept files over ipc socket (using file:// protocol) or streaming
# files over an accepted protocol.
#
db_file                 "/var/lib/mpd/tag_cache"
#
# These settings are the locations for the daemon log files for the daemon.
# These logs are great for troubleshooting, depending on your log_level
# settings.
#
# The special value "syslog" makes MPD use the local syslog daemon. This
# setting defaults to logging to syslog, otherwise logging is disabled.
#
log_file                        "/var/log/mpd/mpd.log"
#
# This setting sets the location of the file which stores the process ID
# for use of mpd --kill and some init scripts. This setting is disabled by
# default and the pid file will not be stored.
#
pid_file                        "/run/mpd/pid"
#
# This setting sets the location of the file which contains information about
# most variables to get MPD back into the same general shape it was in before
# it was brought down. This setting is disabled by default and the server
# state will be reset on server start up.
#
state_file                      "/var/lib/mpd/state"
#
# The location of the sticker database.  This is a database which
# manages dynamic information attached to songs.
#
sticker_file                   "/var/lib/mpd/sticker.sql"
#
###############################################################################


# General music daemon options ################################################
#
# This setting specifies the user that MPD will run as. MPD should never run as
# root and you may use this setting to make MPD change its user ID after
# initialization. This setting is disabled by default and MPD is run as the
# current user.
#
##user                            "mpd"
user                           "root"
#
# This setting specifies the group that MPD will run as. If not specified
# primary group of user specified with "user" setting will be used (if set).
# This is useful if MPD needs to be a member of group such as "audio" to
# have permission to use sound card.
#
#group                          "nogroup"
group                          "root"
#
# This setting sets the address for the daemon to listen on. Careful attention
# should be paid if this is assigned to anything other then the default, any.
# This setting can deny access to control of the daemon. Choose any if you want
# to have mpd listen on every address
#
# For network
##bind_to_address         "any"
bind_to_address                "localhost"
#
# And for Unix Socket
#bind_to_address                "/run/mpd/socket"
#
# This setting is the TCP port that is desired for the daemon to get assigned
# to.
#
#port                           "6600"
port                            "6600"
#
# This setting controls the type of information which is logged. Available
# setting arguments are "default", "secure" or "verbose". The "verbose" setting
# argument is recommended for troubleshooting, though can quickly stretch
# available resources on limited hardware storage.
#
#log_level                      "default"
#
# If you have a problem with your MP3s ending abruptly it is recommended that
# you set this argument to "no" to attempt to fix the problem. If this solves
# the problem, it is highly recommended to fix the MP3 files with vbrfix
# (available as vbrfix in the debian archive), at which
# point gapless MP3 playback can be enabled.
#
#gapless_mp3_playback                   "yes"
#
# Setting "restore_paused" to "yes" puts MPD into pause mode instead
# of starting playback after startup.
#
#restore_paused "no"
#
# This setting enables MPD to create playlists in a format usable by other
# music players.
#
#save_absolute_paths_in_playlists       "no"
#
# This setting defines a list of tag types that will be extracted during the
# audio file discovery process. The complete list of possible values can be
# found in the mpd.conf man page.
#metadata_to_use        "artist,album,title,track,name,genre,date,composer,performer,disc"
#
# This setting enables automatic update of MPD's database when files in
# music_directory are changed.
#
#auto_update    "yes"
#
# Limit the depth of the directories being watched, 0 means only watch
# the music directory itself.  There is no limit by default.
#
#auto_update_depth "3"
#
###############################################################################


# Symbolic link behavior ######################################################
#
# If this setting is set to "yes", MPD will discover audio files by following
# symbolic links outside of the configured music_directory.
#
##follow_outside_symlinks "yes"
follow_outside_symlinks "yes"
#
# If this setting is set to "yes", MPD will discover audio files by following
# symbolic links inside of the configured music_directory.
#
##follow_inside_symlinks          "yes"
follow_inside_symlinks          "yes"
#
###############################################################################


# Zeroconf / Avahi Service Discovery ##########################################
#
# If this setting is set to "yes", service information will be published with
# Zeroconf / Avahi.
#
#zeroconf_enabled               "yes"
#
# The argument to this setting will be the Zeroconf / Avahi unique name for
# this MPD server on the network.
#
#zeroconf_name                  "Music Player"
#
###############################################################################


# Permissions #################################################################
#
# If this setting is set, MPD will require password authorization. The password
# can setting can be specified multiple times for different password profiles.
#
#password                        "password@read,add,control,admin"
#
# This setting specifies the permissions a user has who has not yet logged in.
#
##default_permissions             "read,add,control,admin"
default_permissions             "read,add,control,admin"
#
###############################################################################


# Database #######################################################################
#

##database {
##       plugin "proxy"
##       host "other.mpd.host"
##       port "6600"
##}
database {
   plugin                       "simple"
   path                         "/var/lib/mpd/tag_cache"
   compress                     "no"
}

# Input #######################################################################
#
input {
        plugin "curl"
#       proxy "proxy.isp.com:8080"
#       proxy_user "user"
#       proxy_password "password"
        proxy      "10.0.0.1:8123"
}

#
###############################################################################

# Audio Output ################################################################
#
# MPD supports various audio output types, as well as playing through multiple
# audio outputs at the same time, through multiple audio_output settings
# blocks. Setting this block is optional, though the server will only attempt
# autodetection for one sound card.
#
# An example of an ALSA output:
#
audio_output {
        type            "alsa"
        name            "Botic"
        device          "hw:0,0"
        dsd_usb         "yes"
        dop             "yes"
##        dsd_usb         "no"
##        dsd_native      "yes"
##        dsd_native_type "3"
        priority        "FIFO:32"
        period_time     "1"
        mixer_type      "software"
#       mixer_device    "default"       # optional
#       mixer_control   "PCM"           # optional
#       mixer_index     "0"             # optional
}
#
# An example of an OSS output:

#audio_output {
#       type            "oss"
#       name            "My OSS Device"
#       device          "/dev/dsp"      # optional
#       mixer_type      "hardware"      # optional
#       mixer_device    "/dev/mixer"    # optional
#       mixer_control   "PCM"           # optional
#}
#
# An example of a shout output (for streaming to Icecast):
#
#audio_output {
#       type            "shout"
#       encoding        "ogg"                   # optional
#       name            "My Shout Stream"
#       host            "localhost"
#       port            "8000"
#       mount           "/mpd.ogg"
#       password        "hackme"
#       quality         "5.0"
#       bitrate         "128"
#       format          "44100:16:1"
#       protocol        "icecast2"              # optional
#       user            "source"                # optional
#       description     "My Stream Description" # optional
#       url             "http://example.com"    # optional
#       genre           "jazz"                  # optional
#       public          "no"                    # optional
#       timeout         "2"                     # optional
#       mixer_type      "software"              # optional
#}
#
# An example of a recorder output:
#
#audio_output {
#       type            "recorder"
#       name            "My recorder"
#       encoder         "vorbis"                # optional, vorbis or lame
#       path            "/var/lib/mpd/recorder/mpd.ogg"
##      quality         "5.0"                   # do not define if bitrate is defined
#       bitrate         "128"                   # do not define if quality is defined
#       format          "44100:16:1"
#}
#
# An example of a httpd output (built-in HTTP streaming server):
#
#audio_output {
#       type            "httpd"
#       name            "My HTTP Stream"
#       encoder         "vorbis"                # optional, vorbis or lame
#       port            "8000"
#       bind_to_address "0.0.0.0"               # optional, IPv4 or IPv6
#       quality         "5.0"                   # do not define if bitrate is defined
#       bitrate         "128"                   # do not define if quality is defined
#       format          "44100:16:1"
#       max_clients     "0"                     # optional 0=no limit
#}
#
# An example of a pulseaudio output (streaming to a remote pulseaudio server)
# Please see README.Debian if you want mpd to play through the pulseaudio
# daemon started as part of your graphical desktop session!
#
#audio_output {
#       type            "pulse"
#       name            "My Pulse Output"
#       server          "remote_server"         # optional
#       sink            "remote_server_sink"    # optional
#}
#
# An example of a winmm output (Windows multimedia API).
#
#audio_output {
#       type            "winmm"
#       name            "My WinMM output"
#       device          "Digital Audio (S/PDIF) (High Definition Audio Device)" # optional
#               or
#       device          "0"             # optional
#       mixer_type      "hardware"      # optional
#}
#
# An example of an openal output.
#
#audio_output {
#       type            "openal"
#       name            "My OpenAL output"
#       device          "Digital Audio (S/PDIF) (High Definition Audio Device)" # optional
#}
#
## Example "pipe" output:
#
#audio_output {
#       type            "pipe"
#       name            "my pipe"
#       command         "aplay -f cd 2>/dev/null"
## Or if you're want to use AudioCompress
#       command         "AudioCompress -m | aplay -f cd 2>/dev/null"
## Or to send raw PCM stream through PCM:
#       command         "nc example.org 8765"
#       format          "44100:16:2"
#}
#
## An example of a null output (for no audio output):
#
#audio_output {
#       type            "null"
#       name            "My Null Output"
#       mixer_type      "none"                  # optional
#}
#
# If MPD has been compiled with libsamplerate support, this setting specifies
# the sample rate converter to use.  Possible values can be found in the
# mpd.conf man page or the libsamplerate documentation. By default, this is
# setting is disabled.
#
#samplerate_converter           "Fastest Sinc Interpolator"
#
###############################################################################


# Normalization automatic volume adjustments ##################################
#
# This setting specifies the type of ReplayGain to use. This setting can have
# the argument "off", "album", "track" or "auto". "auto" is a special mode that
# chooses between "track" and "album" depending on the current state of
# random playback. If random playback is enabled then "track" mode is used.
# See  for more details about ReplayGain.
# This setting is off by default.
#
#replaygain                     "album"
#
# This setting sets the pre-amp used for files that have ReplayGain tags. By
# default this setting is disabled.
#
#replaygain_preamp              "0"
#
# This setting sets the pre-amp used for files that do NOT have ReplayGain tags.
# By default this setting is disabled.
#
#replaygain_missing_preamp      "0"
#
# This setting enables or disables ReplayGain limiting.
# MPD calculates actual amplification based on the ReplayGain tags
# and replaygain_preamp / replaygain_missing_preamp setting.
# If replaygain_limit is enabled MPD will never amplify audio signal
# above its original level. If replaygain_limit is disabled such amplification
# might occur. By default this setting is enabled.
#
#replaygain_limit               "yes"
#
# This setting enables on-the-fly normalization volume adjustment. This will
# result in the volume of all playing audio to be adjusted so the output has
# equal "loudness". This setting is disabled by default.
#
#volume_normalization           "no"
#
###############################################################################


# Character Encoding ##########################################################
#
# If file or directory names do not display correctly for your locale then you
# may need to modify this setting.
#
filesystem_charset              "UTF-8"
#
# This setting controls the encoding that ID3v1 tags should be converted from.
#
id3v1_encoding                  "UTF-8"
#
###############################################################################


# SIDPlay decoder #############################################################
#
# songlength_database:
#  Location of your songlengths file, as distributed with the HVSC.
#  The sidplay plugin checks this for matching MD5 fingerprints.
#  See http://www.c64.org/HVSC/DOCUMENTS/Songlengths.faq
#
# default_songlength:
#  This is the default playing time in seconds for songs not in the
#  songlength database, or in case you're not using a database.
#  A value of 0 means play indefinitely.
#
# filter:
#  Turns the SID filter emulation on or off.
#
#decoder {
#       plugin                  "sidplay"
#       songlength_database     "/media/C64Music/DOCUMENTS/Songlengths.txt"
#       default_songlength      "120"
#       filter "true"
#}
#
###############################################################################

realtime_option {
        memlock                 "yes"
        stack_reserve           "1024"
        heap_reserve            "10240"
        main_priority           "OTHER:0"
        player_priority         "FIFO:32"
        decoder_priority        "FIFO:31"
        update_priority         "OTHER:0"
}

変更は10箇所です。「これを変える必要あるのかな?」という部分はあるのですが、とりあえずlightMPD.rpiの設定に合わせました。
Audio Outputの変更ですが、dsd nativeモードをdopモードに変更しています。最初はdsd nativeモードのままで立ち上げたのですが、どうやっても音が出ないので、dopモードに変更したら音が出るようになりました。dlna方式って dsd nativeモードに対応していないのですかね。
ついでですので、僕の環境でboticにB3D-A4495を繋いだ時の残りの二つの設定ファイル(uEnv.txtとfstab)の変更も残しておきます。まず/boot/uEnv.txt。

##optargs=snd_soc_botic.ext_masterclk=3 snd_soc_botic.serconfig=MMMM
optargs=snd_soc_botic.ext_masterclk=3 snd_soc_botic.serconfig=MMMM snd_soc_botic.dsd_format_switch=3

次に/etc/fstab。

//192.168.0.35/public /data cifs username=yo,password=,file_mode=0666,dir_mode=0766,iocharset=utf8,rsize=130048,wsize=4096 0 0

この二つとmpd.confのAudio Output部分の##でコメントアウトしてある3行だけで、boticは音が出るようになります。設定の簡単さは「サルでも出来る」レベルですね。

boticデュアルモードの音ですが、やはり良くなっていると思います。i2s接続ではシングルモードでも十分な音ですが、さらにこなれた音になっていると思います。とても気持ちよく聴けました。
これならaitlaboのDACをi2s接続しているメインシステムでも使えそうなので、もう一台apuをスイスに注文したものか、円安なので、悩んでいます。しかし「無知・無能・無謀なトランプ=アメリカ経済混乱」なのに、なんで円安になるのですかね。「トランプ=アメリカ経済活況」とはいったい何を考えているのかしら。

* 「無知・無能・無謀なトランプ」は残念ながら僕のオリジナルではなく、ディープ・スペクターさんのNHK「クローズアップ現代」での発言です。

(PC_Audio)   2016/11/26

コメントする

UPnPの世界(3)


ヨーロッパの方から「UPnP対応のlightMPDの感想を聞かせてほしい」という依頼があって、返信したメールのほぼ全文です。私信ですが、先方の了解は得ていますので、公開します。

僕はWindows ServerでJPLAYを、自作のarch linux環境でMPDを動かし音楽
(主にクラシック)を聴いています。そして、多くのWindows & Linuxの音楽
プレーヤの中でJPLAYが最高の音のプレーヤだと思っています。

LightMPDは日本製のLinux音楽プレーヤです。オーディオファイルに特化した
ターンキーシステムです。LightMPDのApu版は2014年の春に公開されました。
早速試してみましたが、僕はその音質にあまり感心しませんでした。音が鮮明
(シャープ)すぎて、音楽を楽しむことができないと思ったので。多分、
チューニングのやりすぎが過度のシャープさを引き起しいるのだろうと推定
していました。

名前が示しているように、LightMPDは組み込みシステムをモデルにして、
コンパクトなRTカーネルとromfs、BusyBox などを使って、構成されています。
従って、その構成は大変シンプルです。これらのコンパクト化は音を高解像度の
明快なものしています。
しかしながら、チューニングにはブレークポイントがあります。このブレーク
ポイントを超えると音はやせ細り、悪くなります。僕はこれを自作のカーネルを
ビルドする時、何回も経験しました。チューニングのやりすぎは災いのもとです。

僕はlightMPDのApu版はこのブレークポイントを超えていると思います。
過度のコンパクトさがその音をだいなしにしています。だから僕はそれを
使っていませんでした。
しかし、熱狂的なlightMPDのファンにはこのシャープさと高解像度が支持されて
いました。僕はlightMPDの過度にシャープな音は一部のいわゆる
オーディオマニアに好まれる音なのだろうなと思っていました。

最近、僕はlightMPDがUPnPに対応したことを知りました。lightMPD/upnpgwと
いう名前のこの最新版はデュアルモードという機能も付け加えられています。
UPnPとデュアルモード。JPALY と lightMPD の最新版が同じような方向に
向かっているのは興味深いですね。もちろん、二つのプログラムの環境は
ヨーロッパと日本、Windows と Linuxとまったく違っているわけですが。

この新版はとても良い音がします。旧Apu版と比較すると、過度のシャープさが
薄れ、雰囲気のある音に変わっています。とりわけ、UPnPアダプタモード
(デュアルモード)は素晴らしい。僕はこのモードはほとんどJPALYにキャッチ
アップするところまで来ていると思います。僕は自作のlinux音楽システムを
lightMPD/upnpgw UPNPアダプタモードに変更しようかなと悩んでいます。

UPnP対応のlightMPDは4つのモードを持っています。lightMPD/upnpgw の
アーカイブのconfディレクトり(/lightmpd/conf)でこれらの4つのモードの
接続図を見ることができます。このメールにアーカイブを添付しておきます。
lightMPDをインストールするには、この他にブートイメージファイルが
必要となります。これらのconfファイルを見るときには等倍フォントを使う
必要があります。

4つのモートについて簡単にご紹介します。

1. UPnP Standalne Renderer mode(lightmpd.conf-standalone)

lightMPD/upnpgw
mpd <- upmpdcli <--> dlna controle point(kazoo,BubbleUPnP etc)
 |  eth0 192.168.x.x   192.168.x.z
 polipo(cache server) |
                      | 
                     dlna server(Twonky Media etc)
                       192.168.x.y 

このモードはUPnP対応のlightMPDの入門用のモードです。upmpdcli と polipo
を追加しただけで、これだけ変わるというのは驚きです。過度のシャープさが
低減し、もっと良い音がするようになっています。


2. Network Router for audio

Confファイルは lightmpd.conf-mpdgw です。
このモードは UPnP に対応していないので、僕は試したことがありません。


3. UPNP Adapter mode(lightmpd.conf-upnpgw)

lightMPD-v1.0.2    lightMPD/upnpgw
mpd(upnp mode) <--> upmpdcli      <---> dlna control point(kazoo,BubbleUPnP)|
 | eth0 10.0.0.2  eth1 10.0.0.1               192.168.x.z
 |                             eth0 192.168.x.x
 |<----------------> polipo(cache server) <---> dlna server(Twonky Media etc)
                                              192.168.x.y

lightMPD-v1.0.2 は lightMPD の Apu対応の旧版です。
僕はこのモードを2台のapuを使う構成とapuとrpiを組み合わせるという構成で
試してみました。どちらの構成も良い音に効果的だと思いました。


4. Separation of Ethernet(lightmpd.conf-upnpgw-nasgate)

lightMPD-v1.1.0    lightMPD/upnpgw
mpd(upnp mode) <--> upmpdcli      <---> dlna control point(kazoo,BubbleUPnP)
 | eth0 10.0.0.2  eth1 10.0.0.1  eth0 192.168.x.y
 |<-->polipo(cache server)        <---> dlna server(Twonky Media etc)
   eth1 10.0.1.2          eth2 10.0.1.1

lightMPD-v1.1.0 はこのモードのための次期バージョンです。
このモードでlightMPDはJPLAYのdual modeに匹敵するものになると思います。
期待しています。


UPnP対応のlightMPDの効果は良い音だけではなく、操作性の改善もあげらると
思います。とりわけ設定が簡単になったことです。Confファイルはとても便利に
なりました。standalone modeではlightmpd.confで固定IPアドレスを指定する
一行の変更とmpd.confの終わりにhttp streamingのための4行を追加だけで
済みます。
UPnP Adapter modeではlightmpd.conf-upnpgwを使えば、standalone modeと
同じで済みます。

もう一つのUPnP対応のlightMPDの効果はlightMPDはrpi. bbb, cuboxなどの
linux向けのSoCボードのためのものなので、インテルアーキテクチュアのCPUと
比較してノイズ対策がしやすいという点です。
ApuのCPUはインテルアーキですが、ヘッドレスですのでディスプレイ関連の
ノイズとは無縁です。Apuに関しては下記のURLに情報があります。
http://www.pcengines.ch/apu2.htm

もちろん、Windowsパソコンも頑張ればノイズレスにチューンできることは知って
います。ただし、僕にはオーディオルームにデュアルモードのため、2台の
ノイズレスWindowsパソコンを用意することはやりすぎだという感じがします。

僕はApu機でWindows ServerとJPLAYを動かすことは可能だと推測しています。
しかし、やり方に関する情報がないのですよね。
Windows ServerとJPLAYを動かす方がインテルハードの世界でノイズを無理矢理
抑止し低減させるより楽かなとも思います。
さりながら、マイクロソフトの秘密主義のバリアを超えてハッキングし、
ジェイルブレークするには、難行苦行が待ち構えているのですよね。

従って、僕はオーディオルームではlinuxとlightMPDを使おうかなと思って
います。

メールは英文です。
最後に補足ではなく蛇足となるフォト。




メールでは説明がややこしくなるので、オーディオルームと書いていますが、実際はパソコン部屋での写真。写っているのはアンプの手前で使っているDA変換に関連する装置の全てです。こうやってみると、直接関連する(信号が流れる)装置より周辺の装置の方がずっと高価ですね。PhasemationのDACとルビジウムクロックを上下に並べていますが、 下のルビジウムクロックは上のDACの倍以上の値段、Apu2台重ねていますが、その後ろのUSBフィルター(INTONA)、電源フィルター(ifi iPurifier DC)とヤマハの電源(PA-6)の値段を合計すると、これも倍以上の価格となります。これらの周辺装置はなくても音は出せますが、有ると無いではイズレベルと音場感がまるで変わってしまいます。値段が3倍以上になっても、ピアニッシモでの音楽の聴こえ方を重視するなら、無しでは音楽を聴く気にならないのですよね。

(PC_Audio)   2016/11/19

コメントする

音楽用Arch Linuxシステムを作る(2)


X86標準アーキテクチュアのArch Linuxのインストールで以下の二つサイトを参考にしました。

パーティショニング

fdiskを使い、シンプルにボリューム全体を使うのが簡単です。ブートパーティションとルートパーティションを分ける必要があります。従ってfdiskの操作は以下の通りとなります。

fdisk /dev/sda
n -> 以降サイズの指定まで全てディフォルト -> +100M
a
n -> 以降は全てディフォルト
w

スワップは使わないで、以下の構成でパーティションが作成されます。

Device     Boot  Start      End  Sectors  Size Id Type
/dev/sda1  *      2048   206847   204800  100M 83 Linux
/dev/sda2       206848 78165359 77958512 37.2G 83 Linux

フォーマットします。

mkfs.ext2 /dev/sda1
mkfs.ext4 /dev/sda2
tune2fs -c 0 -o journal_data_writeback /dev/sda1
tune2fs -c 0 -o journal_data_writeback /dev/sda2

ブートパーティションはext2でないと駄目なようです ?
マウントします。

mkdir /mnt/boot
mount /dev/sda1 /mnt/boot
mount /dev/sda2 /mnt

第一パーティションが/mnt/bootに第二パーティションが/mntにマウントされます。
インストールするの前に日本のミラーサーバーを優先する設定をします。

nano /etc/pacman.d/mirrorlist
日本のサーバーの部分を上に持っていきます
ctrl+w Japan を検索。ctrl+k でカット(2回)。ctrl+u で貼り付け(1回でまとめて出来る)。
    ## Score: 1.5, Japan
    Server = http://ftp.jaist.ac.jp/pub/Linux/ArchLinux/$repo/os/$arch
    ## Score: 1.9, Japan
    Server = http://ftp.tsukuba.wide.ad.jp/Linux/archlinux/$repo/os/$arch
ctrl+o で書き込み。ctrl+xで終了。

nanoのショートカットは上記したものは覚えておいた方が操作が楽です。あと、Windows環境でSSHクライアントがputtyだと右クリックでpaste、左クリック(+ドラッグ)でcopyができます。
あと、「どうもtsukubaのサーバは調子が悪いことが多いので、jaistのを上にした方が吉では」だそうです。

基本的(必要最低限)なパッケージをルートパーティションへの書き込み

pacstrap /mnt base base-devel

ハードとネットワーク環境次第ですが、僕の環境で10分以上かかります。気長に待ちましょう。
pacstrapというのはpacmanの子分(?)なのですかね。

pacstrap /mnt grub-bios syslinux os-prober

マルチブートする人は、自動で他のシステムを検索してくれるようにos-probaerをインストールしておきましょう。syslinuxは次のシリアルコンソール起動のUSBメモリ作成のため必要です。

pacstrap /mnt net-tools netctl dnsutils sysstat mlocate openssh syslog-ng

ネットワーク関連の主要なパッケージもここでインストール。

genfstab -U -p /mnt >> /mnt/etc/fstab

fstabを生成。何故ここでやるのかよく分からないのですが、chroot状態ではこのコマンドが上手くはたらかないということなのですかね。

chrootでの基本設定

「chrootとは何じゃ」という方はこちらを参照。指定したディレクトリをルートディレクトリ(/)と見做してそれ以降の操作を行うコマンドです。

arch-chroot /mnt

この操作では/mnt以下(マウントしたデバイス)がルートディレクトリとなるわけです。

ロケールの生成と設定と生成

nano /etc/locale.gen

以下の2行のコメントアウトを外します。

    en_US.UTF-8 UTF-8
    ja_JP.UTF-8 UTF-8

UTF-8を設定することになります。その後

locale-gen

echo LANG=en_US.UTF-8 > /etc/locale.conf
export LANG=en_US.UTF-8
echo "KEYMAP=jp106" > /etc/vconsole.conf

で設定実行。

タイムゾーンとハードウェアクロックの設定

ln -s /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
hwclock --systohc --utc


ホストネームの設定

echo "arch" > /etc/hostname


パスワードの設定

passwd

ram image の作成

mkinitcpio -p linux

これは必要なのかよく分からないのですが、書いてあるのでやっておきます。

grub インストール

ブートローダ(grub)をインストールします。

grub-install --target=i386-pc --boot-directory=/boot --recheck --debug /dev/sda
grub-mkconfig -o /boot/grub/grub.cfg
cp /usr/share/locale/en@quot/LC_MESSAGES/grub.mo /boot/grub/locale/en.mo
cd /boot/grub/locale
gzip en.mo


ワイヤレスツールのインストール、ネットワークの設定

pacman -S wireless_tools wpa_supplicant wpa_actiond dialog
systemctl enable syslog-ng
systemctl enable dhcpcd.service

インストールしたArchを起動の最初からネットワーク接続し、SSHも使えるようにしようという心。
ついでにSSHの設定も行っておきます。

nano /etc/ssh/sshd_config

ルート(root)でログインできるようにします。

PermitRootLogin yes

systemdの設定も行っておきます。

systemctl enable sshd.service


以上でchrootでの操作は完了しました。あとは、chroot環境より抜けインストール用ディレクトリをunmount後、システム再起動。

exit
umount /mnt/{boot,}
reboot


(PC_Audio)   2016/11/12

コメントする

音楽用Arch Linuxシステムを作る(1)

しばらくJPLAY/Windowsの話題ばかりでしたが、Linuxに戻ります。まず、「音楽用のArch Linuxシステムを作る」という話題で書き込みます。




上の写真が僕がLinuxに戻ったきっかけとなったのハードウェアです。
ワインレッドのケースの上に怪しげな基板とチョコレート。左側に変な電源のようなもの。まっとうな方には意味不明でしょう。

ワインレッドのケースはkomaさんが掲示板で紹介されているAPUの新型機(APU2c4)です。64Bitで使うつもりなので、メモリが4GBのタイプにしました。購入したのが8月ころで、100円を切る久しぶりの円高、「よし、このチャンス」と、ついフラフラ、スイスPC-Enginesご本社のサイトに注文しっちゃったのですよね。写真の通り真紅のケースも一緒にget。これで無線ルータにすれば、格好いいですかね。残念ながらオーディオ用です(^^;;;。
APU2の上のチョコレートはケースと基板が送られてきた時に同梱されていました。パソコン部品、いろいろ購入しましたが、チョコレートがサービスに付いてきたというのははじめてですね。さすがスイスの会社です。美味しく頂戴しました。この基板とケースのセット、チョコレートは付いてくるけど、説明書とか解説書とかいうマニュアル類は一切添付されていません。ところが、写真のような謎の金属板とシートがケースといっしょに入っていました。




「これ、何」とスイスに問い合わせたら「排熱用の板と接着シートだよ」というご返事。「基板の裏面の右下にあるCPUチップに熱伝導シートを貼り金属板のシールを剥がし固定して、熱をケースに逃がすようにすればよい」ということらしい。このボード、ファンレスですので、ケースに入れる場合は、こういう熱対策が必要ということですかね。
ちなみに温度ですが、酷暑の真夏、24H電源入れっぱなしで、ケースの触ると、ちょっと暑いかなというレベルでした。参考までにシートを貼った裏面の写真を下に。




基板の表(おもて)の写真が下です。以前のapu1c2の写真はここにあります。比較すると分かりますが、サイズ、外部インターフェースの配置などは同じですが、チップや部品の配置は大きく変わっています。前回の書き込み「UPnPの世界(2)」にも1c2と2c4を並べた写真がありますね。「だいぶシンプルになっているな」という感想。音にも良さそうですです。




ケースに組み込むのは簡単です。裏のシリアル接続用のネジを外さないと組み込めませんが、これは見れば分かりますね(下の写真)。




x86アーキテクチャ、いろいろなハードはあるけど、圧倒的に音が良いのはこの機種でしょう。ヘッドレス(ノイズのかたまりとなるディスプレイ関連のチップを持たない意味です)という強みをいかして、素晴らしい音がします。apu2になってますます良くなったという気がします。RaspberryPIのようなLinux用のSoCもいいのだけど、ヘッドレスというハードはないですから。
日本語のこのボードの紹介はここ(クレア工房)がお勧め。apuがどういうボードかよく分かります。「日本ではAPUが音楽用に広く使われている」と書かれているのには「あらまあ、そんなに流行らせちゃったか」と感嘆。

さて、僕はaitlaboのDACを使っています。このDACはパソコンからの信号をi2s接続で受けるという構成になっています。




apuはRaspberryPIやBeagleBone Blackのようにボードから直接i2s信号を出力するソフトがないので、usb接続でddcを使い、接続することになります。i2s接続できるddcとしてはamaneroが有名ですが、僕が使っているのは最初の写真でケースの上に乗っている基板です。
このボードはXMOSの最新のチップを使ったもので、SHENZHEN社のF-1というDDC基板です。この基板、リンク先の写真をみるとケースに納められた形で販売されているようですので、標準的な使い方は USB入力、SPDIF出力ということになります。このspdif接続の音も悪くはありませんが、真価を発揮するのは箱をあけて、基板上のi2s接続ピンを使った時です。aitlaboのDACはi2sがディフォルトなので、i2s接続で使っています。
この基板の「UPnPの世界」書き込んだ試聴方法はspdif接続を使ってJOB社のDAC96を繋いだものです。十分に基準として使えるレベルの高いなかなか良い音でした。しかしI2S接続の音と比較すると差はありますね。I2S接続の音は楽器を演奏会場で聴く音がします。解像度は高いですが、強調されすれぎることはなく、自然な、雰囲気のある音で、生の演奏会で音楽を聴いている感じですね。

aitlaboのDACはBeagleBone Blackとi2s接続しています。F-1とのi2s接続の音と比較すると、解像度はBBBが上ですが、生らしさはF-1がいいです。どちらを選ぶかはオーディオ環境と好みの問題だと思いますが、音質的には互角です。
二つの構成を比較すると

BBB --i2s--> DAC
APU --usb--> F-1 --i2s--> DAC
APUとF-1の接続はエルサウンド社のデータ専用USBケーブル(電源)を使い、更に INTONA USB Isolator を入れています。

となりBBBの方が間に余分なUSB接続が入らない分、有利なはずですが、差が出ていないところが凄いですね(まあ、ケーブル(電源)とアイソレータの威力はあると思いますが)。

F-1のもう一つのメリットはDSD再生で開始終了時のノイズが一切発生しないことです。
dop方式のDSD再生では、音源にデータを送信しはじめる時と送信を終わる時に中途半端なデータが送信されることになり、これが盛大なノイズとなります。F-1はFPGAプログラムの処理によりこのノイズが一切発生させないのが大きな強みですね。
この理由で僕は普通に音楽を聴くときはF-1をメインで使っています。
これならBBBを使ったI2S接続に対抗できるので、最新&最強のハード(APU)、ソフト(ArchLinux)を組み合わせシステムを構成してみようとと考えました。

さて、APUをどのOSで動かすか。
Windows Server Coreモードという手もありそうですが、ヘッドレスなので、Linux以上の苦難の道が待ち受けていそうです。軟弱な身、そんな無謀な試みはさっさと諦め、Linuxでいくことにしました。APUでUSB接続のディプレイインターフェースを使えば、Windows Serverを動かすのも案外簡単かなとも思います。誰か人柱でやってみませんか。
Voyage、TinyCore、LightMPDなどいろいろなディストリビューションを選択できますが、試してみて、ArchLinuxが僕の環境で一番よかったので、最新版のArchを使うことにしました。32ビット版と64ビット版の比較では64ビット版に軍配が上がるのでこちらを選択。

Arch Linuxシステムの作り方についてはこのサイトで以前2回ほど書き込んだことがあります(サルでも作れる MPD on Arch Linuxarch linux on apu1)。いずれも2年以上前の書き込みですが、今回Arch LinuxとMPDの最新版で試して大きな変更はありません。だだ、例えば、マルチブートしないならばブートローダはgrubを使った方が楽とか、64ビット版ArchではMPDにyanさんパッチはエラーになってしまうなど、変わっている部分もあるので、重複部分はありますが、再度、リニューアル書き込みすることにします。

ようやく、タイトルの話題に入ります。
APU用のArch Linuxシステムの作成は宇宙ロケッテ並の多段構成が要求されます。

  • まず、ヘッドレスブートできるUSBメモリを作成するために必要となるArch inuxシステムをインストールする。
  • 次に、インストールしたシステムを使って、ヘッドレスブートできるUSBメモリを作成する。
  • 最後にSSDをセットしたAPUを作成したUSBメモリからブートして、SSDにヘッドレスブートできるArch Linuxをインストールする。

という具合です。
第一段目の標準(ヘッドレスではないという意味です)のArch inuxシステムのインストールは、空いているatomマシンを使う、仮想マシンを使うなどの方法がありますが、どれでもやり方はいっしょです。前回の書き込みではこの部分は省略していますが、僕のやった方法をご紹介します。
atom機を使う方法とVmware Playerを使う方法の差は最初のインストール環境の立ち上げの部分だけです。
どちらも、適当なWindows環境でArch Linux最新版(isoファイル)をダウンロードします。iso最新版のありかはこちら。リンク先の日本のサーバー(jaist.ac.jp)をクリック、FTPのリストが出てきますので、archlinux-2016.08.01-dual.isoというやつをクリック。ダウンロードしたISOファイルを、atom機の場合はWindows(7移行の)環境では右クリックでCDRに書き込み、VMwarePlayerの場合は「新規マシンの作成」でインストーラディスクイメージファイルでISOファイルとして指定します。以降はそれぞれの方法でCDイメージからのブートを行います。
ブート後の処理はどちらもまったく同じ操作です。ブート直後まず行うのはSSHの設定です。僕の場合はコマンドのCopy&Paste入力を多用するので、SSHを使わないとLinuxを操作出来ません。

pacman -Syy           : パッケージリストの更新
pacman -S openssh     : SSHのインストール
systemctl start sshd  : SSHの起動
passwd                : rootでSSHログインする時に必要となるので、ここで設定

PermitRootLogin yes は指定されているようなので、変更は不要(nano /etc/ssh/sshd_config)。

ここから実際のX86標準アーキテクチュアのArch Linuxのインストールとなります。32ビットか64ビットは起動時のArchの選択で決まりますが、今回の目的(ヘッドレスブートできるUSBメモリを作成)ではどちらでもいいです。
長くなったので、以降は次回。

(PC_Audio)   2016/11/5

コメントする

UPnPの世界(2)


asoyajiさんのサイトを拝見して、lightMPDのデュアル化について大きな勘違いをしていたことに気がつきました(^^;;;。インタネット分離だけでよければ、最新版で出来るのですね。
という訳で早速試してみました。ほぼasoyajiさんの書き込み通りやって、あっさり問題なくつながりました。

音は素晴らしいです。これなら十分JPLAYに対抗出来るなというレベルですね。いままでのlightMPDでは出なかった落ち着いた響きがします。まあ、APU二台 vs Core-i3+Core-i5連合軍というハードの差はあるので、単純に比較は出来ないけれど、lightMPDを見直しました。




試聴中の写真です。
ネットワークの構成は下表の通りです。

MediaServwrControlPointRenderer upmpdcli/polipoRenderer MPDDAC
UbuntuMinimServerAndroidKazoolightmpd-upnpgw-apu2-v1.0.0(2c4)lightMPDapu1-v1.0.2-64(1c2)Phasemation HD7-192
UbuntuMinimServerAndroidKazoolightmpd-upnpgw-apu2-v1.0.0(2c4)lightMPDraspi2-v1.0.2(rpi2)TerraBerry

メディアサーバとコントロールポイントの部分は前回と同じです。レンダラ部分は二つにわかれ、上段はapuを二台使い、Phasemation HD7-192を接続。下段はDSD再生のため、フロント側のapu2c4はそのまま残し、バックエンド側にラズベリパイ(rpi)とi2s接続したTerraBerryを置いています。
この表、AndroidもLinuxの亜種とみると、Linux一色ですね。UPnPの世界はLinuxの世界というわけではないのだろうけど。

さて、このLinux中心のUPnPの世界の強みはノイズ(電源)対策を取りやすいという点です。上の写真に写っていますが、二台のAPUはそれぞれノイズ対策済です。1c2はトランスタイプの電源(yamaha PA-6)を使い、2c4はifiのdcノイズフィルターを入れて対策しています。



このノイズフィルターをyamahaの電源が入手不能になったので、使っています。大きさのわりに値段がバカ高いのが玉にきずですが、威力は絶大ですね。入れると入れないではノイズレベルが一桁位違います。写真のように電源アダプタの変換プラグが付いてくるので、apuの場合は付属の変換プラグを使って簡単に接続できました。
rpi+TerraBerryの方はトランスタイプの電源(M-Audio)を使い、さらにTerraBerry側で専用の箱に付いてくる電源基板を使うことで、ノイズ対策がとられています。

lightMPDのUPnPアダプター方式がJPLAYのデュアル方式に対して優位な点はバックエンド側がlightMPDならなんでもいいらしいところですね。apuを二台もっているという人はかなりの変人だと思いますが(^^;;;、「apuとrpiとか、apuとcuboxという組み合わせなら持っているよ」という人は多いのではないでしょうか。また、仕組みとしてはフロント側がapuでないと駄目ということはない筈で、rpi二台とかrpi+bbbというような組み合わせも可能になりそうですね。USBタイプのLANアダプタは必要になりますが。

あと、構成でのポイントはCPUの対抗接続でのケーブルにクロスケーブルを使っていることです。僕はケーブルによって音が良くなることは無いと考えるアンチケーブル教の門徒ですが、これは例外。対抗接続でクロスケーブルとノーマルケーブルを比較試聴すると、音の差は歴然としています。クロスにしたから高価になるというわけではないので、対抗接続ではクロスケーブルを使った方がよいと思います。ちなみに写真に写っているものはAmazonでget、長さが2mで225円也。バカ高いオーディオ専用のLANケーブルというものの持ち合わせないので、比較は出来ませんが、僕のもっている高性能の(カテゴリが高いという意味です)ケーブルよりはるかによい音がします。

lightMPDのUPnPの設定はとても簡単です。旧来のlightMPDの設定はVolumioなどのWebGUIで設定出来るソフトと比較して難しいことで有名だったのですが(ここにいかに難関をクリアするかに関するたかじんさんのレポートがあります)、lightmpd-upnpgwはUPnPの世界の特長を活かして、随分改善されていると思います。
具体的には、例えばタンドアローンのUPnPレンダラーの場合、標準的な使い方であれば、変更しなければならないのは、lightMPDディレクトリ lightmpd.confファイル内 [network]の固定IPアドレス(xの部分)を設定すること

        address=192.168.x.x

とmpd.confファイルの最後にHTTPストリーム入力を追加すること

input {
    plugin     "curl"
    proxy      "127.0.0.1:8123"
}

だけです。サルでも出来るというレベル。リンク先の従来版の設定の解説と比較して読んでいただければ、差は一目瞭然だと思います。
作者も書いていらっしゃいますが、UPnP対応させることで、lightMPD設定の最大の難所、音楽データの在り処を設定する必要が無くなり、単純化されたということですね。

次にUPNPアダプターの設定。まずフロント側ですが、\lightMPD\conf\lightmpd.conf-upnpgwがディフォルトの設定ですので、これを\lightMPDにlightmpd.confという名前に変えて、コピーする必要があります。このディフォルトの雛型を使えば、変更する必要があるのは、スタンドアロンの場合と同じで、固定IPアドレスの部分だけです。
バックエンド(MPD/player)側の設定は雛型が無く、lightMPDapu1-v1.0.2-64の標準のlightmpd.confをいじることになるので、大変かなと思いましたが、これも簡単です。バックエンドがapuのケースはasoyagiさんがデータを公開されているので、僕の方はラズパイのデータを公開することにします。
といっても、大して差はなくて、lightmpd.confはネットワークアドレスの設定の部分だけです。このあたりはデジファイのおとさんのサイトにも丁寧な解説があるので、問題はないでしょう。ちなみに、僕はディフォルトの[nas:NASID1]は不要かなと考え、コメントアウトしたら、上手く動かなくなりました。なんか使っているのですかね。
mpd.confに関しては、スタンドアロンの場合と同じで、HTTPストリーム入力を追加すればいいだけです。フロント側のmpd.confは不要の筈ですが確認はしていません。
あと、lightMPDraspi2-v1.0.2+TerraBerryの場合はi2sの接続に関連して

#	dac=hifiberry-dac

をコメントアウトする必要があります。これはUPnPでなくても必要ですね。
同じく、mpd.confにdsd再生yesを指定して置く必要があります。

	dsd_usb         	"yes"

それでは以降備忘録代わりにラズパイ用の設定ファイルです。
まず、lightmpd.conf。

[network]
	interface=eth0
	address=10.0.0.2
	netmask=255.255.255.252
	gateway=10.0.0.1
	nameserver=192.168.0.0
	domain=mydomain.jp

[ntp]
	server=192.168.0.0
	ntpd=no
	timezone=Asia/Tokyo

[nas:NASID1]
	type=nfs
	host=nashost1
	remotedir=audio_data
	proto=tcp
	rsize=65536
	wsize=65536

#[nas:NASID2]
#	type=cifs
#	host=nashost2
#	remotedir=audio_data
#	remoteuser=usrid
#	remotepass=passwd
#	iocharset=utf8
#       file_mode=0644
#       dir_mode=0755
#       rsize=61440
#       wsize=65536

[mpd]
	dac=hifiberry-dac
#       dac=hifiberry-digi
#       dac=hifiberry-dacplus
#------------------------------------------------------------
#       hifiberry-dacplus mixer control
#          'DSP Program'
#             Items: 'FIR interpolation with de-emphasis'
#                    'Low latency IIR with de-emphasis'
#                    'High attenuation with de-emphasis'
#                    'Fixed process flow'
#                    'Ringing-less low latency FIR'
#           'Digital'   -   output volume
#             Limits: 0 - 207  ,  0% - 100%
#                 Ex: 100%,100%
#                     on,on,100%,100%
#                     off,off,100%,100%
#------------------------------------------------------------
#      amixer_sset='DSP Program' 'Fir interpolation with de-emphasis' & 'Digital' on,on,100%,100%
#
#	dac=sabreberry32
#------------------------------------------------------------
#       sabreberry32 mixer control
#           'Filter Type'
#               Items: 'Fast Roll-Off'
#                      'Slow Roll-Off'
#                      'Minimum Phase'
#           'Playback Digital'   -  output volume
#              Limits: 0 - 255 , 0% - 100%
#           'Mute'
#              Items: 'on'
#                     'off'
#------------------------------------------------------------
#        amixer_sset='Playback Digital' 100%,100% & 'Filter Type' 'Minimum Phase' &  Mute off
#
#	dac=rpi-dac
#	dac=usb-audio
#	dac=usb-hiface
#
	load_module=mpd-0.19.10rt-native-dsd
	music_directory=NASID1/Music
	playlist_directory=NASID1/mpd/playlists
	db_file=NASID1/mpd/tag_cache
	sticker_file=NASID1/mpd/sticker.sql
#	log_file=NASID1/mpd/mpd.log
	log_file=/dev/null

[httpd]
#  yes | no
	enable=yes
	port=80

[telnetd]
#  yes | no
	enable=yes
	port=23

[ympd]
#  yes | no
       enable=no
       webport=8080
       mpdport=6600

[webconsole]
#  yes | no
#  start page:   http://thishost:${port}/index.html
	enable=yes
	port=9000

[debug]
	interfaces=yes
	resolvconf=yes
	ntpd=yes
	ntpconf=yes
	ifconfig=yes
	cards=yes
	mounts=yes
	ps=yes
	mpdversion=yes
	date=yes
	ntpq=yes
	music=yes
	messages=yes
	save=no

次にmpd.conf

realtime_option {
    memlock              	"yes"
    stack_reserve        	"2048"
    heap_reserve         	"10240"
    main_priority        	"OTHER:0"
    player_priority      	"FIFO:53"
    decoder_priority     	"OTHER:0"
    update_priority      	"OTHER:0"
}

audio_output {
        type            	"alsa"
        name            	"uda"
        device          	"hw:0,0"        # optional
        priority        	"FIFO:54"       # optional
	mixer_type      	"disabled"
#	mixer_control		"Playback Digital"
	dsd_usb         	"yes"
	buffer_time     	"150000"
	period_time     	"37500"
}

# ###### decoder selector
# decoder_selector {
#    suffix                       "mp3"
#    plugin                       "mad"
# }

# decoder_selector {
#    suffix                       "m4a"
#    plugin                       "ffmpeg"
# }

# decoder_selector {
#    suffix                       "wav"
#    plugin                       "audiofile"
#    scan_plugin                  "ffmpeg"
# }

# decoder_selector {
#    suffix                       "flac"
#    plugin                       "flac"
# }

database {
   plugin                       "simple"
   path                         "/var/lib/mpd/tag_cache"
   compress                     "no"
}

#
music_directory			"/var/lib/mpd/Music"
playlist_directory		"/var/lib/mpd/playlists"
#sticker_file            	"/var/lib/mpd/sticker.sql"
log_file			"/var/lib/mpd/mpd.log"
pid_file			"/var/run/mpd.pid"
state_file			"/var/lib/mpd/state"

user				"root"
group                   	"root"

bind_to_address			"any"
port				"6600"

#
#metadata_to_use		"artist,album,title,track,name,genre,date,composer,performer,disc"
#metadata_to_use			"artist,album,title,track,genre,date,disc"

#audio_output_format            "96000:24:2"
# extend audio format
#
#audio_output_format             "x4L4:24:2"

#LIBSAMPLERATE
#samplerate_converter            "Best Sinc Interpolator"
#samplerate_converter            "Medium Sinc Interpolator"
#samplerate_converter            "Fastest Sinc Interpolator"
#samplerate_converter            "ZOHc Interpolator"
#samplerate_converter            "Linear Sinc Interpolator"
#samplerate_converter            "internal"

# SOXR
samplerate_converter            "soxr very high"
#samplerate_converter            "soxr high"
#samplerate_converter            "soxr medium"
#samplerate_converter            "soxr low"
#samplerate_converter            "soxr quick"
#
#samplerate_converter            "soxr very high openmp"
#samplerate_converter            "soxr high openmp"
#samplerate_converter            "soxr medium openmp"
#samplerate_converter            "soxr low openmp"
#samplerate_converter            "soxr quick openmp"


follow_outside_symlinks		"yes"
follow_inside_symlinks		"yes"
default_permissions     	"read,add,control,admin"
#
mixer_type			"disabled"
#
audio_buffer_size		"8192"
buffer_before_play		"50%"
#
#audio_buffer_size		"2048"
#buffer_before_play		"20%"
#
filesystem_charset		"UTF-8"
id3v1_encoding			"UTF-8"
input {
    plugin     "curl"
    proxy      "10.0.0.1:8123"
}


赤の部分がオリジナルの設定ファイルに修正した部分です。全部で10行ありますが、lightmpd.confの

dac=hifiberry-dac

とmpd.confの

dsd_usb         	"yes"
#metadata_to_use			"artist,album,title,track,genre,date,disc"

はUPnPアダプタ化とは直接繋がらない変更です。結局、2箇所(7行)、ipアドレス(lightmpd.conf)とストリーム入力(mpd.conf)の設定だけでよいことになりますね。

最後にJPLAYに話題を戻します。

上記したようにAPU二台の構成の特長はハードのノイズ対策がとり易いという点にあります。実際にAPU二台のヘッドレス軍とCore-i3+Core-i5の連合軍の音を比較して聴くとノイズレベルに明らかな差があることが分かります。スイッチ一つで両者の音を切り換えられるという環境だと簡単に聞きとれます。
それで、理屈としてはAPUでWindowsサーバが動かない筈はないので、JPLAYも同じように動かせるのではないかと思っているのですが、誰か挑戦する人いませんかね。intelハードの世界で辣腕をふるって無理矢理ノイズを減らすより、こちらの方が腕力のレベルは低いと思うのですが。
まあ、マイクロソフトの秘密主義の壁を乗り越えハックしまくる、Jail Breakなんて生易しいものではない超難関の茨の道ではありますが。

(PC_Audio)   2016/11/03

コメントする

top page     previous page     next page

mail