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

tml3nr

Moderator
Hi anh Minh, anh Quạt và cả nhà.

Em mò việc tự động start stop service, xào chẻ cóp nhặt ra được cái script svccheck.sh này thấy chạy OK.

Kịch bản là khi startup. TC và aprenderer (AP) cùng start.

Giả dụ sau đó mình dùng AP.

Script này sẽ nhận biết AP đang được dùng vì số process tăng lên. Nó sẽ stop TC.

Sau khi hết dùng AP. Process giảm xuống.

Script này nhận biết AP đang free. Nó sẽ restart TC.

Nếu như mình dùng TC. Mọi việc sẽ ngược lại.

Em test script chạy OK. Vấn đề là phải dùng timer cho script start định kỳ sau một thời gian nào đó. Thí dụ như 30 giây.

Đây là một việc rất dở.

Vậy có cách nào làm cho script này chỉ tự động chạy khi mình dùng / ngưng dùng TC hoặc AP hay không ạ?

Cái script svccheck.sh xào chẻ của em. Mời các anh test thử và cho ý kiến thêm ạ:

svccheck.sh

Mã:
#!/bin/bash

if [ "$(pgrep -wc ap2renderer)" -gt 10 ]; then
echo "aprenderer gt 10 - stop tidal if exist"
pidof tidal_connect_application >/dev/null && sudo systemctl stop ifi-streamer-tidal-connect || echo "tidal not exist"
exit
fi

if [ "$(pgrep -fwc tidal_connect_application)" -gt 14 ]; then
echo "tidal gt 14 - stop aprenderer if exist"
pidof ap2renderer >/dev/null && sudo systemctl stop aprenderer || echo "aprenderer not exist"
exit
fi

if [ "`pidof ap2renderer`" = "" ];then
sudo systemctl restart aprenderer
fi

if [ "`pidof tidal_connect_application`" = "" ];then
sudo systemctl restart ifi-streamer-tidal-connect
fi

exit 0

TC và AP khi đang free:

svccheck-ok.png

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

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
Quá hay anh Quạt :rolleyes:

Vậy là dự án hoàn thiện bộ tam sên TC - aprenderer - minidlna của em đạt tới hơn 90% rồi :cool:
 

toi511

Well-Known Member
Bên em hiện tại âm thanh hay nhất khi phát Tidal từ mconnect sang NP5 upnp các anh ạ. pi2 + asset upnp + shanti vẫn không bằng.

Rất lạ là phát bằng mconnect tiếng hay hơn bubbleupnp. Dù cả 2 đều đẩy cùng 1 link web của Tidal.

Nhờ anh quocdat@vnav nói em mới phát hiện ra. Trước đó em hơi ngờ ngợ nhưng chủ quan nghĩ là nó phải như nhau:

https://vnav.vn/posts/2653930/
Cái này em đã nói lâu rồi, em không thích bb vì làm tiếng khô và sạn, làm mất nhạc tính bản nhạc. Lúc đó cũng có một số bác không tin. Nó sẽ lộ rõ hơn khi anh set BB làm openhome.:D:D:D:D:D:D
 

chautranthanh

Well-Known Member
Bên em hiện tại âm thanh hay nhất khi phát Tidal từ mconnect sang NP5 upnp các anh ạ. pi2 + asset upnp + shanti vẫn không bằng.

Rất lạ là phát bằng mconnect tiếng hay hơn bubbleupnp. Dù cả 2 đều đẩy cùng 1 link web của Tidal.

Nhờ anh quocdat@vnav nói em mới phát hiện ra. Trước đó em hơi ngờ ngợ nhưng chủ quan nghĩ là nó phải như nhau:

https://vnav.vn/posts/2653930/
Mình không vọc nhiều như bác , mình cũng thích tiếng của Mconnect ,ngoài ra offline còn có McIntosh nghe rất chững chạc
 

quatmo

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

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


Cách STOP/START này có thể áp dụng cho OS khác OK.

MoodeAudio

