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

tml3nr

Moderator
nhận xét bản smpd build TC nghe hay nhất trong tất cả các bản cua anh Hải em từng nghe. :D:D:D:D:D độ động tốt, âm thanh không bị flash như mấy bản trước. AP em chưa nghe được lỗi không play được nên không đánh giá được.
ps. anh rảnh temvier sửa em cái :p:p:p:p:p
Dạ mấy bản smpd tiếng hay hết hồn :D

Em đang kẹt việc nhà, trưa em teamview cho anh nhé.

Anh kiểm tra trước dùm em vài việc sau:

Kiểm tra file aprenderer.service có nằm trong /etc/systemd/system/aprenderer.service hay không?

Nội dung như sau:

Mã:
[Unit]
Description=APlayer Media Renderer Service
Wants=network-online.target
After=network.target network-online.target

[Service]
Type=forking
WorkingDirectory=/usr/aprenderer
ExecStart=/usr/aprenderer/ap2renderer
StandardOutput=null

[Install]
WantedBy=multi-user.target

Anh nhớ mỗi khi có thay đổi bất kỳ file .service nào là phải chạy lệnh:

Mã:
sudo systemctl daemon-reload

Anh có dùng soundset.service để start aprenderer và tc hay không ạ? Theo em nên dùng cách đó sẽ ổn hơn là chạy độc lập cả 2.
 

quatmo

Well-Known Member
Em thấy nó để o mà không biết sẻt
Bấm set như hình, driver đang dùng là số mấy thì set vào số đó, sau khi apply nó tự refesh lại sau đó vài giây. Sẽ tự ghi thông tin chọn Card vào file /etc/asound.conf

2021-04-18-02_17_46-APlayer-Media-Renderer-2.08.png
 

rndce

Well-Known Member
Bấm set như hình, driver đang dùng là số mấy thì set vào số đó, sau khi apply nó tự refesh lại sau đó vài giây. Sẽ tự ghi thông tin chọn Card vào file /etc/asound.conf

2021-04-18-02_17_46-APlayer-Media-Renderer-2.08.png
Mình dùng Aprenderer trong Hifiberry OS, lúc trước có tình trạng Aprender chập chờn, chạy một lúc rồi thoát, sau khi set card giống như @quatmo chỉ thì nó đã chạy bình thường.
A2P.png

Giờ Aprenderer đã chạy ổn định song song với Hifi-Upnp/AV
renderer.png
 

chautranthanh

Well-Known Member
70C04A57-0175-4C0C-910C-3B12F8045143.jpg

Ngoài lề chút, hôm trước nhờ bác Phước mua dùm bo này cho mình hỏi chút chỗ Mode selection dùng để làm gì và nếu cấp nguồn linear âm thanh có cải thiện được không nhỉ ? Cám ơn nhiều
 

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
 
Chỉnh sửa lần cuối:

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.

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

Dạ anh và các bác thực hiện như sau để get event TC: Kết nối, Play, Pause, Stop kết nối.
May mắn TC có cung cấp Trace: Chạy chế độ Trace để xem TC log

Mã:
sudo systemctl stop tc.service

Trace
Mã:
/usr/ifi/ifi-tidal-release/bin/tidal_connect_application --tc-certificate-path /usr/ifi/ifi-tidal-release/id_certificate/IfiAudio_ZenStream.dat -f symphonic-mpd --model-name Streamer --disable-app-security false --disable-web-security false --enable-mqa-passthrough false --enable-websocket-log 3 --log-level 4


Ghi nhận kết nối
useDaemon : 0
autoStart : 1
serviceName : Streamer-7ee83fd9c8c6a974d163c4dc23090a44
serviceType : _tidalconnect._tcp
modelName : Streamer
capability : 0
port : 2019
deviceId : 7ee83fd9c8c6a974d163c4dc23090a44
friendlyName: symphonic-mpd
...
Play/pause
"playerState": "PLAYING"
"playerState": "PAUSED"

Disconnect (Ngưng kết nối TC)
[0] (79) [1] {"command": "notifySessionEnded", "sessionId": "758902921", "suspended": false}
[2021-04-18 18:11:35] [disconnect] Disconnect close local:[1000, ] remote:[1000, ]


Như vậy mình có thể dùng câu lệnh ghi nhận sự kiện quá trình chạy TC để làm điều kiện. Các bác nghiên cứu tiếp.

Xem thêm:
/usr/ifi/ifi-tidal-release/bin/tidal_connect_application -h
 
Chỉnh sửa lần cuối:

toi511

