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

tml3nr

Moderator
Đúng vậy anh, bridge sang ouput khác Ok. PulseAudio Server.
Không biết anh xem cái script này chưa? Là cách Belena làm, họ làm TC bridge từ Alsa sang PulseAudio.
https://raw.githubusercontent.com/balenablocks/audio/master/scripts/alsa-bridge/debian-setup.sh

https://github.com/balenalabs/balen...cb580fbfaca/plugins/tidal/Dockerfile.template
Em có rình TC của dev shawaj trong balena nhưng chưa thấy cái này. Hay quá anh nhỉ @@

Hiện tại chung quanh TC có quá nhiều hướng để mò: Set kernel sao cho âm thanh hay, test các loại output, phối hợp với các services khác...

Riêng về việc liên kết volume với alsa mixer. Em thấy có vài manh mối. Hiện tại nếu như mình dùng sound có mixer "Analogue". Set như bài bên dưới sẽ sync được volume của app và alsa:

https://www.raspberrypi.org/forums/...482274aa433a29918b7a8ab37b0&start=25#p1835793

asifjahmed đã viết:
Hey Everyone!

I got this working nicely on the RPi 4 so I figured I would share my learnings here for others:

-DietPi was the platform of choice for me, default install is fine except you also have to install avahi-daemon

-Once I got Tidal connect itself working, I didn't have any volume control. I learned that the "speaker_controller"application" needs to be running in order for that part to work. In order to have this run in the background (and at startup) like the underlying tidal connect service, I created a new service description:

Mã:
[Unit]
Description=Speaker Controller
After=ifi-streamer-tidal-connect.service

[Service]
Type=forking
Restart=on-failure
RestartSec=3
ExecStart=/usr/bin/screen -L -dmS root /usr/ifi/ifi-tidal-release/bin/speaker_controller_application

[Install]
WantedBy=multi-user.target

Create that file in /etc/systemd/system/, chmod+x it, and enable it via systemctl in order to have it start up after tidal connect, at startup. Works great!
 

tml3nr

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

tml3nr

Moderator
Em bình chọn cho anh là nhà sưu tập wifi Pi khủng nhất nam bộ. :D:D:D:D:D
Dạ không biết sao em mê wifi dữ lắm :D

May mắn nữa là cái apple TC 2TB của em nó kết nối với pi2 bằng wifi của Raspberry tiếng rất sạch và êm hơn rất nhiều so với cắm dây. Nên em test wifi miệt mài luôn.

Em thấy khi dùng wifi. Chipset của bên nhận và bên phát nếu cùng hãng kết nối với nhau sẽ rất smooth và tiếng rất êm.

Cái apple TC của em dùng chipset Broadcom. wifi raspberry cũng vậy.

Lúc trước em dùng airport express. Chỉ có wifi phát từ chip broadcom là cho tiếng hay nhất và không bao giờ lag.
 
Chỉnh sửa lần cuối:

toi511

Well-Known Member
Dạ không biết sao em mê wifi dữ lắm :D

May mắn nữa là cái apple TC 2TB của em nó kết nối với pi2 bằng wifi của Raspberry tiếng rất sạch và êm hơn rất nhiều so với cắm dây. Nên em test wifi miệt mài luôn.

Em thấy khi dùng wifi. Chipset của bên nhận và bên phát nếu cùng hãng kết nối với nhau sẽ rất smooth và tiếng rất êm.

Cái apple TC của em dùng chipset Broadcom. wifi raspberry cũng vậy.

Lúc trước em dùng airport express. Chỉ có wifi phát từ chip broadcom là cho tiếng hay nhất và không bao giờ lag.
Bản smpd của anh anh quatmo gởi em ap khơi động lên được 30s là biến mất. Tc play ok. Lỗi gì anh
 

tml3nr

Moderator
Bản smpd của anh anh quatmo gởi em ap khơi động lên được 30s là biến mất. Tc play ok. Lỗi gì anh
aprenderer bị out thường là do alsa đang bị một service nào đó giành alsa lúc nó start anh ạ.

Mình có thể chạy lệnh sau để xem alsa đang rảnh hay không:

Mã:
cat /proc/asound/card*/pcm*p/sub*/hw_params

Nếu báo "closed" là alsa đang free:

Mã:
pi@raspberrypi:~ $ cat /proc/asound/card*/pcm*p/sub*/hw_params
closed

Nếu báo như bên dưới là alsa đang bị hold:

Mã:
pi@raspberrypi:~ $ cat /proc/asound/card*/pcm*p/sub*/hw_params
access: MMAP_INTERLEAVED
format: S16_LE
subformat: STD
channels: 2
rate: 44100 (705600/16)
period_size: 2258
buffer_size: 11290

