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

binna

Well-Known Member
Lát nữa bác check PM nhé. Mình hướng dẫn xong không thấy bác nói gì nên nghĩ Ok rồi.
vì trình IT của em cũng dở, chỉ biết copy - paste thôi, mà hỏi bác hoài cũng ngại lắm ah
cảm ơn sự giúp đỡ của bác rất nhiều ah
 

linh0983

Well-Known Member
em làm hoài vẫn chưa được, nên quay lại nghe bằng ropieee XL
Sao lạ nhỉ usb pcm 1794 mình và bác giống nhau chọn NONE trong setting nghe liền mà ? Chú ý là mở dac trước sau 5 giây mở moode a . ( nó detech usb vì chú usb pcm 1794 này dùng nguồn 5v của dac ) . :D
 

eziodavinci6

New Member
Chào các bác,
Trước em dùng active speaker + Pi + Boss DAC, nay định đổi qua Q Acoustics 3020i nhưng ngại phối ghép AMP/DAC, các bác tư vấn giúp em đã có solution AMP/DAC trên 1 Pi chưa ạ, nếu chưa thì có nhưng con AMP/DAC tích hợp nào kéo cặp loa trên, bugdet <5tr thôi ạ
 
Chào các bác,
Trước em dùng active speaker + Pi + Boss DAC, nay định đổi qua Q Acoustics 3020i nhưng ngại phối ghép AMP/DAC, các bác tư vấn giúp em đã có solution AMP/DAC trên 1 Pi chưa ạ, nếu chưa thì có nhưng con AMP/DAC tích hợp nào kéo cặp loa trên, bugdet <5tr thôi ạ
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
 

binna

Well-Known Member
Lát nữa bác check PM nhé. Mình hướng dẫn xong không thấy bác nói gì nên nghĩ Ok rồi.
bản bác cho em ....toẹt vời ông mặt trời, nó tự nhận được DAC luôn (em xem trong Audio info thấy đúng tên luôn), set trong Volume mixer là hadware là hót cả TC và MPD luôn
cảm ơn bác rất nhiều
 

rndce

Well-Known Member
Mount nhiều Nas khác nhau trong SMPD
Điều khó khăn của SMPD là nếu Nas mình có nhiều folder gốc khác nhau (hoặc nhiều NAS) cần add mount vào SMPD không được. Mod chút sẽ Ok ngay.

#1./ Tạm ngưng mount fstab
Mã:
sudo chown pi:pi /etc/fstab

WinSCP edit file /home/pi/configs/fstab
Thêm dấu # trước những dòng đã mout trước nếu có
#//192.168.1.16/.....

Reboot lại

#2./ Tạo sub folder
Mã:
sudo chown pi:pi /var/lib/mpd/music/NAS
VD: Tạo folder CD, HIRES, FLAC
Mã:
mkdir /home/pi/mpd/music/NAS/CD
mkdir /home/pi/mpd/music/NAS/HIRES
mkdir /home/pi/mpd/music/NAS/FLAC

#3./ Mount vào sub folder
WinSCP edit edit /etc/fstab, bỏ dấu # và edit mount tương ứng NAS
VD folder //192.168.1.16/disk01/CD của NAS sẽ mount vào folder /var/lib/mpd/music/NAS/CD
Mã:
//192.168.1.16/disk01/CD /var/lib/mpd/music/NAS/CD cifs ro,noauto,x-systemd.automount,sec=ntlmssp,vers=1.0,rsize=129940,cache=none,iocharset=utf8,username=nas,password=admin
//192.168.1.16/disk02/HIRES /var/lib/mpd/music/NAS/HIRES cifs ro,noauto,x-systemd.automount,sec=ntlmssp,vers=1.0,rsize=129940,cache=none,iocharset=utf8,username=nas,password=admin
//192.168.1.16/disk03/FLAC /var/lib/mpd/music/NAS/FLAC cifs ro,noauto,x-systemd.automount,sec=ntlmssp,vers=1.0,rsize=129940,cache=none,iocharset=utf8,username=nas,password=admin