Well-Known Member
Nhận xét. Bản smpd chạy AP layer chayh qua Fifo Pi v 1. Âm thanh có chiều sâu, bass chắc gọn, giải trên lên vừa phải không chói. Túm lại âm thanh hay hay. Anh Hải cho mấy cái tip and trip chỉnh chọt nữa so sánh dem như thế nào.:D:D:D:D:D
 

quatmo

Well-Known Member
Nhận xét. Bản smpd chạy AP layer chayh qua Fifo Pi v 1. Âm thanh có chiều sâu, bass chắc gọn, giải trên lên vừa phải không chói. Túm lại âm thanh hay hay. Anh Hải cho mấy cái tip and trip chỉnh chọt nữa so sánh dem như thế nào.:D:D:D:D:D


Em chạy 4 dòng này để cấp quyền, sau đó cứ dùng WinSCP chuột phải - edit/save cho tiện (khỏi nano).

Mã:
sudo chown pi:pi /etc/systemd/system/asset.service
sudo chown pi:pi /etc/systemd/system/aprenderer.service
sudo chown pi:pi /lib/systemd/system/ifi-streamer-tidal-connect.service
sudo chown pi:pi /lib/systemd/system/umountw.service

Hiện tại trong 4 Service trên anh đang set realtime, anh copy từ mpd.service sang.
Mã:
CPUAffinity=3
LimitRTPRIO=99
LimitRTTIME=infinity
LimitMEMLOCK=infinity
# none, realtime, best-effort, idle
IOSchedulingClass=realtime
# 0(highest) - 7(lowest)
IOSchedulingPriority=0

Em thử thay đổi giá trị trong 2 service này thử xem có khác gì không
asset.service
IOSchedulingPriority=3

umountw.service
CPUAffinity=3 (2 sang 3)
IOSchedulingPriority=4

Mã:
sudo systemctl daemon-reload
sudo systemctl restart umountw.service
sudo systemctl restart asset.service
 

toi511

Well-Known Member
Em chạy 4 dòng này để cấp quyền, sau đó cứ dùng WinSCP chuột phải - edit/save cho tiện (khỏi nano).

Mã:
sudo chown pi:pi /etc/systemd/system/asset.service
sudo chown pi:pi /etc/systemd/system/aprenderer.service
sudo chown pi:pi /lib/systemd/system/ifi-streamer-tidal-connect.service
sudo chown pi:pi /lib/systemd/system/umountw.service

Hiện tại trong 4 Service trên anh đang set realtime, anh copy từ mpd.service sang.
Mã:
CPUAffinity=3
LimitRTPRIO=99
LimitRTTIME=infinity
LimitMEMLOCK=infinity
# none, realtime, best-effort, idle
IOSchedulingClass=realtime
# 0(highest) - 7(lowest)
IOSchedulingPriority=0

Em thử thay đổi giá trị trong 2 service này thử xem có khác gì không
asset.service
IOSchedulingPriority=3

umountw.service
CPUAffinity=3 (2 sang 3)
IOSchedulingPriority=4

Mã:
sudo systemctl daemon-reload
sudo systemctl restart umountw.service
sudo systemctl restart asset.service
Asset em quét ra album nhưng play không chạy anh. Chắc do mạng yếu hay sao ấy. Em play từ nas nhà em
 

tml3nr

Moderator
Dạ anh và các bác thực hiện như sau để get event TC: Kết nối, Play, Pause, Stop kết nối.
May mắn TC có cung cấp Trace: Chạy chế độ Trace để xem TC log

Mã:
sudo systemctl stop tc.service

Trace
Mã:
/usr/ifi/ifi-tidal-release/bin/tidal_connect_application --tc-certificate-path /usr/ifi/ifi-tidal-release/id_certificate/IfiAudio_ZenStream.dat -f symphonic-mpd --model-name Streamer --disable-app-security false --disable-web-security false --enable-mqa-passthrough false --enable-websocket-log 3 --log-level 4


Ghi nhận kết nối
useDaemon : 0
autoStart : 1
serviceName : Streamer-7ee83fd9c8c6a974d163c4dc23090a44
serviceType : _tidalconnect._tcp
modelName : Streamer
capability : 0
port : 2019
deviceId : 7ee83fd9c8c6a974d163c4dc23090a44
friendlyName: symphonic-mpd
...
Play/pause
"playerState": "PLAYING"
"playerState": "PAUSED"

