VortexBox user forum - News:
インストールしたVortexBoxのバージョンは2.2です。
VortexBoxは音楽配信に特化したLinuxディストリビューションとのことですが、外部DACをUSBに接続してMPD(Music Player Daemon)を使って音楽を聴くことも出来ます。
ノートPCのパーティションを全部初期化してインストールした限りでは、VortexBoxのインストールはとても簡単でした。
VortexBoxで動いているMPDの最適化パッチをこちらやこちらを参考に当てました。
とてもすばらしいパッチをありがとうございます。
PCオーディオ実験室
みみず工房
パッチを適用したMPDのバージョンは0.17.4です。
パッチを使用する上で悩んだのは以下の点でしょうか。
- /etc/mpd.confや/etc/vortexbox-player/mpd0.confに記述した設定が前者は無視され、後者はいつの間にか消えている
- mpdの優先度が設定されていない
- mount.exfat-fuseなどのプロセスにchrt コマンドで優先度を設定しようとするとOperation not permittedになる
1は後回しにします。
- 2と3について
システム起動時にmpdを起動するようにした場合、後から優先順位を設定しようと下記のコマンド
# sudo chrt -p -f 99 `pgrep mpd`
を実行すると "Operation not permitted"になってしまいました。
さんざん悩んだのですが、こちらにある方法で上手くいくみたいです。
私は/etc/sysctl.confに
kernel.sched_rt_runtime_us=-1
と記述し、
/etc/rc.d/rc.local
に
/usr/bin/chrt -p -f 49 `pgrep -f mount.exfat-fuse`
/usr/bin/chrt -p -f 49 `pgrep usb-storage`
を記述しました。
[vortexbox.localdomain ~]# tail -n1 /etc/sysctl.conf
kernel.sched_rt_runtime_us=-1
[vortexbox.localdomain ~]# tail -n2 /etc/rc.d/rc.local
/usr/bin/chrt -p -f 49 `pgrep -f mount.exfat-fuse`
/usr/bin/chrt -p -f 49 `pgrep usb-storage`
またmpdは
/usr/local
以下にインストールしたので、
/etc/rc.d/init.d/vortex-player
のmpdを起動している部分を修正しました。
[vortexbox.localdomain ~]# cat /etc/rc.d/init.d/vortexbox-player
~ 省略 ~
# /usr/bin/mpd /etc/vortexbox-player/mpd$COUNT.conf
/usr/local/bin/mpd /etc/vortexbox-player/mpd$COUNT.conf
~ 省略 ~
ここまでの設定と、下の方に記述した「1について」の設定を行った状態で再起動した直後のpsコマンドの結果です。
一応設定通りになっているかなと思っています。
[vortexbox.localdomain ~]# ps -eLo pid,ppid,lwp,rtprio,priority,cmd
PID PPID LWP RTPRIO PRI CMD
1 0 1 - 20 /sbin/init
~ 省略 ~
235 2 235 49 -50 [usb-storage]
~ 省略 ~
733 1 733 49 -50 /sbin/mount.exfat-fuse /dev/sdb1 /mnt/EXHDD2 -o rw,umask=000
~ 省略 ~
1665 1 1665 - 20 /usr/local/bin/mpd /etc/vortexbox-player/mpd0.conf
1665 1 1666 - 20 /usr/local/bin/mpd /etc/vortexbox-player/mpd0.conf
1665 1 1668 52 -53 /usr/local/bin/mpd /etc/vortexbox-player/mpd0.conf
1665 1 1669 48 -49 /usr/local/bin/mpd /etc/vortexbox-player/mpd0.conf
1665 1 1673 99 -100 /usr/local/bin/mpd /etc/vortexbox-player/mpd0.conf
~ 省略 ~
- 1について
/etc/rc.d/init.d/vortexbox-player
では次のように記述されています。
/usr/bin/mpd /etc/vortexbox-player/mpd$COUNT.conf
ですので
/etc/mpd.conf
は存在していても使用していないようです。
また、VortexBoxの主要な設定は他のPCのWebブラウザから変更することが出来るのですが、「Configure VortexBox Player」のページから設定を変更すると
/etc/vortexbox-player/mpd0.conf
で行った設定はクリアされてしまいます。
ブラウザから設定変更した際に呼ばれているPHPスクリプトは
/opt/vortexbox/mpd_config.php
のようです。
私のmpd_config.phpは次のようにしています。
色を変えてある箇所が加えたところです。
私は音を出すのは外部DAC経由でしか行っていませんので、複数のサウンドデバイスから音を出すのであればもう少し考えて記述しなければいけないかもしれません。
(もっと言うと、適当にいじっただけです…)
<?php
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
error_reporting(E_ERROR);
$configfile = "/var/www/html/config/playergui.cfg";
$configall = file_get_contents($configfile);
$config = unserialize($configall);
$vbplayer="";
$vbplayerfile = fopen("/etc/vortexbox-player/mac_list.conf",'w');
$x=0;
foreach ($config as $devarray) {
if (isset($devarray['NAME'])) {
$mpdfile = fopen("/etc/vortexbox-player/mpd".$x.".conf",'w');
$configcontent="# Created by Configure VortexBox Player on ".date('F j, Y, g:i a')."\n";
$configcontent.="# If you edit this file it will be over written the next time you make\n";
$configcontent.="# changes in the Configure VortexBox Player GUI.\n";
$configcontent.="#"."\n";
if ($x == 0) {
$configcontent.='music_directory "/storage/music/flac"'."\n";
$configcontent.='playlist_directory "/var/lib/mpd/playlists"'."\n";
$configcontent.='db_file "/var/lib/mpd/database"'."\n";
$configcontent.='log_file "/var/log/mpd.log"'."\n";
$configcontent.='pid_file "/var/lib/mpd/pid"'."\n";
$configcontent.='state_file "/var/lib/mpd/state"'."\n";
$configcontent.='sticker_file "/var/lib/mpd/sticker.sql"'."\n";
}
if (file_exists("/etc/vortexbox/mpd_auto_update.no")) {
$configcontent.='auto_update "no"'."\n";
} else {
$configcontent.='auto_update "yes"'."\n";
}
$configcontent.='port "'.(6600 + $x).'"'."\n";
$configcontent.='zeroconf_enabled "yes"'."\n";
$configcontent.='zeroconf_name "'.$devarray['NAME'].'"'."\n";
$configcontent.="\n";
if (strtoupper($devarray['DEVICENAME']) != "DEFAULT") {
$devicelist=(preg_split('/\s+/', $devarray['DEVICENAME']));
$count=1;
foreach ($devicelist as $v) {
$configcontent.='audio_output {'."\n";
$configcontent.=' type "alsa"'."\n";
$configcontent.=' name "'.$devarray['NAME']."-".$count.'"'."\n";
$configcontent.=' device "'.trim($v).'"'."\n";
$configcontent.=' dsd_usb "yes"'."\n";
$configcontent.=' priority "FIFO:99"'."\n";
if ($devarray['softvol_ischecked'] == "softvol") { $configcontent.=' mixer_type "software"'."\n";}
$configcontent.='}'."\n";
$count++;
}
}
$configcontent.='realtime_option {'."\n";
$configcontent.=' memlock "yes"'."\n";
$configcontent.=' stack_reserve "1024"'."\n";
$configcontent.=' heap_reserve "0"'."\n";
$configcontent.=' main_priority "OTHER:0"'."\n";
$configcontent.=' player_priority "FIFO:52"'."\n";
$configcontent.=' decoder_priority "FIFO:48"'."\n";
$configcontent.=' update_priority "OTHER:0"'."\n";
$configcontent.='}'."\n";
fwrite($mpdfile,$configcontent);
fclose($mpdfile);
$vbplayer.=$devarray['MAC']."\n";
}
$x++;
}
fwrite($vbplayerfile,$vbplayer);
fclose($vbplayerfile);
// restart vortexbox-player
exec("/bin/systemctl restart vortexbox-player.service");
?>
0 件のコメント:
コメントを投稿