File soundcheck.sh (mới update chút nhìn cho mạch lạc)
Mã:
sudo nano /home/pi/soundcheck.sh

Mã:
#!/bin/sh
if [ "`pgrep -wc tidal_connect`" = "16" ];then
    echo "16"
    sudo systemctl start upmpdcli.service

    # MOODE WEB UI
    sudo systemctl restart php7.3-fpm.service
    sudo systemctl restart nginx
    #exit

elif [ "`pgrep -wc tidal_connect`" = "17" ];then

    echo "17"
    sudo systemctl stop upmpdcli.service

    # MOODE WEB UI
    sudo systemctl stop php7.3-fpm.service
    sudo systemctl stop nginx
    #exit

else
    echo "14"
    exit
fi
Mã:
sudo chmod -R 777 /home/pi/soundcheck.sh

File soundcheck.service
Mã:
sudo nano /etc/systemd/system/soundcheck.service

Mã:
[Unit]
Description=Sound check for Addon
Requires=tidal.service
After=tidal.servict

[Service]
Type=simple
ExecStart=/bin/sh /home/pi/soundcheck.sh
Restart=always
RestartSec=2
User=root
Group=root

[Install]
WantedBy=multi-user.target

Mã:
sudo chmod -R 777 /etc/systemd/system/soundcheck.service
sudo systemctl enable soundcheck.service
sudo reboot

Khi stop TC, chừng 20s sau Web Moode mới hiện trở lại.
Check htop để biết Task: thr giảm xuống bao nhiêu.

Moode mình start AP, Asset luôn cả upmpdcli, Task: thr = 50.
Khi chạy TC thì tắt hết giảm xuống thr = 32.

--------------------

ROPI
soundcheck.sh


Mã:
#!/bin/sh

if [ "`pgrep -wc tidal_connect`" = "16" ];then
    echo "16"
    systemctl start upmpdcli
    systemctl start ropieee-web
    systemctl start mpd
    systemctl start librespot
    #exit

elif [ "`pgrep -wc tidal_connect`" = "17" ];then

    echo "17"
    systemctl stop upmpdcli
    systemctl stop ropieee-web
    systemctl stop mpd
    systemctl stop librespot
    #exit

else
    echo "14"
    exit
fi
 
Chỉnh sửa lần cuối:

tml3nr

Moderator
Cái này em đã nói lâu rồi, em không thích bb vì làm tiếng khô và sạn, làm mất nhạc tính bản nhạc. Lúc đó cũng có một số bác không tin. Nó sẽ lộ rõ hơn khi anh set BB làm openhome.:D:D:D:D:D:D
Dạ do chủ quan anh ạ.

Lúc trước em không dùng mconnect và bubbleupnp để phát Tidal sang upnp, vì nghĩ là nhạc nó sẽ qua app rồi mới đẩy sang renderer.

Cho đến khi anh @youngj nói. Em test lại mới thấy là nếu như renderer support. Nhạc sẽ được lấy trực tiếp từ internet:

http://www.hdvietnam.com/posts/10521871/

Do bubbleupnp làm control point rất ngon. Nên em ít khi dùng mconnect dù đã mua license rồi. Và cứ cho là phát Tidal thì 2 em này như nhau @@

Cho đến khi anh quocdat@vnav nói em mới giật mình test lại. Thì thấy âm thanh của 2 app này chênh lệnh nhiều quá :eek:
 
Chỉnh sửa lần cuối:

TuanQuynhAudio

Well-Known Member
Bên em hiện tại âm thanh hay nhất khi phát Tidal từ mconnect sang NP5 upnp các anh ạ. pi2 + asset upnp + shanti vẫn không bằng.

Rất lạ là phát bằng mconnect tiếng hay hơn bubbleupnp. Dù cả 2 đều đẩy cùng 1 link web của Tidal.

Nhờ anh quocdat@vnav nói em mới phát hiện ra. Trước đó em hơi ngờ ngợ nhưng chủ quan nghĩ là nó phải như nhau:

https://vnav.vn/posts/2653930/
Hix cùng link mà chất khác nhau thì do nguyên nhân gì? Có lẽ do cơ chế trao đổi giữa bubbleupnp với render khác với mconnect với render. Từ đó tác động vào render kích hoạt cái gì đấy gây ảnh hưởng đến chất âm.
 

tml3nr

Moderator
Hix cùng link mà chất khác nhau thì do nguyên nhân gì? Có lẽ do cơ chế trao đổi giữa bubbleupnp với render khác với mconnect với render. Từ đó tác động vào render kích hoạt cái gì đấy gây ảnh hưởng đến chất âm.
Vậy mới nhức đầu anh ạ. Em dùng JMC quan sát thì 2 link y chang nhau.

Tiếng của mconnect trong trẻo hơn. Nét hơn và nẩy hơn.

Em test bài Friday night - Jonathen Fritzén:

- Từ Mconnect:

Mã:
http://sp-pr-cf.audio.tidal.com/mediatracks/CAEaKRInMTlhMDk4NzJiMGI5Y2VhZDM0ZWIzNmQ2MTkwZWFjNmVfNjEubXA0/0.flac?Expires=1620778517&Signature=fFXy~VVFpjAxy7g24V3WDRn~BmeSAFM5nQgz-jM24H2I8NtZXq3Nuesd7JpnhH8Ve90-jBviW~PR6zXC8VlGTwWom82IGVOPCl8Ld~UwgsIwaDfQGE~a2Ss~LOc77W79tdL35CcE9JGtcfu4~DronydkkbpjHTY11KGAYW2ojah9B2-N1GjaJzk8CYvDxAuQoZ9z89k65iWaXOlD74r44IDvYvIddeWIxbnzRWn90z5yXTuRLJaNe27lEXYJpz-BtrXhUxrsou~PSniokUBa1bpS-YBB0ibMmcrE-a67qOfo3dI4OnbNL9s1W2e7PeIacRceCgatIwKtg~FBYVsDqw__&Key-Pair-Id=APKAIZ3WPBE4R6SP555A

- Từ BubbleUPnP:

Mã:
http://sp-pr-cf.audio.tidal.com/mediatracks/CAEaKRInMTlhMDk4NzJiMGI5Y2VhZDM0ZWIzNmQ2MTkwZWFjNmVfNjEubXA0/0.flac?Expires=1620778517&Signature=fFXy~VVFpjAxy7g24V3WDRn~BmeSAFM5nQgz-jM24H2I8NtZXq3Nuesd7JpnhH8Ve90-jBviW~PR6zXC8VlGTwWom82IGVOPCl8Ld~UwgsIwaDfQGE~a2Ss~LOc77W79tdL35CcE9JGtcfu4~DronydkkbpjHTY11KGAYW2ojah9B2-N1GjaJzk8CYvDxAuQoZ9z89k65iWaXOlD74r44IDvYvIddeWIxbnzRWn90z5yXTuRLJaNe27lEXYJpz-BtrXhUxrsou~PSniokUBa1bpS-YBB0ibMmcrE-a67qOfo3dI4OnbNL9s1W2e7PeIacRceCgatIwKtg~FBYVsDqw__&Key-Pair-Id=APKAIZ3WPBE4R6SP555A
 
Chỉnh sửa lần cuối:

rndce

Well-Known Member
Cách STOP/START này có thể áp dụng cho OS khác OK.

MoodeAudio

File soundcheck.sh (mới update chút nhìn cho mạch lạc)
Mã:
sudo nano /home/pi/soundcheck.sh

Mã:
#!/bin/sh
if [ "`pgrep -wc tidal_connect`" = "16" ];then
    echo "16"
    sudo systemctl start upmpdcli.service

    # MOODE WEB UI
    sudo systemctl restart php7.3-fpm.service
    sudo systemctl restart nginx
    #exit

elif [ "`pgrep -wc tidal_connect`" = "17" ];then

    echo "17"
    sudo systemctl stop upmpdcli.service

    # MOODE WEB UI
    sudo systemctl stop php7.3-fpm.service
    sudo systemctl stop nginx
    #exit

