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

Nhờ anh em tư vấn hộ nguồn linear cho pi 4, mình dùng 2 con chạy Fontend - backend. Sau khi chọn lựa vừa túi tiền mình đang nghía một số cái sau
1.//
hinh1.md.jpg


https://www.ebay.com/itm/Hifi-Ultra...198398?hash=item5238ad477e:g:aTkAAOSwHslfDFPq

2.//

hinh-2.md.jpg


https://www.ebay.com/itm/50VA-HIFI-...483418?hash=item25fd7af3da:g:1hkAAOSwAV5bZS4s

3.//

hinh3f7bf1f054534da34.md.jpg


https://www.ebay.com/itm/LT3042-Ult...601811?hash=item1ed214de13:g:xqMAAOSwWZpZ7q7q

4.///

hinh4.md.jpg


https://www.ebay.com/itm/LT1963-LT3...704363?hash=item48d6948aab:g:sucAAOSw3vpdxZf8

Chân thành cảm ơn.
 
Chỉnh sửa lần cuối:

quatmo

Well-Known Member
Giá ebay cao, bác tham khảo taobao.

Ví dụ bo số 3, ebay 23 đồng, taobao cũng bo này 14 đồng.
Cũng trong link này, mình đang dùng cái có hộp/bo xanh liền biến áp đúc (hình dưới cùng). Chạy rất ngon với Pi2/3 (đo đồng hồ biểu đồ điện áp ổn định/thẳng tắp, chạy Pi 4 + HAT DAC khá nóng.

Mấy cái bác đưa ra coi qua 1A - 1.5A e là không đủ tải cho Pi 4 nếu có thêm HAT DAC.
 

quatmo

Well-Known Member
Em build librespot hơn 4 tiếng trên pi2. Nhưng vẫn không chạy được với smpd 0.9.6 alsa. Chưa nói gì tới aplay-rt.

Buồn quá em mò lại đống đồ cổ, may quá thấy bản smpd 0.6GA đã có sẵn librespot output pipe aplay-rt.

Test thử SC chạy luôn, không cần phải khai báo user password.

SC out ra pipe aplay-rt tiếng hay hết hồn các anh ạ. Anh nào muốn test smpd 0.6GA vui lòng PM cho em để em gửi link. Ông dev không muốn public mấy cái này.

Mã:
pi@smpd:~ $ uname -a
Linux smpd 4.14.52-smpd #41 SMP PREEMPT Thu Aug 16 07:48:07 JST 2018 armv7l GNU/Linux

pi@smpd:~ $ cat /etc/os-release
PRETTY_NAME="Raspbian GNU/Linux 8 (jessie)"
NAME="Raspbian GNU/Linux"
VERSION_ID="8"
VERSION="8 (jessie)"
ID=raspbian
ID_LIKE=debian
HOME_URL="http://www.raspbian.org/"
SUPPORT_URL="http://www.raspbian.org/RaspbianForums"
BUG_REPORT_URL="http://www.raspbian.org/RaspbianBugs"

spotify-connect.service

Mã:
[Unit]
Description=Spotify Connect
After=network-online.target

[Service]
Type=idle

ExecStart=/usr/local/bin/librespot --name symphonic-mpd --initial-volume 100 --onevent /home/pi/configs/spotify_event.sh --cache /run --bitrate 320 --zeroconf-port 4000 --backend pipe --device /run/pipeout  &

Restart=always
RestartSec=10
StartLimitInterval=30
StartLimitBurst=20

LimitRTPRIO=99
LimitMEMLOCK=infinity
CPUSchedulingPolicy=fifo
CPUSchedulingPriority=99
CPUAffinity=2

# none, realtime, best-effort, idle
IOSchedulingClass=realtime

# 0(highest) - 7(lowest)
IOSchedulingPriority=0

[Install]
WantedBy=multi-user.target

pipe.service

Mã:
[Unit]
Description=symphonic-mpd pipe service
Wants=network-online.target
After=sound.target
After=network.target network-online.target

[Service]
Type=simple
#PIDFile=/run/pipe.pid
LimitRTPRIO=99
LimitMEMLOCK=infinity
CPUSchedulingPolicy=fifo
CPUSchedulingPriority=99
CPUAffinity=1
KillMode=mixed
KillSignal=SIGHUP
User=root
Group=root

# none, realtime, best-effort, idle
IOSchedulingClass=realtime

# 0(highest) - 7(lowest)
IOSchedulingPriority=0

#ExecStartPre=/home/pi/configs/pipe.sh pre
ExecStart=/home/pi/configs/pipe.sh exec
#ExecStartPost=/home/pi/configs/pipe.sh post

Restart=always
StartLimitInterval=5

[Install]
WantedBy=multi-user.target

pipe.sh

Mã:
#!/bin/bash

device="hw:0,0" # default

# for Sabreberry32 (DAC MASTER)
if [ $(aplay -l|grep "SabreBerry32 DAC sabre9018q2c"|wc -l) = 1 ];then
  device="APLAY_S32_LE"
fi

#prealloc=512
prealloc=1024
period_time=5772
buffer_time=1486940

pipeout=/run/pipeout
pcminfo=/run/pcminfo

timer_calibration="/home/pi/configs/timer_calibration.sh"
opt_aplay="--device=${device} -q -M -F ${period_time} -B ${buffer_time} -p ${pcminfo}"

case "$1" in
  exec)
  if [ ! -e $pipeout ]; then
  mkfifo --mode=666 $pipeout
  fi
  if [ ! -e $pcminfo ]; then
  touch $pcminfo
  chmod 666 $pcminfo
  echo "S16_LE 44100 2" > $pcminfo
  fi

  echo $prealloc > /proc/asound/card0/pcm0p/sub0/prealloc
  $timer_calibration
  exec /usr/local/bin/aplay-rt $opt_aplay $pipeout
  ;;