Disconnect (Ngưng kết nối TC)
[0] (79) [1] {"command": "notifySessionEnded", "sessionId": "758902921", "suspended": false}
[2021-04-18 18:11:35] [disconnect] Disconnect close local:[1000, ] remote:[1000, ]


Như vậy mình có thể dùng câu lệnh ghi nhận sự kiện quá trình chạy TC để làm điều kiện. Các bác nghiên cứu tiếp.

Xem thêm:
/usr/ifi/ifi-tidal-release/bin/tidal_connect_application -h
Cảm ơn anh Quạt nhiều. Cái này hay, mình có thể sed log của TC để biết trạng thái của nó.

Nhưng mình vẫn cần phải chạy script trước chứ nó không có tự rình event như Onevent của Spotifyd.

Em sẽ thử mò theo hướng alsa. Mỗi khi alsa có activity là script sẽ chạy.
 

tml3nr

Moderator
anh @quatmo@tml3nr cho em hỏi 2 mode này là sao nhỉ
Untitled4eb030a0fde6208f.jpg
Em chưa coi tới mmap với rw anh ạ. Thấy mmap có dùng trong libao, mpd đời cũ (Trước 0.19) và shairport-sync.

Nhìn theo giao diện. Có vẻ như nếu mình không dùng soft volt thì coi như bỏ qua các options trong ô vuông đó?

Giao diện trong hình của anh là aprenderer 2.07. Bản 2.08 dev Igor đã cho chọn volume hardware rồi. Rất ngon.

Ông dev Igor rất nhiệt tình và tốt bụng. Trước khi ổng ra bản 0.28. Em có nhờ ổng build dùm bản có harware volume cho boss dac và Topping E30. Ổng mod và fix lỗi cho em đến lần thứ 5 thì perfect. Ổng có nói là sẽ đưa việc này vào bản 0.28 sắp phát hành nên em không khoe với cả nhà.

aprenderer 2.08:

aprenderer-208.png
 
Chỉnh sửa lần cuối:

tml3nr

Moderator
Nhận xét. Bản smpd chạy AP layer chayh qua Fifo Pi v 1. Âm thanh có chiều sâu, bass chắc gọn, giải trên lên vừa phải không chói. Túm lại âm thanh hay hay. Anh Hải cho mấy cái tip and trip chỉnh chọt nữa so sánh dem như thế nào.:D:D:D:D:D
Hiện tại với các bản mod. Em thiên về cách chạy một script để optimize âm thanh hơn là set theo service. Em thấy dễ kiểm soát hơn.

Em sẽ soạn lại rồi viết ra cho nó dễ xem. Anh chờ em tí nhé.

Em mới thử build từ đầu bản Buster 5.10.17 stock. Càng về sau tiếng của bản raspian stock càng hay các anh ạ. Em stop hết tất cả các service không dùng là âm thanh vọt lên dữ lắm. Chỉ cần set một vài tuồng optimize cơ bản là âm thanh rất ấn tượng.

Build trên raspian stock có cái sướng là làm gì cũng được, mọi thứ rất dễ dàng chứ không vật vã như mod những bản đã độ của các dev.

Em sẽ làm một bản build từ raspbian stock cho các anh test thử. Tiện dụng cũng có cái hay của nó :D
 
Chỉnh sửa lần cuối:

quatmo

Well-Known Member
Hiện tại với các bản mod. Em thiên về cách chạy một script để optimize âm thanh hơn là set theo service. Em thấy sẽ dễ kiểm soát hơn.

Em sẽ soạn lại rồi viết ra cho nó dễ xem. Anh chờ em tí nhé.

Em mới thử build từ đầu bản Buster 5.10.17 stock. Càng về sau tiếng của bản raspian stock càng hay các anh ạ. Em stop hết tất cả các service không dùng là âm thanh vọt lên dữ lắm. Chỉ cần set một vài tuồng optimize cơ bản là âm thanh rất ấn tượng.

Build trên raspian stock có cái sướng là làm gì cũng được, mọi thứ rất dễ dàng chứ không vật vã như mod những bản đã độ của các dev.

Em sẽ làm một bản build từ raspbian stock cho các anh test thử. Tiện dụng cũng có cái hay của nó :D
Moode 7.1 / Volumio Buster 3.x đều là Buster 5.x, MPD 0.21x/0.22/23x nhiều Tây đánh giá nghe hay hơn thế hệ trước. Nếu có thời gian anh so sánh nghe thử xem giữa cái anh đang build và bản Butser xem sự khác biệt những gì không? Moode 7.1 có thể set cách ly CPU, cả 2 đều có set chạy reatime trong MPD thì phải.
 
Bên trên