Raspberry Pi + Rune Audio ::: Một trải nghiệm nghe nhạc mới

rndce

Well-Known Member
Học từ bài của anh @tml3nr , thanks anh!

SMPD 0.96 Update #3

Các bác đam mê cải tiến SMPD có thể theo cách sau để tối ưu hệ thống tắt các service khi đang play TC.

Lệnh kiểm tra TC
Mã:
pgrep -wc tidal_connect
Khi TC đang idle, kết quả là số 14
Khi TC có phone kết nối, kết quả là số 16
Khi TC đang play, kết quả là số 17

Nhờ vào điều trên mình làm 2 việc:
1. Mod lại file /home/pi/misc/ympd_event.sh
Những phần mod:
#START ADDON
#STOP ADDON
#CHECK PLAY (2 vị trí)

---------
Mã:
#!/bin/bash

urldecode() { : "${*//+/ }"; echo -e "${_//%/\\x}"; }

parse() {
  echo `cat "$1" | sed -n "s/^[ \t]*$2[ \t]*[=]*[ \t]*//p" | head -n1 | sed -e "s/\"//g"`
}

case "$1" in
  r) # read conf (plain text)
    parse $2 $3
    ;;
  w) # write conf
    tmp=$(urldecode "$3")
    if [[ $tmp == *=* ]];then
      key=`echo $tmp | cut -f1 -d'='`
      val=`echo $tmp | cut -f2 -d'='`
    else
      key=$tmp
      val=""
    fi
    if [ "$key" = "" ];then
      echo error
    elif [ "$val" = "" ];then
      # read
      parse $2 $key
    else
      # write
      line=`grep  -nE "^\s*$key(\s|=)+" "$2" | head -n1 |sed -e 's/:.*//g'`
      echo $2 $key $val $line
      sed -i -e "$line s|\(^\s*$key\s*[\s|=|\"]\{1\}\s*\)[^\"]*\(\"*\)|\1$val\2|" "$2"
      sync
    fi
    ;;

  p) # list plugins (json)
    TARGET=.$2
    cd /home/pi/plugins
    CMD=""
    i=0
    for dir in `ls -d $TARGET/*`
    do
      CMD=$CMD'.['$i'].path="'$dir'"|'
      let ++i
    done
    CMD=$CMD.
    cat $TARGET/*/app.json|jq -s -c '.'| jq $CMD
    ;;

  isolate)
    systemd-run --nice=19 systemctl stop spotifyd
    systemd-run --nice=19 systemctl stop shairport-sync
    systemd-run --nice=19 systemctl stop tidal
    systemd-run --nice=19 systemctl stop aprenderer
    systemd-run --nice=19 systemctl stop minidlna
    #systemd-run --nice=19 systemctl stop upmpdcli
    sleep 0.4
    ;;

#STOP ADDON
  addon-stop)
    systemd-run --nice=19 systemctl stop shairport-sync
    systemd-run --nice=19 systemctl stop aprenderer
    systemd-run --nice=19 systemctl stop minidlna
    #systemd-run --nice=19 systemctl stop upmpdcli
    sleep 1
    systemctl start soundcheck.service
    sleep 1
    systemctl stop ympd
    systemctl stop ympd.socket
    systemctl stop mpd
    umount /var/lib/mpd/music/NAS/*

    sync
    sleep 0.4
    exit
    ;;
###### END STOP ADDON ######



#START ADDON
  addon-start)
    sleep 2
    if [ "`pgrep -wc tidal_connect`" = "16" ];then
        #echo "It's start addon"

        systemctl start ympd.socket
        mount -a
        systemctl start mpd

        systemctl start shairport-sync
        systemctl start aprenderer
        systemctl start minidlna

    fi
    sync
    sleep 0.4
    exit
    ;;
###### END START ADDON ######


  stop-avahi)
    #systemd-run --nice=19 systemctl stop avahi-daemon
    #systemd-run --nice=19 systemctl stop avahi-daemon.socket
    sleep 0.4
    ;;

  pause)

    #CHECK PLAY
    if [ "`pgrep -wc tidal_connect`" = "17" ];then
        echo "It's play"
        systemd-run /home/pi/misc/ympd_event.sh addon-stop

    fi
    ###### END CHECK PLAY ######

    if [ "`pidof spotifyd`" = "" ];then
        if [ `journalctl -u spotifyd|grep "Authenticated as" | wc -l` -gt 0 ];then
            systemd-run /home/pi/misc/ympd_event.sh spotifyd-start
        fi
    fi
    ;;

  spotifyd-start)
    sleep 2
    systemctl start spotifyd
    ;;

  stop)
    if [ $(mpc|grep "\[playing\]"|wc -l) = 1 -o  $(mpc|grep "\[paused\]"|wc -l) = 1 ];then
        exit
    fi

    #CHECK PLAY
    if [ "`pgrep -wc tidal_connect`" = "17" ];then
        echo "It's play"
        systemd-run /home/pi/misc/ympd_event.sh addon-stop
    fi
    ###### END CHECK PLAY ######

    if [ "`pidof spotifyd`" = "" ];then
        if [ `journalctl -u spotifyd|grep "Authenticated as" | wc -l` -gt 0 ];then
            systemd-run /home/pi/misc/ympd_event.sh spotifyd-start
        fi
    fi
    ;;

  browse)
    ls /var/lib/mpd/music/RAM/* >/dev/null 2>&1
    if [ $? -eq 0 ]; then
        mpc update RAM
    fi
    ;;

  dashboard)
    /home/pi/util-plot.sh
    /home/pi/util-dashboard.sh
    ;;

esac

exit

2. Tạo thêm file soundcheck (Không enable service)
Mã:
sudo nano /lib/systemd/system/soundcheck.service
Mã:
[Unit]
Description=Sound check for Addon
After=sound.target

[Service]
Type=simple
ExecStart=/home/pi/misc/ympd_event.sh addon-start
Restart=always
StartLimitInterval=5
User=root
Group=root

[Install]
WantedBy=multi-user.target
Mã:
sudo chmod -R 777 /lib/systemd/system/soundcheck.service
sudo reboot

Kết quả việc này là khi bấm play TC, giao diện YMPD, MPD, AP, DLNA... sẽ tắt đi.
Khi stop TC thì những cái trên tự động bật trở lại.

Các bác test thử nhé! Hy vọng con đường này sáng sủa.

--------
Nếu không muốn chỉnh code, các bác download mấy file này, dùng WinSCP copy vào thư mục /tmp/ rồi chạy từng dòng sau:
Mã:
sudo tar -xf /tmp/ympd.tgz --overwrite -C /home/pi/misc/
sudo tar -xf /tmp/configs.tgz --overwrite -C /home/pi/configs/
sudo tar -xf /tmp/soundcheck.tgz --overwrite -C /lib/systemd/system/
sudo tar -xf /tmp/service.tgz --overwrite -C /etc/systemd/system/

https://drive.google.com/drive/folders/1KSxHF75me0sdcqSSQmx32bDSpt25h4Zo?usp=sharing


2021-05-14-22_22_19-symphonic-mpd.png
Mình update # 3 lên smpd 0.9.6:
- Chiều thuận: Tidal stream qua Smpd ok, webUI bị vô hiệu, dừng Tidal WebUI sống lại nghe nhạc Offline qua NAS ok.
- Chiều ngược lại, play nhạc Offline, dừng để nghe Tidal stream qua, chờ hoài ko thấy Tidal service sống lại.
Bug-Upd3.png

Kiểm tra Tidal.service khi dừng nhạc offline, ra kết quả như dưới :
Mã:
 symphonic-mpd

pi@smpd:~ $ sudo systemctl status tidal
● tidal.service - Tidal Connect Service
   Loaded: loaded (/etc/systemd/system/tidal.service; enabled)
   Active: inactive (dead) since Sat 2021-05-15 23:10:07 JST; 9min ago
  Process: 1093 ExecStart=/opt/tidal/bin/tidal_connect --tc-certificate-path /opt/tidal/id_certificate/IfiAudio_ZenStream.dat -f smpd 096 --codec-mpegh true --codec-mqa false --model-name Streamer --disable-app-security false --disable-web-security false --enable-mqa-passthrough false --playback-device default --log-level 3 --enable-websocket-log 0 (code=killed, signal=TERM)
  Process: 388 ExecStartPre=/bin/sleep 15 (code=exited, status=0/SUCCESS)
Main PID: 1093 (code=killed, signal=TERM)

May 15 23:06:51 smpd tidal_connect[1093]: Cannot connect to server socket err = No such file or directory
May 15 23:06:51 smpd tidal_connect[1093]: Cannot connect to server request channel
May 15 23:06:51 smpd tidal_connect[1093]: jack server is not running or cannot be started
May 15 23:06:51 smpd tidal_connect[1093]: JackShmReadWritePtr::~JackShmReadWritePtr - Init not done for -1, skipping unlock
May 15 23:06:51 smpd tidal_connect[1093]: JackShmReadWritePtr::~JackShmReadWritePtr - Init not done for -1, skipping unlock
May 15 23:06:51 smpd tidal_connect[1093]: STARTED TidalConnect services.
May 15 23:07:33 smpd tidal_connect[1093]: [2021-05-15 23:07:33.949] [tisoc] [warning] [PlaybackControllerImpl.cpp:472] Illegal state:1
May 15 23:07:45 smpd sudo[2728]: root : TTY=unknown ; PWD=/ ; USER=root ; COMMAND=/bin/systemctl restart pipe
May 15 23:10:07 smpd systemd[1]: Stopping Tidal Connect Service...
May 15 23:10:07 smpd systemd[1]: Stopped Tidal Connect Service.
va cai soundcheck.service nhu the nay:
Mã:
pi@smpd:~ $ sudo systemctl status soundcheck
● soundcheck.service - Sound check for Addon
   Loaded: loaded (/lib/systemd/system/soundcheck.service; disabled)
   Active: active (running) since Sat 2021-05-15 23:32:12 JST; 1s ago
Main PID: 15807 (ympd_event.sh)
   CGroup: /system.slice/soundcheck.service
           ├─15807 /bin/bash /home/pi/misc/ympd_event.sh addon-start
           └─15808 sleep 2

May 15 23:32:12 smpd systemd[1]: soundcheck.service holdoff time over, scheduling restart.
May 15 23:32:12 smpd systemd[1]: Stopping Sound check for Addon...
May 15 23:32:12 smpd systemd[1]: Starting Sound check for Addon...
May 15 23:32:12 smpd systemd[1]: Started Sound check for Addon.
 
Chỉnh sửa lần cuối:

rndce

Well-Known Member
BÁc nghiên cứu thêm, để khi dừng webUI thì Tidal nó sống lại tự động ah.
Mình phải restart Tidal lại bằng mấy câu trong SSH:
Mã:
pi@smpd:~ $ sudo systemctl daemon-reload
pi@smpd:~ $ sudo systemctl restart tidal
pi@smpd:~ $ sudo systemctl status tidal
● tidal.service - Tidal Connect Service
   Loaded: loaded (/etc/systemd/system/tidal.service; enabled)
   Active: active (running) since Sat 2021-05-15 23:35:09 JST; 6s ago
  Process: 21355 ExecStartPre=/bin/sleep 15 (code=exited, status=0/SUCCESS)
Main PID: 21880 (tidal_connect)
   CGroup: /system.slice/tidal.service
           └─21880 /opt/tidal/bin/tidal_connect --tc-certificate-path /opt/tidal/id_certificate/IfiAudio_ZenStream.dat -f smpd 096 --codec-mpegh true --codec-mqa false --model-name Strea...

May 15 23:35:09 smpd tidal_connect[21880]: ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.modem
May 15 23:35:09 smpd tidal_connect[21880]: ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.phoneline
May 15 23:35:09 smpd tidal_connect[21880]: ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.phoneline
May 15 23:35:09 smpd tidal_connect[21880]: ALSA lib pcm_dmix.c:1052:(snd_pcm_dmix_open) unable to open slave
May 15 23:35:09 smpd tidal_connect[21880]: Cannot connect to server socket err = No such file or directory
May 15 23:35:09 smpd tidal_connect[21880]: Cannot connect to server request channel
May 15 23:35:09 smpd tidal_connect[21880]: jack server is not running or cannot be started
May 15 23:35:09 smpd tidal_connect[21880]: JackShmReadWritePtr::~JackShmReadWritePtr - Init not done for -1, skipping unlock
May 15 23:35:09 smpd tidal_connect[21880]: JackShmReadWritePtr::~JackShmReadWritePtr - Init not done for -1, skipping unlock
May 15 23:35:09 smpd tidal_connect[21880]: STARTED TidalConnect services.
pi@smpd:~ $
 

linh0983

Well-Known Member
Right Here Waiting , Richard Marx biểu diễn bác linh0983 .
Trí nhớ tốt ở nhà hỏi tôi cũng chịu . Chú Pi4 đã có smpd 1.0.10 thêm UPnP và Roon Birdge . :rolleyes:

https://www.symphonic-mpd.com/forum/topic/108/よくある質問と答え-frequently-asked-questions-and-answer/11

https://www.symphonic-mpd.com/forum/topic/108/よくある質問と答え-frequently-asked-questions-and-answer/12

Roon stream DSD , PCM ngon lành . ;)

Thanks Đức . :D
 

quatmo

Well-Known Member
BÁc nghiên cứu thêm, để khi dừng webUI thì Tidal nó sống lại tự động ah.
Mình phải restart Tidal lại bằng mấy câu trong SSH:
Mã:
pi@smpd:~ $ sudo systemctl daemon-reload
pi@smpd:~ $ sudo systemctl restart tidal
pi@smpd:~ $ sudo systemctl status tidal
● tidal.service - Tidal Connect Service
   Loaded: loaded (/etc/systemd/system/tidal.service; enabled)
   Active: active (running) since Sat 2021-05-15 23:35:09 JST; 6s ago
  Process: 21355 ExecStartPre=/bin/sleep 15 (code=exited, status=0/SUCCESS)
Main PID: 21880 (tidal_connect)
   CGroup: /system.slice/tidal.service
           └─21880 /opt/tidal/bin/tidal_connect --tc-certificate-path /opt/tidal/id_certificate/IfiAudio_ZenStream.dat -f smpd 096 --codec-mpegh true --codec-mqa false --model-name Strea...

May 15 23:35:09 smpd tidal_connect[21880]: ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.modem
May 15 23:35:09 smpd tidal_connect[21880]: ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.phoneline
May 15 23:35:09 smpd tidal_connect[21880]: ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.phoneline
May 15 23:35:09 smpd tidal_connect[21880]: ALSA lib pcm_dmix.c:1052:(snd_pcm_dmix_open) unable to open slave
May 15 23:35:09 smpd tidal_connect[21880]: Cannot connect to server socket err = No such file or directory
May 15 23:35:09 smpd tidal_connect[21880]: Cannot connect to server request channel
May 15 23:35:09 smpd tidal_connect[21880]: jack server is not running or cannot be started
May 15 23:35:09 smpd tidal_connect[21880]: JackShmReadWritePtr::~JackShmReadWritePtr - Init not done for -1, skipping unlock
May 15 23:35:09 smpd tidal_connect[21880]: JackShmReadWritePtr::~JackShmReadWritePtr - Init not done for -1, skipping unlock
May 15 23:35:09 smpd tidal_connect[21880]: STARTED TidalConnect services.
pi@smpd:~ $

Mình vừa test lại, 2 chiều tự động đều Ok.

1./ Trong mấy file này minidlna.service, aprenderer.service. Mình đã không dùng bin/sleep nữa, để mỗi lần start top cho nhanh.
2./ Trong các file event cũng có chỉnh lại bỏ mấy chỗ start lại addon (configs.tgz). Có lẻ quên nói chỉnh chỗ này bác mới bị lỗi.
3./ Mình vừa cập nhật lại service.tgz (bỏ /bin/sleep của tidal.service).
4./ Các bác cập nhật update #3 bằng cách download file, lệnh giải nén là OK nhất (ghi trong update #3)

Bác nào không làm được nhắn PM mình gửi lại file IMG.
 
Chỉnh sửa lần cuối:

rndce

Well-Known Member
Mình vừa test lại, 2 chiều tự động đều Ok.

1./ Trong mấy file này minidlna.service, aprenderer.service. Mình đã không dùng bin/sleep nữa, để mỗi lần start top cho nhanh.
2./ Trong các file event cũng có chỉnh lại bỏ mấy chỗ start lại addon (configs.tgz). Có lẻ quên nói chỉnh chỗ này bác mới bị lỗi.
3./ Mình vừa cập nhật lại service.tgz (bỏ /bin/sleep của tidal.service).
4./ Các bác cập nhật update #3 bằng cách download file, lệnh giải nén là OK nhất (ghi trong update #3)

Bác nào không làm được nhắn PM mình gửi lại file IMG.
Vẫn ko restart Tidal sau khi dừng webUI bác quạt ah.
Mình upate thủ công và kể cả flash lại bàn 2.4 bác gửi cũng ko được.
Giờ mình flash lại về bản 2,3b dùng cũng thấy ok.
 

quatmo

Well-Known Member
Vẫn ko restart Tidal sau khi dừng webUI bác quạt ah.
Mình upate thủ công và kể cả flash lại bàn 2.4 bác gửi cũng ko được.
Giờ mình flash lại về bản 2,3b dùng cũng thấy ok.
2.4 bác nhớ copy config.txt của bác qua. Máy mình lại chạy ngon, pause nhạc nó start các thứ lại ngay. Để mình check kỹ xem sao.
 

binna

Well-Known Member
Về streaming TC, em stream các file master từ app tidal trên android, thì trên DAC nó hiện là MQB (đèn màu tím)
Còn stream cũng file master đó, từ tidal trên app mconnect thì trên DAC nó hiện là MQA (đèn màu xanh)
DAC đang dùng là Pre Box S2 digital, nối với Pi4 qua ngõ USB
Cái này là do app phải không ạ ?
 

rndce

Well-Known Member
Bên trên