esac
Em add TC vào bản này không được, lỗi gì đó mà không nhận ra DAC.

Khi đang nghe album này mà chuyển album khác nó tự mất kết nối Pi, phải tắt bật lại. Máy khác không biết có bị vậy hay không?

Nghe Spotify Connect hay lắm!
 
Chỉnh sửa lần cuối:

tml3nr

Moderator
Em add TC vào bản này không được, lỗi gì đó mà không nhận ra DAC.

Khi đang nghe album này mà chuyển album khác nó tự mất kết nối Pi, phải tắt bật lại. Máy khác không biết có bị vậy hay không?

Nghe Spotify Connect hay lắm!
SC out pipe aplay-rt cực hay anh nhỉ.

Em install TC và aprenderer vào bản smpd 0.6GA này, test trên pi2 + boss dac thấy ok.

TC em install thủ công bám theo tút này:

https://github.com/shawaj/HiTide/blob/main/install.sh

Về các bản smpd. Anh lưu ý file rc.local. Nên thay hết nội dung của nó bằng "exit" hoặc remove hết các lệnh disable USB. Cho dù mình đã tắt hết các service liên quan nhưng nó vẫn được chạy khi mount nas lúc startup (Hoặc các script detect pcminfo).

FIle pipe.sh cũng có thể được gọi khi có event nào đó xảy ra. Khi đó nó chiếm alsa nên TC không chạy được.
 
Chỉnh sửa lần cuối:

rndce

Well-Known Member
SC out pipe aplay-rt cực hay anh nhỉ.

Em install TC và aprenderer vào bản smpd 0.6GA này, test trên pi2 + boss dac thấy ok.

TC em install thủ công bám theo tút này:

https://github.com/shawaj/HiTide/blob/main/install.sh

Về bản smpd 0.6GA và 0.9.6. Anh lưu ý file rc.local. Nên thay hết nội dung của nó bằng "exit". Cho dù mình đã tắt hết các service liên quan nhưng nó vẫn được chạy khi mount nas lúc startup (Hoặc các script detect pcminfo).

FIle pipe.sh cũng có thể được gọi khi có event nào đó xảy ra. Khi đó nó chiếm alsa nên TC không chạy được.
Bác chỉ rõ hơn cái ruột của file rc.local sau khi thay nội dung bằng "exit" với. tks
 

tml3nr

Moderator
Bác chỉ rõ hơn cái ruột của file rc.local sau khi thay nội dung bằng "exit" với. tks
Tức là mình edit cho nội dung file /etc/rc.local chỉ còn như sau:

