Βελτίωση της ποιότητας του ήχου 🔉 σε SBC για Debian διανομές

Ο ήχος στο Linux, είναι μια πονεμένη ιστορία. Σήμερα οι περισσότερες διανομές χρησιμοποιούν το Pulse Audio (που αγαπάμε να μισούμε) του Lennart Poettering (που αγαπάμε να μισούμε) ο οποίος έχει φτιάξει και κάποια άλλα πράγματα, που επίσης αγαπάμε να μισούμε. Συνήθως απλά ο ήχος δουλεύει χωρίς να χρειαστεί να κάνουμε κάτι (αλλιώς η διάγνωση του προβλήματος δεν είναι οτι καλύτερο μπορεί να σου συμβεί).

Οι επαγγελματίες του ήχου θέλουν περισσότερα πράγματα όπως χαμηλή υστέρηση (latency) καθώς υποστήριξη για εξωτικές κάρτες ήχου. Συχνά δε χρησιμοποιούν ένα άλλο σύστημα ήχου το jack.

Η σωστή υποστήριξη ήχου για όλες τις ανάγκες έχει πολλές πολυπλοκότητες και έχουν δοκιμαστεί πολλές λύσεις στο παρελθόν. Αλλά αυτό το άρθρο δεν φιλοδοξεί να σας λύσει τα προβλήματα, ούτε να πει την ιστορία. Θεωρεί πως έχετε ήχο στον υπολογιστή σας και θέλετε απλά να “βελτιώσετε” την ποιότητα του.

Το Blog Dynabot’s Computer Audio για 10 χρόνια προσπάθησε να κάνει ακριβώς αυτό. Και διάβασε πολύ, δοκίμασε πολλά πράγματα και βρήκε πως το πολύ δεν είναι πάντα και καλό. Για παράδειγμα αν αυξήσεις την προτεραιότητα εξυπηρέτησης του συστήματος ήχου έχεις καλύτερης ποιότητας ήχο. Αν την αυξήσεις πολύ παύεις να έχεις τόσο καλό ήχο.

Μετά από χρόνια δοκιμών κατέληξαν σε ένα μικρό σύνολο τιμών που δίνουν το βέλτιστο αποτέλεσμα σε όλα τα είδη της μουσικής και για όλα τα προγράμματα. Μετέφεραν την εμπειρία τους σε δύο αποθετήρια. Ένα για συστήματα σε TinyCore Linux και ένα για συστήματα βασισμένα στο Debian σε single board computers όπως Raspberry Pis :raspberry:, αλλά και ASUS Tinkerboard και Odroid C2.

Κάποια στιγμή θα υπάρχει και λύση για επιτραπέζιους υπολογιστές ή laptop. Ελπίζω σύντομα. Μπορείτε βέβαια να δοκιμάσετε και να δείτε αν βελτιώνει κάτι.

Δοκιμάστε με δικιά σας ευθύνη και πείτε μας αν είδατε βελτίωση στην ποιότητα του ήχου. Το δικό μου μουσικό αυτί έχει την καλλιτεχνική αίσθηση του Βίνσεντ βαν Γκογκ οπότε δεν θα μεταφέρω τις εντυπώσεις μου :rofl::joy::sound:

Εγκατάσταση

θα δουλέψουμε από το τερματικό :terminal:. Πρώτα θα κατεβάσουμε το αποθετήριο από το github :git: https://github.com/dynobot/Linux-Audio-Adjustments

cd tmp
sudo -H apt install git
git clone https://github.com/dynobot/Linux-Audio-Adjustments
cd Linux-Audio-Adjustments
xdg-open . &

Το επόμενο βήμα είναι να δούμε τα αρχεία που κατεβάσαμε. Ποτέ δεν τρέχουμε κάτι από μια πηγή που δεν εμπιστευόμαστε. Κοιτάζουμε και προσπαθούμε να καταλάβουμε όσο μπορούμε, να δούμε τι ακριβώς κάνει. Ίσως μάθουμε και κάτι από αυτή την διαδικασία.

Την πρώτη φορά που το έτρεξα, μου έκανε reboot χωρίς να με ρωτήσει. Αυτό είναι κάτι που θα αλλάξουμε. Θα κάνουμε αλλαγές στο αρχείο :spiral_notepad: basic-install.sh

xed basic-install.sh