else
    echo "14"
    exit
fi
Mã:
sudo chmod -R 777 /home/pi/soundcheck.sh

File soundcheck.service
Mã:
sudo nano /etc/systemd/system/soundcheck.service

Mã:
[Unit]
Description=Sound check for Addon
Requires=tidal.service
After=tidal.servict

[Service]
Type=simple
ExecStart=/bin/sh /home/pi/soundcheck.sh
Restart=always
RestartSec=2
User=root
Group=root

[Install]
WantedBy=multi-user.target

Mã:
sudo chmod -R 777 /etc/systemd/system/soundcheck.service
sudo systemctl enable soundcheck.service
sudo reboot

Khi stop TC, chừng 20s sau Web Moode mới hiện trở lại.
Check htop để biết Task: thr giảm xuống bao nhiêu.

Moode mình start AP, Asset luôn cả upmpdcli, Task: thr = 50.
Khi chạy TC thì tắt hết giảm xuống thr = 32.
Mình làm theo bác @quatmo để set START/STOP Tidal Connect trên MoOde 7.1, thì ok hết,
Sau khi tạo file soundcheck.service để ON/OFF webUI nghe nhạc Offline, thì nó chạy theo đúng mong muốn, nghĩa là:
- Muốn nghe Tidal thì Pause nhạc offline NAS bằng WebUI MoOde, rồi stream Tidal trên phone qua, sau đó thì webUI mất quyền kiểm soát luôn.
- Muốn nghe lại Offline NAS thì Pause Tidal trên phone, sau một lúc thì WebUI hoạt động trở lại được: thêm bớt nhạc từ NAS,....Nhưng vấp phải một chuyện là ALSA lúc này vẫn bị Tidal giữ, nên play nhạc Offline ko được.
Muốn nghe thì quay lại Tidal app chọn phát qua Device khác, lúc này ALSA mới được nhã ra.
Moode-Tidal.png

Và sau khi chọn device khác như hình trên thì MoOde mới phát được như hình dưới:
Moode-Tidal-2.png
Và đây là các service chạy khi Tidal play: Ko có php7.3-fpm.service và nginx.service

Tidal-On.png


Còn đây là các service chạy khi Tidal dừng và phát trên device khác:
Tidal-IDLE.png
 
Chỉnh sửa lần cuối:

toi511

Well-Known Member
Cách STOP/START này có thể áp dụng cho OS khác OK.

MoodeAudio

File soundcheck.sh (mới update chút nhìn cho mạch lạc)
Mã:
sudo nano /home/pi/soundcheck.sh

Mã:
#!/bin/sh
if [ "`pgrep -wc tidal_connect`" = "16" ];then
    echo "16"
    sudo systemctl start upmpdcli.service

    # MOODE WEB UI
    sudo systemctl restart php7.3-fpm.service
    sudo systemctl restart nginx
    #exit

elif [ "`pgrep -wc tidal_connect`" = "17" ];then

    echo "17"
    sudo systemctl stop upmpdcli.service

    # MOODE WEB UI
    sudo systemctl stop php7.3-fpm.service
    sudo systemctl stop nginx
    #exit

else
    echo "14"
    exit
fi
Mã:
sudo chmod -R 777 /home/pi/soundcheck.sh

File soundcheck.service
Mã:
sudo nano /etc/systemd/system/soundcheck.service

Mã:
[Unit]
Description=Sound check for Addon
Requires=tidal.service
After=tidal.servict

[Service]
Type=simple
ExecStart=/bin/sh /home/pi/soundcheck.sh
Restart=always
RestartSec=2
User=root
Group=root

[Install]
WantedBy=multi-user.target

Mã:
sudo chmod -R 777 /etc/systemd/system/soundcheck.service
sudo systemctl enable soundcheck.service
sudo reboot

Khi stop TC, chừng 20s sau Web Moode mới hiện trở lại.
Check htop để biết Task: thr giảm xuống bao nhiêu.