Mã:
#!/bin/bash -e

exit 0

Hoặc là mình remove hết đoạn bên dưới của file rc.local:

Mã:
  udev-finish)
  # RPi3B+
  if [ "`cat /proc/cpuinfo |grep Revision|tail -c7`" = "a020d3" ];then
  echo "hub-ctrl start (RPi3B+)"
  sudo hub-ctrl -b 1 -d 2 -P 2 -p 0; /bin/sleep 1.4; sudo hub-ctrl -b 1 -d 2 -P 3 -p 0; sudo hub-ctrl -b 1 -d 2 -P 4 -p 0; sudo hub-ctrl -b 1 -d 3 -P 2 -p 0; sudo hub-ctrl -b 1 -d 3 -P 3 -p 0; sudo hub-ctrl -b 1 -d 2 -P 2 -p 0
  else
  echo "hub-ctrl start"
  sudo hub-ctrl -b 1 -d 2 -P 2 -p 0; /bin/sleep 1.4; sudo hub-ctrl -b 1 -d 2 -P 3 -p 0; sudo hub-ctrl -b 1 -d 2 -P 4 -p 0; sudo hub-ctrl -b 1 -d 2 -P 5 -p 0; sudo hub-ctrl -b 1 -d 2 -P 2 -p 0
  fi

Mục đích là để cho nếu như file rc.local có start thì nó cũng không ảnh hưởng đến các port USB ạ.
 

quatmo

Well-Known Member
SC out pipe aplay-rt cực hay anh nhỉ.

Em install TC và aprenderer vào bản smpd 0.6GA này, test trên pi2 + boss dac thấy ok.

TC em install thủ công bám theo tút này:

https://github.com/shawaj/HiTide/blob/main/install.sh

Về bản smpd 0.6GA và 0.9.6. Anh lưu ý file rc.local. Nên thay hết nội dung của nó bằng "exit" hoặc remove hết các lệnh disable USB. Cho dù mình đã tắt hết các service liên quan nhưng nó vẫn được chạy khi mount nas lúc startup (Hoặc các script detect pcminfo).

FIle pipe.sh cũng có thể được gọi khi có event nào đó xảy ra. Khi đó nó chiếm alsa nên TC không chạy được.

Cài đúng, check đủ, stop cả pipe. Chạy TC gì cũng ra cái lỗi này: Segmentation fault. Bản 0.6GA hay 0.96 cũng vậy.

Bản mod_v1.5.1 của anh thì TC chạy.

2021-04-14-09_59_45-pismpd.png
 
Chỉnh sửa lần cuối:

tml3nr

Moderator
Cài đúng, check đủ, stop cả pipe. Chạy TC gì cũng ra cái lỗi này: Segmentation fault. Bản 0.6GA hay 0.96 cũng vậy.

Bản mod_v1.5.1 của anh thì TC chạy.

2021-04-14-09_59_45-pismpd.png
Em test xong xóa mất rồi. Để em làm lại rồi up lên cho các anh test thử nhé.

Em thấy là ở bản 0.9.6 và 0.60GA. Cách set "isolcpus=0,1,2" rất khó cho mình phân bổ cpu khi cài thêm app. Nó hẹp quá.

Em set "isolcpus=0,1" thì các app chạy thoáng hơn.

PS: Cái mpdcheck.sh cực hay anh Quạt ạ. Em mê việc tự động on / off này lắm.
 
Chỉnh sửa lần cuối:

rndce

Well-Known Member
Cài đúng, check đủ, stop cả pipe. Chạy TC gì cũng ra cái lỗi này: Segmentation fault. Bản 0.6GA hay 0.96 cũng vậy.

Bản mod_v1.5.1 của anh thì TC chạy.

2021-04-14-09_59_45-pismpd.png
Bác thử lại từ Bước 7 theo cái này thử:
http://www.hdvietnam.com/threads/ra...nghe-nhac-moi.1174389/page-1060#post-10529364
MÌnh loay haoy mãi, thì làm từ Bước 7 mới chạy được trên smpd 0.96
Nếu chạy /usr/..~/ifi-pa-devs--get thì nó ko ra card id cho mình được. phải làm thủ công từ Bước số 7.
 