(ή ‘gedit’, ‘kate’, ‘gvim’ ή οποίον διορθωτή θέλετε) θα βρούμε την τελευταία γραμμή εκεί που λέει reboot και θα την σβήσουμε. Θα προσθέσουμε τις παρακάτω δυο γραμμές στο τέλος.

sysctl net.core.rmem_max=16777216 net.core.wmem_max=16777216
/usr/bin/Sound.sh

Οι αλλαγές αυτές ενσωματώθηκαν στο script

Επίσης θα αλλάξουμε την γραμμή που λέει

[[ -f /etc/rc.local ]] || echo -e '#/bin/bash\n\nexit 0' > /etc/rc.local

σε

[[ -f /etc/rc.local ]] || echo -e '#/bin/bash\n\nexit 0' >> /etc/rc.local

αλλιώς θα σβήσει ότι υπάρχει στο αρχείο /etc/rc.local.

Αποθηκεύουμε και προχωράμε στην εγκατάσταση.

chmod +x *.sh
sudo ./basic-install.sh

Ποτέ μα ποτέ δεν κάνουμε κάτι στο σύστημα αν δεν ξέρουμε πως να το επαναφέρουμε στην προηγούμενη του κατάσταση. Για να ακυρώσουμε την εγκατάσταση

chmod +x *.sh
sudo ./remove.sh

και επανεκκίνηση.

Δυσκολευτήκατε στην εγκατάσταση; Είδατε διαφορά στον ήχο; Πείτε μας στα σχόλια.

Το βρήκαμε στο Automated Tuning Of Linux Audio | Hackaday

Διαβάστε

3 «Μου αρέσει»

Το συγκεκριμένο script basic-install.sh θέλει δικαιώματα root για να τρέξει σωστά.
Καλό θα ήταν, κατά τη γνώμη μου, να προσθέσουν(με) και το παρακάτω στον κώδικα.
Το ίδιο και για το remove.sh

if [ "$EUID" -ne 0 ]
  then echo "Please run as root"
  exit
fi

ώστε να μη μας επιστρέψει το παρακάτω στη περίπτωση που το τρέξουμε ως απλός χρήστης.

[spoiler]

/usr/bin/Sound.sh: Permission denied
chmod: cannot access '/usr/bin/Sound.sh': No such file or directory
-----------------------------------
| Increasing Sound Group Priority |
-----------------------------------
mv: cannot move '/etc/security/limits.conf' to '/etc/security/limits.conf.bak': Permission denied
./basic-install.sh: line 19: /etc/security/limits.conf: Permission denied
./basic-install.sh: line 20: /etc/security/limits.conf: Permission denied
./basic-install.sh: line 21: /etc/security/limits.conf: Permission denied
./basic-install.sh: line 22: /etc/security/limits.conf: Permission denied
-----------------------------
| Improving Network Latency |
-----------------------------
./basic-install.sh: line 26: /etc/sysctl.d/network-latency.conf: Permission denied
./basic-install.sh: line 27: /etc/sysctl.d/network-latency.conf: Permission denied
./basic-install.sh: line 28: /etc/sysctl.d/network-latency.conf: Permission denied
---------------------------
| Creating System Service |
---------------------------
./basic-install.sh: line 32: /etc/rc.local: Permission denied
grep: /etc/rc.local: No such file or directory
sed: can't read /etc/rc.local: No such file or directory
chmod: cannot access '/etc/rc.local': No such file or directory
sysctl: permission denied on key 'net.core.rmem_max'
sysctl: permission denied on key 'net.core.wmem_max'
./basic-install.sh: line 38: /usr/bin/Sound.sh: No such file or directory

[/spoiler]

1 «Μου αρέσει»

Κάτι που θα συμβεί αν τρέξεις την εντολή

curl -sSL https://github.com/dynobot/Linux-Audio-Adjustments/raw/master/basic-install.sh | bash

που προτείνει για την εγκατάσταση του :slight_smile:.

Και αν δε το σύστημα κάνει reboot χωρίς sudο την πάτησες.

Επίσης (το script),

  1. δεν γράφει κάτι στο rc.local,
  2. το Sound.sh που αποθηκεύεται στο /usr/bin/ για κάποιο λόγο, σε ότι αφορά τον scheduler, είναι γραμμένο μόνο για mmcblk0 Sound.sh

Νομίζω θέλει κάποιες μικροδιορθώσεις.
Για τον scheduler για παράδειγμα, για όλους τους δίσκους (sd*) αλλά και για mmcblk* , θα μπορούσε να προστεθεί το παρακάτω.

