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

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.
 

quatmo

Well-Known Member
Em báo cáo sơ bộ tình hình wifi usb trên pi.

Hiện tại em test với raspbian buster 5.10.17 hầu hết các wifi usb chạy rất ngon. Nếu như wifi nào không có driver sẵn mình dùng script install-wifi của dev MrEngman setup rất nhanh và chạy OK chứ không lag lag như những năm trước.

Có mấy cái wifi em mua 2016 đến giờ chạy mới ngọt.

Những chipset dev MrEngman đang support là: rtl8188eu, rtl8188fu, rtl8192eu, rtl8812au, rtl8821cu, 8822bu, mt7610 và mt7612.

Chỉ cần chạy lệnh sau:

Mã:
sudo wget http://downloads.fars-robotics.net/wifi-drivers/install-wifi -O /usr/bin/install-wifi
sudo chmod +x /usr/bin/install-wifi
sudo /usr/bin/install-wifi

Thí dụ như bên dưới, em install Edimax EW-7811UTC RTL8812AU chạy OK con gà đen luôn:

Mã:
pi@raspberrypi:~ $ sudo /usr/bin/install-wifi

*** Raspberry Pi wifi driver installer by MrEngman.
*** Performing self-update
*** Relaunching after update

*** Raspberry Pi wifi driver installer by MrEngman.

Your current kernel revision = 5.10.17-v7+
Your current kernel build  = #1403

Checking for a wifi module to determine the driver to install.

Your wifi module is Bus 001 Device 004: ID 7392:a812 Edimax Technology Co., Ltd

And it uses the 8812au driver.

Your Pi revision number is 2a01041
You have a Pi 2B v1.1
Checking for a 8812au wifi driver module for your current kernel.
There is a driver module available for this kernel revision.
Downloading the 8812au driver, 8812au-5.10.17-v7-1403.tar.gz.
Installing the 8812au driver.

Installing driver config file 8812au.conf.
mv 8812au.conf /etc/modprobe.d/.
Installing driver module 8812au.ko.
install -p -m 644 8812au.ko /lib/modules/5.10.17-v7+/kernel/drivers/net/wireless
Loading and running the 8812au driver, 8812au.ko.

More info:

http://downloads.fars-robotics.net/

wifi-usb-all.jpg
Em đang bó tay bó chân với USB Wifi cho Ropieee
Mặc dù đã cài đúng driver 8192eu.ko (8192eu-5.4.83-v7l-1379.tar.gz) cho Linux ropi2 5.4.83-5-SPCKFSH-v7+ armv7l.

Báo cáo cả nhà usb wifi đã về 1 nạm
Tối về em tính ra hết bao nhiêu em post sau nhé
Các bác gởi giúp em địa chỉ giao hàng ah
4843D8D3-3529-485D-B59E-4DF93336AFDF.jpg
Quá ngon!
Hy vọng nó work với Ropieee.
 

rndce

Well-Known Member
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
Để update lên bản Aprender 2.08 này mình down về rồi chép vào /root -> rồi tar
Mã:
tar -xf /root/aprenderer.tar.gz --overwrite -C /opt/
chép đè vô thư mục /opt/aprenderer/ rồi restart lại file service pk bác.
Mã:
systemctl daemon-reload
systemctl restart aprenderer.service
systemctl status aprenderer.service
systemctl enable aprenderer.service
 
Chỉnh sửa lần cuối:

quatmo

Well-Known Member
Để update lên bản Aprender 2.08 này mình down về rồi chép vào /root -> rồi tar
Mã:
tar -xf /root/aprenderer.tar.gz --overwrite /opt/renderer/
chép đè vô thư mục /opt/aprenderer/ rồi restart lại file service pk bác.
Mã:
systemctl daemon-reload
systemctl restart aprenderer.service
systemctl status aprenderer.service
systemctl enable aprenderer.service

Trên SMPD mod bác update Aprenderer như sau, tuy nhiên tùy theo DAC có hiện thêm ô HW hay không.
Mã:
sudo systemctl stop aprenderer.service
sudo rm -rf /usr/aprenderer
cd /tmp
wget http://albumplayer.ru/linux/aprenderer-arm32.tar.gz
sudo tar -xf /tmp/aprenderer-arm32.tar.gz -C /usr/
sudo systemctl restart aprenderer.service
 
Bên trên