tml3nr

Moderator
Em đã làm lại bản smpd 060GA tml3nr_mod_1.5.2 ạ. Setup tc và aprenderer 2.08.

Các bước em làm như sau:

- disable các services sau:

pi@smpd:~ $ sudo systemctl disable mpd.service
pi@smpd:~ $ sudo systemctl disable pipe.service
pi@smpd:~ $ sudo systemctl disable spotify-connect.service
pi@smpd:~ $ sudo systemctl disable ympd.service
pi@smpd:~ $ sudo systemctl disable ympd.socket

- set "isolcpus=0,1" (Cảm ơn anh @mtminh đã khai sáng vụ này)

- install thủ công tc theo script sau:

https://github.com/shawaj/HiTide/blob/main/install.sh

- install aprenderer 2.08

Chạy ok các anh ạ. Tidal next bài tốt.

Em thấy TC và aprenderer nên set RT 2 processes đầu tiên tiếng sẽ hay hơn. Em copy cách của dev Orion@runeaudio:

Mã:
#!/bin/bash

/bin/sleep 2

##### Set priority for tidal connect #####

count=1
for pid in $(pgrep -fw tidal_connect_application);
do
if ((count == 1))
then
sudo chrt -f -p 99 $pid;
fi
if ((count == 2))
then
sudo chrt -f -p 99 $pid;
fi
count=$((count+1))
done

Các anh nào muốn test vui lòng PM cho em để em gửi link nhé. Em sợ bị dev chửi nên không dám public :D

smpd-060ga-tc-aprenderer.png


smpd-060ga-tc.png
 
Chỉnh sửa lần cuối:

quatmo

Well-Known Member
Em đã làm lại bản smpd 060GA tml3nr_mod_1.5.2 ạ. Setup tc và aprenderer 2.08.

Các bước em làm như sau:

- disable các services sau:

pi@smpd:~ $ sudo systemctl disable mpd.service
pi@smpd:~ $ sudo systemctl disable pipe.service
pi@smpd:~ $ sudo systemctl disable spotify-connect.service
pi@smpd:~ $ sudo systemctl disable ympd.service
pi@smpd:~ $ sudo systemctl disable ympd.socket

- set "isolcpus=0,1" (Cảm ơn anh @mtminh đã khai sáng vụ này)

- install thủ công tc theo script sau:

https://github.com/shawaj/HiTide/blob/main/install.sh

- install aprenderer 2.08

Chạy ok các anh ạ. Tidal next bài tốt.

Em thấy TC và aprenderer nên set RT 2 processes đầu tiên tiếng sẽ hay hơn. Em copy cách của dev Orion@runeaudio:

Mã:
#!/bin/bash

##### Set priority for tidal connect #####

count=1
for pid in $(pgrep -fw tidal_connect_application);
do
if ((count == 1))
then
sudo chrt -f -p 99 $pid;
fi
if ((count == 2))
then
sudo chrt -f -p 99 $pid;
fi
count=$((count+1))
done

Các anh nào muốn test vui lòng PM cho em để em gửi link nhé. Em sợ bị dev chửi nên không dám public :D

smpd-060ga-tc-aprenderer.png


smpd-060ga-tc.png
Bản này ngon anh, TC Ok ngay, khỏi phải cài. Thanks anh!

Em add thêm Asset/database, streaming đến AP. Khỏi cần bật mpd/upnp làm chi nữa.

Không dùng MPD thì tắt luôn 2 dòng này (rc.local) để nó không update mpd datatbase
#mpc update RAM
#mpc update USB

SC out pipe aplay-rt cực hay anh nhỉ.

Chiều nay nghe qua lại giữa TC và SC.
Review nhẹ, đúng là hay hết hồn các bác. Máy mình SC sự ngân nga của nhạc cụ kéo dài hơn TC.
 
Chỉnh sửa lần cuối:

binna

Well-Known Member
Settup lại Ropi rất lâu, tốn time. Vậy nên em làm đồ chơi này cho tiện dùng.