#4./ Mod xíu
Trong 3 file này: spotify_event.sh, shairport_event.sh, mpd_event.sh
Thêm dấu * vào chỗ nào có chữ NAS/ thành NAS/*
Mã:
/var/lib/mpd/music/NAS/*

Xong. reboot

2021-05-12-09_23_46-symphonic-mpd.png


Có thể an tâm nghe nhạc được rồi hihi! ;)
Trong file mpd_event.sh thì có dòng:
Mã:
/var/lib/mpd/music/NAS/
Còn trong 2 file còn lại là spotify_event.sh và shairport_event.sh (và file tidal_event.sh nữa) thì chỉ có:
Mã:
/var/lib/mpd/music/NAS
Nghĩa là thiếu "/" ở cuối dòng, Tất cả các file *.sh trên mình đều chỉnh dòng có NAS thành như dưới đây pk bác Lâm:
Mã:
/var/lib/mpd/music/NAS/*
VÀ sau cùng,
Làm cách này có còn mount NAS tự động trên WebUI ko bác Lâm.
SAu khi chỉnh sửa như vậy, thì về sau mount NAS là mình mount thủ công bằng cách sửa file fstab pk bác?
 

quatmo

Well-Known Member
Trong file mpd_event.sh thì có dòng:
Mã:
/var/lib/mpd/music/NAS/
Còn trong 2 file còn lại là spotify_event.sh và shairport_event.sh (và file tidal_event.sh nữa) thì chỉ có:
Mã:
/var/lib/mpd/music/NAS
Nghĩa là thiếu "/" ở cuối dòng, Tất cả các file *.sh trên mình đều chỉnh dòng có NAS thành như dưới đây pk bác Lâm:
Mã:
/var/lib/mpd/music/NAS/*
VÀ sau cùng,
Làm cách này có còn mount NAS tự động trên WebUI ko bác Lâm.
SAu khi chỉnh sửa như vậy, thì về sau mount NAS là mình mount thủ công bằng cách sửa file fstab pk bác?
Tất cả /* vậy là đúng rồi bác, dấu * nghĩa là tất cả thư mục con.
/var/lib/mpd/music/NAS/*

Mount ban đầu 1 cái bằng giao diện, sau đó edit fstab cứ copy pate chỉnh lại. Cũng nhanh.
 

quatmo

Well-Known Member
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 file /home/pi/misc/ympd_event.sh
2. Tạo thêm file soundcheck_1 cho TC và soundcheck_2 cho YMPD

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.

--------
Mới cập nhật ngày 16/05

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 /home/pi/
sudo tar -xf /tmp/service.tgz --overwrite -C /etc/systemd/system/

Mã:
sudo systemctl enable soundcheck1.service
sudo reboot

https://drive.google.com/drive/folders/1KSxHF75me0sdcqSSQmx32bDSpt25h4Zo


2021-05-14-22_22_19-symphonic-mpd.png



Update #4 (Gồm cả tắt/mở SC):
https://drive.google.com/drive/folders/1voCSDIKSNngZSfVa42je2bQ-GLh-yxZF
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 /home/pi/
sudo tar -xf /tmp/service.tgz --overwrite -C /etc/systemd/system/
sudo tar -xf /tmp/spotifyd_service.tgz --overwrite -C /lib/systemd/system/

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

Update #5 - Add thêm Aplayer ở port: 7778
(đã gồm update #3, #4)
 
Chỉnh sửa lần cuối:

toi511

Well-Known Member
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
#START ADDON
#CHECK PLAY

---------
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 START 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 /lib/systemd/system/soundcheck.service
Không enable 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.
Hay quá anh, các service k chạy sẽ đỡ tài nguyên, tối ưu cho âm thanh
 

rndce

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

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
Món này gọi là update #3 cho smpd, dev Nhật ko support smpd 0.96 nữa, giờ đã có bác @quatmo supoort.
 

tml3nr

Moderator
Offline vẫn là số 1 các bác a . :D

SDCg.jpg
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/
 

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