Mình nên cho aprenderer start trước, rồi sau đó mới tới TC.

Cách dễ nhất là dùng service để chạy một script. Trong đó mình dùng lệnh "/bin/sleep x second" để delay start service aprenderer và service TC.

Thí dụ như em tạo soundset.service để chạy soundset.sh:

Mã:
#!/bin/bash

/bin/sleep 4; sudo systemctl restart aprenderer

/bin/sleep 2; sudo systemctl restart ifi-streamer-tidal-connect
 
Chỉnh sửa lần cuối:

toi511

Well-Known Member
aprenderer bị out thường là do alsa đang bị một service nào đó giành alsa lúc nó start anh ạ.

Mình có thể chạy lệnh sau để xem alsa đang rảnh hay không:

cat /proc/asound/card*/pcm*p/sub*/hw_params

Nếu báo "closed" là alsa đang free:

pi@raspberrypi:~ $ cat /proc/asound/card*/pcm*p/sub*/hw_params
closed

Nếu báo như bên dưới là alsa đang bị hold:

pi@raspberrypi:~ $ cat /proc/asound/card*/pcm*p/sub*/hw_params
access: MMAP_INTERLEAVED
format: S16_LE
subformat: STD
channels: 2
rate: 44100 (705600/16)
period_size: 2258
buffer_size: 11290

Mình nên cho aprenderer start trước, rồi sau đó mới tới TC.

Cách dễ nhất là dùng service để chạy một script. Trong đó mình dùng lệnh "/bin/sleep x second" để delay start service aprenderer và service TC.

Thí dụ như em tạo soundset.service để chạy soundset.sh:

Mã:
#!/bin/bash

/bin/sleep 4; sudo systemctl restart aprenderer

/bin/sleep 2; sudo systemctl restart ifi-streamer-tidal-connect
ap chay thấy rồi anh, nhưng 30 s là nó stop. khởi đông lai nó chạy đúng 30s lại mất.
 

tml3nr

Moderator
ap chay thấy rồi anh, nhưng 30 s là nó stop. khởi đông lai nó chạy đúng 30s lại mất.
aprenderer sẽ bị lỗi nếu như thời điểm nó start alsa đang bị hold.

Có khả năng là pipe.service hoặc pipe.sh đã chạy. Khi đó alsa sẽ bị hold.

Hiện tại em chưa test việc dùng luân phiên pipe và alsa.

Anh test như sau:

Disable aprenderer và tc, restart. Kiểm tra alsa có được release hay không bằng lệnh "cat /proc/asound/card*/pcm*p/sub*/hw_params".

Start thủ công aprenderer, kiểm tra aprenderer webui trong vài phút. Nếu nó ok mình start tc

Nếu ổn anh tạo file setsound.service:

Mã:
[Unit]
Description=Kernel Optimizations
After=network.target

[Service]
ExecStart=/usr/bin/soundset
Type=simple

[Install]
WantedBy=multi-user.target

File /usr/bin/soundset chứa nội dung sau:

Mã:
#!/bin/bash

/bin/sleep 4; sudo systemctl restart aprenderer

/bin/sleep 2; sudo systemctl restart ifi-streamer-tidal-connect
 

toi511

Well-Known Member
aprenderer sẽ bị lỗi nếu như thời điểm nó start alsa đang bị hold.

Có khả năng là pipe.service hoặc pipe.sh đã chạy. Khi đó alsa sẽ bị hold.

Hiện tại em chưa test việc dùng luân phiên pipe và alsa.

Anh test như sau:

Disable aprenderer và tc, restart. Kiểm tra alsa có được release hay không bằng lệnh "cat /proc/asound/card*/pcm*p/sub*/hw_params".

Start thủ công aprenderer, kiểm tra aprenderer webui trong vài phút. Nếu nó ok mình start tc

Nếu ổn anh tạo file setsound.service:

Mã:
[Unit]
Description=Kernel Optimizations
After=network.target

[Service]
ExecStart=/usr/bin/soundset
Type=simple

[Install]
WantedBy=multi-user.target

File /usr/bin/soundset chứa nội dung sau:

Mã:
#!/bin/bash

/bin/sleep 4; sudo systemctl restart aprenderer

/bin/sleep 2; sudo systemctl restart ifi-streamer-tidal-connect
chắc do set drive chưa đúng hay sao anh. ap chạy bình thường nhưng chỉ cần bấm play nhạc là webgui không vào được. mặc dù dùng lênh của anh báo vẫn close
 

toi511

Well-Known Member
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
 

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.
 

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