Anh Phước và các bác trữ đồ chơi này về, muốn xài cái nào thì copy file bên trong vào /root rồi chạy dòng lệnh ghi trong đó (bỏ qua các dòng wget ... và dòng có dấu#).

Gồm có TC, Aprenderer, Asset, BubbleUpnp, MiniDLNA.
Bản TC này có chỉnh tách thư viện để tránh bị tình trạng update mất UPnP như anh Phước.

Làm 1 bản Ropi update full, rồi ghi ra IMG lưu backup. Sau đó cài các thứ trên sau.

Update#1: Phần cài bung Java đề chạy BubbleUpnp, cần có lệnh tạo folder trước khi bung java.
Mã:
mkdir /opt/jvm

Update#2: Trong file aprenderer.service cần thêm dòng này vào để restart lại nó không bị stop.
Mã:
ExecStartPre=/bin/sleep 30
em cài addon Ropi này, nhưng chưa biết cách add nhạc từ NAS vào miniDLNA, nhờ bác @quatmo hướng dẫn giúp em ạ
 

rndce

Well-Known Member
em cài addon Ropi này, nhưng chưa biết cách add nhạc từ NAS vào miniDLNA, nhờ bác @quatmo hướng dẫn giúp em ạ
sửa file /etc/minidlna.conf
Mã:
sudo nano /etc/minidlna.conf
Mã:
### edit như sau:
media_dir=A,/var/lib/mpd/music
db_dir=/var/cache/minidlna
log_dir=/var/log
log_level=off
port=8200
presentation_url=
friendly_name=Raspi-DLNA
inotify=no
album_art_names=Cover.jpg/cover.jpg
album_art_names=Folder.jpg/folder.jpg
wide_links=yes
/var/lib/mpd/music là nơi chứa nhạc của bác, ví dụ nơi mount nhạc của mình là /mnt/NAS thì dòng trên của mình là: media_dir=A,/mnt/NAS
Lưu lại và thoát minidlna.conf
Chạy các lệnh sau để scan lại nhạc cho miniDLNA
systemctl stop minidlna
systemctl start minidlna
systemctl status minidlna
 

rndce

Well-Known Member
Bản này ngon anh, TC Ok ngay, khỏi phải cài. Thanks anh!

Em add thêm Asset/database, streaming đến AP. Khỏi cần bật mpd/upnp làm chi nữa.

Không dùng MPD thì tắt luôn 2 dòng này (rc.local) để nó không update mpd datatbase
#mpc update RAM
#mpc update USB



Chiều nay nghe qua lại giữa TC và SC.
Review nhẹ, đúng là hay hết hồn các bác. Máy mình SC sự ngân nga của nhạc cụ kéo dài hơn TC.
Bản này mình ko dùng /usr/local/bin/aplay-rt để xuất âm thanh cho TC pk bác Hải.
 

binna

Well-Known Member
Em sorry không nói rõ bác @rndce ui, nhạc của em để trong cục nas synology bác ah, không có cắm vào Pi
Em có etc/fstab để sửa nơi mount nhạc nhưng không biết sửa như thế nào...
 

quatmo

Well-Known Member
em cài addon Ropi này, nhưng chưa biết cách add nhạc từ NAS vào miniDLNA, nhờ bác @quatmo hướng dẫn giúp em ạ

sửa file /etc/minidlna.conf
Mã:
sudo nano /etc/minidlna.conf
Mã:
### edit như sau:
media_dir=A,/var/lib/mpd/music
db_dir=/var/cache/minidlna
log_dir=/var/log
log_level=off
port=8200
presentation_url=
friendly_name=Raspi-DLNA
inotify=no
album_art_names=Cover.jpg/cover.jpg
album_art_names=Folder.jpg/folder.jpg
wide_links=yes
/var/lib/mpd/music là nơi chứa nhạc của bác, ví dụ nơi mount nhạc của mình là /mnt/NAS thì dòng trên của mình là: media_dir=A,/mnt/NAS
Lưu lại và thoát minidlna.conf
Chạy các lệnh sau để scan lại nhạc cho miniDLNA
systemctl stop minidlna
systemctl start minidlna
systemctl status minidlna

Hai bác làm theo bài này, mình vừa test mount từ Windows 10 vào OK.
Tham khảo thêm các tham số mount của anh Hải

Lưu ý: không cần gõ sudo, bỏ qua bước 3 của bài viết.

Mình copy về:

1./ Install cifs-utils
Mã:
pacman -Sy cifs-utils


2./ Mount SMB with mount
Mã:
SMB_USERNAME=nas
SMB_PASSWORD=admin
SMB_SERVER="//192.168.1.4/QOBUZ"
mount -t cifs \
       -o username=${SMB_USERNAME},password=${SMB_PASSWORD} \
       "${SMB_SERVER}" /mnt/NAS


3./ Mount SMB on boot
Mã:
SMB_OPTION="credentials=/etc/samba/credentials,_netdev,x-systemd.automount"
echo "${SMB_SERVER} /mnt/NAS cifs ${SMB_OPTION} 0 0" | \
tee -a /etc/fstab


 
Chỉnh sửa lần cuối:

rndce

Well-Known Member
Em sorry không nói rõ bác @rndce ui, nhạc của em để trong cục nas synology bác ah, không có cắm vào Pi
Em có etc/fstab để sửa nơi mount nhạc nhưng không biết sửa như thế nào...
SSH vào RopieeeXL
#1 Tạo thư mục NAS trong /mnt
Mã:
mkdir /mnt/NAS
#2 Thêm vào /etc/fstab câu sau:

Mã:
//192.168.100.14/Lossless /mnt/NAS cifs _netdev,username=Guest,password=,vers=1.0,uid=1000,gid=1000,sec=ntlm,iocharset=utf8 0 0
câu trên cho trường hợp bác ko dùng username và pass cho NAS, nếu có dùng username và pass thì bác điền vào sau username=xxx,password=yyy (với xxx là username, yyy là pass của bác dùng trên NAS
Lưu lại và thoát /etc/fstab
#3 Chạy câu lệnh sau để mount NAS vào /mnt/NAS
Mã:
mount -av
#4 Sửa file /etc/minidlna.conf
Mã:
nano /etc/minidlna.conf

Mã:
### edit như sau:
media_dir=A,/var/lib/mpd/music
db_dir=/var/cache/minidlna
log_dir=/var/log
log_level=off
port=8200
presentation_url=
friendly_name=Raspi-DLNA
inotify=no
album_art_names=Cover.jpg/cover.jpg
album_art_names=Folder.jpg/folder.jpg
wide_links=yes

/var/lib/mpd/musiclà nơi chứa nhạc của bác, ví dụ nơi mount nhạc của mình là /mnt/NAS thì dòng trên của mình là: media_dir=A,/mnt/NAS
Lưu lại và thoát minidlna.conf
#5 Chạy các lệnh sau để scan lại nhạc cho miniDLNA
systemctl stop minidlna
systemctl start minidlna
systemctl status minidlna

 
Chỉnh sửa lần cuối:

rndce

Well-Known Member
Em build librespot hơn 4 tiếng trên pi2. Nhưng vẫn không chạy được với smpd 0.9.6 alsa. Chưa nói gì tới aplay-rt.

Buồn quá em mò lại đống đồ cổ, may quá thấy bản smpd 0.6GA đã có sẵn librespot output pipe aplay-rt.

Test thử SC chạy luôn, không cần phải khai báo user password.

SC out ra pipe aplay-rt tiếng hay hết hồn các anh ạ. Anh nào muốn test smpd 0.6GA vui lòng PM cho em để em gửi link. Ông dev không muốn public mấy cái này.

Mã:
pi@smpd:~ $ uname -a
Linux smpd 4.14.52-smpd #41 SMP PREEMPT Thu Aug 16 07:48:07 JST 2018 armv7l GNU/Linux

pi@smpd:~ $ cat /etc/os-release
PRETTY_NAME="Raspbian GNU/Linux 8 (jessie)"
NAME="Raspbian GNU/Linux"
VERSION_ID="8"
VERSION="8 (jessie)"
ID=raspbian
ID_LIKE=debian
HOME_URL="http://www.raspbian.org/"
SUPPORT_URL="http://www.raspbian.org/RaspbianForums"
BUG_REPORT_URL="http://www.raspbian.org/RaspbianBugs"

spotify-connect.service

Mã:
[Unit]
Description=Spotify Connect
After=network-online.target

[Service]
Type=idle

ExecStart=/usr/local/bin/librespot --name symphonic-mpd --initial-volume 100 --onevent /home/pi/configs/spotify_event.sh --cache /run --bitrate 320 --zeroconf-port 4000 --backend pipe --device /run/pipeout  &

Restart=always
RestartSec=10
StartLimitInterval=30
StartLimitBurst=20

LimitRTPRIO=99
LimitMEMLOCK=infinity
CPUSchedulingPolicy=fifo
CPUSchedulingPriority=99
CPUAffinity=2

# none, realtime, best-effort, idle
IOSchedulingClass=realtime

# 0(highest) - 7(lowest)
IOSchedulingPriority=0

[Install]
WantedBy=multi-user.target

pipe.service

Mã:
[Unit]
Description=symphonic-mpd pipe service
Wants=network-online.target
After=sound.target
After=network.target network-online.target

[Service]
Type=simple
#PIDFile=/run/pipe.pid
LimitRTPRIO=99
LimitMEMLOCK=infinity
CPUSchedulingPolicy=fifo
CPUSchedulingPriority=99
CPUAffinity=1
KillMode=mixed
KillSignal=SIGHUP
User=root
Group=root

# none, realtime, best-effort, idle
IOSchedulingClass=realtime

# 0(highest) - 7(lowest)
IOSchedulingPriority=0

#ExecStartPre=/home/pi/configs/pipe.sh pre
ExecStart=/home/pi/configs/pipe.sh exec
#ExecStartPost=/home/pi/configs/pipe.sh post

Restart=always
StartLimitInterval=5

[Install]
WantedBy=multi-user.target

pipe.sh

Mã:
#!/bin/bash

device="hw:0,0" # default

# for Sabreberry32 (DAC MASTER)
if [ $(aplay -l|grep "SabreBerry32 DAC sabre9018q2c"|wc -l) = 1 ];then
  device="APLAY_S32_LE"
fi

#prealloc=512
prealloc=1024
period_time=5772
buffer_time=1486940

pipeout=/run/pipeout
pcminfo=/run/pcminfo

timer_calibration="/home/pi/configs/timer_calibration.sh"
opt_aplay="--device=${device} -q -M -F ${period_time} -B ${buffer_time} -p ${pcminfo}"

case "$1" in
  exec)
  if [ ! -e $pipeout ]; then
  mkfifo --mode=666 $pipeout
  fi
  if [ ! -e $pcminfo ]; then
  touch $pcminfo
  chmod 666 $pcminfo
  echo "S16_LE 44100 2" > $pcminfo
  fi

  echo $prealloc > /proc/asound/card0/pcm0p/sub0/prealloc
  $timer_calibration
  exec /usr/local/bin/aplay-rt $opt_aplay $pipeout
  ;;
esac
Trong bản SPMD này mình thấy trong file spotify-connect.service ở ExexStart phần âm thanh xuất ra divice chọn: --device /run/pipeout &
Mã:
ExecStart=/usr/local/bin/librespot --name symphonic-mpd --initial-volume 100
--onevent /home/pi/configs/spotify_event.sh
--cache /run --bitrate 320
--zeroconf-port 4000
--backend pipe
--device /run/pipeout  &
SpoSV.png

- Khi install TC trong bản SMPD này mình thấy file ifi-streamer-tidal-connect.service cũng có chọn device xuất âm thanh như hình:
TCSV.png

MÌnh thắc mắc là nếu trong ifi-streamer-tidal-connect.service, phần -- playback-device mình sửa thành
-- playback-device /run/pipeout (giống như trong spotify-connect.service) -> thì TC có chạy ko (vì như vậy sẽ tận dụng được pipe.service (aplay-rt ?) của smpd ko phải tắt mpd.service, và lúc này có cân thêm file tidal-connect-even.sh để release Alsa cho TC?)
Nhờ bác @quatmo , bác Hải @tml3nr xem thử vụ này.
 
Chỉnh sửa lần cuối:
Bên trên