for disk in $(ls -1 /sys/block | egrep '^mmcblk|^sd')
        do echo noop > /sys/block/$disk/queue/scheduler
done

Έχω στείλει ένα patch request με τα απλά. Δεν στέλνεις και εσύ ένα;

Αφού έστειλες ήδη, στείλε και το παραπάνω. Το διόρθωσα για να δουλεύει μέσα στο δικό τους Sound.sh.
Δεν ξέρω αν το έχουν κάνει επί σκοπόν το συγκεκριμένο, πχ αν θέλουν noop scheduler μόνο για sd cards, αλλά ο noop υπάρχει από default στον πυρήνα και λειτουργεί εξίσου καλά και σε μη μηχανικούς δίσκους (πχ SSD).

Ο λόγος είναι επειδή το script προορίζεται για χρήση σε single board computer.
Δεν νομίζω να αφορά τα x86 συστήματά αλλά μόνο τα arm.
Θέλει μελέτη

2 «Μου αρέσει»

Κάτι τέτοιο υπέθεσα κι εγώ. Αποκλείεται να το έκαναν κατά λάθος (σκέφτηκα). Οπότε σε x86 ίσως να μην “ακούσεις” κάποια διαφορά στον ήχο.

Offtopic

This is the first time cerebrux has posted — let’s welcome them to our community!

:joy:

Ναι επομένως μάλλον θα απορρίψουν την οποιαδήποτε αποστολή patch. Επίσης δεν το έχω βρει σε κάποιο post που να αφορά το Ubuntu Studio που είναι το κατεξοχήν λειτουργικό με άπειρα optimizations για sound/video

1 «Μου αρέσει»

Και κάτι τελευταίο. Άσχετο με arm ή x86.
Η παρακάτω γραμμή, που υπάρχει στο basic-install.sh, δεν θα αντικαταστήσει ότι έχει προσθέσει από μόνος του ο χρήστης στο rc.local ; (ερώτημα είναι αυτό, να απαντήσει κάποιος για επιβεβαίωση).
Δεν θα ήθελε κανονικά διπλό >> (append) ;

[[ -f /etc/rc.local ]] || echo -e '#/bin/bash\n\nexit 0' > /etc/rc.local

Ναι κανονικά για να προσθέσει πρέπει να είναι >> αλλιώς πάει το rc.local

Δεν το έχω πρόχειρο αλλά νομίζω στα SBC το rc.local είναι κενό όποτε και γιαυτο δεν υπάρχει πρόβλημα.

Ψάχνοντας το readme είδα ότι οι ελάχιστες απαιτήσεις του “ενότητα prerequisites” γράφει :

Prerequisites

  1. nano file editor; apt install nano
  2. Or the ability to use vi editor, your choice.

Should work on any SBC running Debian based OS, has been tested on:

  • Raspberry Pi (v1) model B
  • Raspberry Pi 2 model B
  • Raspberry Pi 3 model B and B+
  • Allo Sparky
  • ASUS Tinkerboard
  • Odroid C2

Άρα το script είναι customized για Debian διανομές των συγκεκριμένων board. Εξού και οι περίεργες «επιλογές» του script

1 «Μου αρέσει»

Αυτό ισχύει και για τις περισσότερες κανονικές διανομές. Άλλη είναι η ένστασή μου. Εφόσον το επιβεβαίωσες κι εσύ, αν εγώ ως χρήστης έχω προσθέσει κάποια πράγματα στο rc.local πριν τρέξω το script, όταν το τρέξω … “γεια σας”.

1 «Μου αρέσει»

Ναι, ενώ στο blog τους λένε για desktop x86 υπολογιστές, δεν ισχύει για το συγκεκριμένο.
Στο https://github.com/dynobot/Linux-Audio-Adjustments/issues/2 λένε

I’m in the process of creating a repo for x86, when its done I will have them all cross hyper linked. I’m going to close this issue as its not directly related to the arm repo.

Mea Culpa και ευχαριστώ για την διόρθωση. (Τελικά είμαστε καλύτεροι από το hackaday όπου κανείς δεν τα πρόσεξε αυτά :sunglasses:).

3 «Μου αρέσει»

To patch που έστειλα έγινε δεκτό, αλλά δεν έχει όλα όσα συζητήθηκαν εδώ.

2 «Μου αρέσει»