Moode mình start AP, Asset luôn cả upmpdcli, Task: thr = 50.
Khi chạy TC thì tắt hết giảm xuống thr = 32.

--------------------

ROPI
soundcheck.sh


Mã:
#!/bin/sh

if [ "`pgrep -wc tidal_connect`" = "16" ];then
    echo "16"
    systemctl start upmpdcli
    systemctl start ropieee-web
    systemctl start mpd
    systemctl start librespot
    #exit

elif [ "`pgrep -wc tidal_connect`" = "17" ];then

    echo "17"
    systemctl stop upmpdcli
    systemctl stop ropieee-web
    systemctl stop mpd
    systemctl stop librespot
    #exit

else
    echo "14"
    exit
fi
:(:(:(:(:(:(:(:(:(:(
em chạy xong mấy lệnh trên, Pi cũng ngủm luôn. boot hoài k vào được
 

quatmo

Well-Known Member
Mình làm theo bác @quatmo để set START/STOP Tidal Connect trên MoOde 7.1, thì ok hết,
Sau khi tạo file soundcheck.service để ON/OFF webUI nghe nhạc Offline, thì nó chạy theo đúng mong muốn, nghĩa là:
- Muốn nghe Tidal thì Pause nhạc offline NAS bằng WebUI MoOde, rồi stream Tidal trên phone qua, sau đó thì webUI mất quyền kiểm soát luôn.
- Muốn nghe lại Offline NAS thì Pause Tidal trên phone, sau một lúc thì WebUI hoạt động trở lại được: thêm bớt nhạc từ NAS,....Nhưng vấp phải một chuyện là ALSA lúc này vẫn bị Tidal giữ, nên play nhạc Offline ko được.
Muốn nghe thì quay lại Tidal app chọn phát qua Device khác, lúc này ALSA mới được nhã ra.
Moode-Tidal.png

Và sau khi chọn device khác như hình trên thì MoOde mới phát được như hình dưới:
Moode-Tidal-2.png
Mình thực hiện: Bấm Pause nhạc xong bấm luôn chọn This device = Exit. Mỗi lần xài đều vậy thành quen tay luôn. Thao tác chỉ là bấm 3 phát trên màn hình.
 

eziodavinci6

New Member
Trước đây mình cũng có ý giống bác và có phối ghép Q Acoustics 3020i với IQAudio Digiamp+ nhưng nghe không hài lòng lắm, nghe hơi yếu. Mình ghép Pi Amp với Fostex 204 nghe hay hơn Q 3020i, có vẻ loa với độ nhạy cao sẽ dễ chơi hơn.
Q Acoustics 3020i là bộ loa hay và đẹp, nếu bác đã có loa thì mình nghĩ bác thử ghép với Nobsound bên dưới nghe khá lắm (nghe hay hơn cái ampli NAD bên Techland chổ Lý Thái Tổ họ dùng test loa Q 3020i).
Vài dòng chía sẻ

nobsound.jpg
Em cảm ơn bác nhiều ạ, em sẽ ghép thử xem sao, em coi sơ review thì đa số đều nói rất p/p
 

binna

Well-Known Member
bản moode bác @quatmo cho em, đang chơi TC ( từ app Tidal stream qua), sau đó muốn chơi MPD lại thì cũng phải chọn device khác (trên app Tidal), MPD mới chơi được, không thì nó báo lỗi alsa busy hay error
còn cái tút bác @quatmo mới đưa lên, em chưa cài thử
 

do_long_khach

Well-Known Member
bản moode bác @quatmo cho em, đang chơi TC ( từ app Tidal stream qua), sau đó muốn chơi MPD lại thì cũng phải chọn device khác (trên app Tidal), MPD mới chơi được, không thì nó báo lỗi alsa busy hay error
còn cái tút bác @quatmo mới đưa lên, em chưa cài thử
Bác flash thẻ, sau đó tạo nas trước tiên rồi làm gì thì làm. Tôi cũng dùng bản moode đó thì phải, cài nas sau là mpd lỗi ngay.
 

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:
Bên trên