Δημιουργία headless Archlinux MPD server σε Raspberry Pi model B με USB DAC

tuxx

Supreme Member
3 January 2014
3,319
/dev/null
To σύστημα στήθηκε από την αρχή με το χτεσινό fix και με ένα υπέροχο και πανάλαφρο web interface (το οποίο δεν απαιτεί web server), optimized για raspberry pi:

http://www.ympd.org/







Mένει μόνο ένας τρόπος να βρω να γράψω σε img μόνο το ωφέλιμο κομμάτι της sd card και να το ανεβάσω κάπου, γιατί με απλό dd είναι περίπου 8gb.
 
Last edited:

NikTsel

Senior Member
6 November 2007
451
Αθηνα ,Κεντρο
Ρε Μιχαλη δεν υπαρχεις λεμε ...... Με μπριζωνεις ασχημα τι να κανω που δεν περισευει ευρω ακομα .Αν το τελειοποιησεις κερναω καφε στο σπιτι ...
 

tmjuju

Administration Team
Staff member
21 January 2007
21,651
Mένει μόνο ένας τρόπος να βρω να γράψω σε img μόνο το ωφέλιμο κομμάτι της sd card και να το ανεβάσω κάπου, γιατί με απλό dd είναι περίπου 8gb.

gzip / bzip θα ήταν η εύκολη λύση
αλλά μάλλον εννοείς ότι δεν ήταν όλο με μηδενικά αρχικά η SD, Οπότε όντως μπορεί να κάνεις information leak.
Και πάλι πρόσεξε το leakage οποιουδήποτε password/username
Δοκίμασε το clonezilla το χρησιμοποιώ και εγώ τον τελευταίο καιρό
http://geekanddummy.com/how-to-raspberry-pi-tutorial-part-2-sd-card-backuprestore/
ΙΜΗΟ, βαλε και δύο τεστ audio files, λ.χ. απ την 2l.no κάνα δωρεάν.
 

tuxx

Supreme Member
3 January 2014
3,319
/dev/null
Θενκς για το clonezilla, μάλλον αυτό κάνει μια χαρά! Username και passwords θα έχει default τα οποία θα χρειάζονται αλλαγή.

Θα ψάξω να βρω μικρά flacs και θα φτιάξω έναν φάκελο test-files. Θα ψάξω να βάλω ένα μουσικό θέμα σε 16/44.1, 24/96 και 24/192.


Ερώτηση για γνώστες τώρα. Έχω ένα αρχείο σε 24/192, το οποίο θεωρητικά δεν υποστηρίζει το dac μου. To βάζω όμως και το παίζει μια χαρά. Πως γίνεται αυτό εφόσον δεν έχω ορίσει να γίνεται downsampling, ενώ το τεστάροντας με:

cat /proc/asound/card0/pcm0p/sub0/hw_params

το output λέει 96.


@NikTsel ευχαρίστως να κάνουμε και δοκιμή στο χώρο σου. Ειδικά αν έχεις κάποιο USB DAC θα βοηθήσει πολύ!
 

NikTsel

Senior Member
6 November 2007
451
Αθηνα ,Κεντρο
Μηπως κανει downsampling anyway το DAC (θεωρητικα παντα) αφου ειναι ο τελευταιος κρικος προς τον ενισχυτη ?
Δυστηχως δεν εχω usb dac ...
 

tuxx

Supreme Member
3 January 2014
3,319
/dev/null
Χθες υπήρξε και νέο commit στον USB driver:

The BRANCH=next firmware now includes support for FIQ acceleration of high-speed isochronous transactions. This significantly reduces the CPU overhead of high-speed isochronous transports and performs them with much more robust timing than previously. There are a number of restrictions on transactions that can be accelerated that should not be encountered in any sane device driver:
The endpoint servicing interval must be 1 microframe
All transfers in a URB must have a memory address that starts on a 32-bit boundary
More than 2 transfers must be queued per URB

A message will be printed to the kernel message log if an isochronous transaction fails any one of these tests.

To activate the functionality, you need to set dwc_otg.fiq_fsm_mask=0x7 in /boot/cmdline.txt


Πλέον υπάρχει λοιπόν και το option:

Code:
dwc_otg.fiq_fsm_mask=0x7


και όπως λέει ο developer αυτό προορίζεται για: high-speed isochronous transactions


Δυστυχώς η γνώση μου δε με βοηθάει, αλλά αν έχω καταλάβει καλά αυτό ενδιαφέρει χρήστες σαν εμένα με adaptive DAC. Όποιος σκαμπάζει από hardware σε τέτοιο επίπεδο, ας μας δώσει τα φώτα του τι εννοεί ο developer.
 

tuxx

Supreme Member
3 January 2014
3,319
/dev/null
Αυτή τη στιγμή χτίζω μια εντελώς light εκδοχή του τελευταίου mpd:

https://aur.archlinux.org/packages/mpd-light/

Αν και δεν νομίζω ότι υπάρχει ενδιαφέρον να χρησιμοποιήσει κάποιος τη διανομή μου αυτή τη στιγμή, θα ήταν καλό να ξέρω αν θεωρείτε ότι κάποιο από τα αφαιρεμένα options είναι χρήσιμο και θα πρέπει να επανενεργοποιηθεί:

Light version without ao, ffmpeg, jack, modplug, pulse, shout, sidplay, soundcloud, wavpack, avahi
 
26 June 2006
14,830
Athens
Φίλε συγχαρητήρια για την όλη προσπάθεια!!
Δηλαδή με ένα Raspberry, ενσύρματη σύνδεση Ethernet στο router / modem, κάρφωμα του σκληρού / σκληρών στις usb του Raspberry, σύνδεση με usb dac και έλεγχο από android κινητό μπορώ να ακούω μουσική bit perfect υπερ-υψηλής πιστότητας?
 

tuxx

Supreme Member
3 January 2014
3,319
/dev/null
Το raspberry μέχρι τώρα έχει ταλαιπωρήσει πολύ κόσμο με usb dacs. Αν υποθέσουμε ότι με το νέο driver το DAC σου συνεργάζεται καλά με το rpi, τουλάχιστον μέχρι 24/96 θα ακούσεις και με πολύ μεγάλη ευκολία.

Όσο για το bit perfect, ο mpd έχει καλή φήμη σχετικά με αυτό. Εφόσον δεν υπάρξει αλλοίωση μέσω usb λοιπόν, ναι θα είναι bit perfect.

Ρίξε και δω μια ματιά:

http://www.avclub.gr/forum/showthre...ή-για-Raspberry-pi-βασισμένη-σε-Archlinux-MPD
 
Last edited:

tuxx

Supreme Member
3 January 2014
3,319
/dev/null
Ερώτηση (μάλλον μόνο ο tmjuju θα ξέρει :p )

Προσπαθώ να αυξήσω το niceness του mpd σε -20.

Αρχικά σκέφτηκα να πειράξω το systemd script και να δίνω απλά ένα nice -20 στον mpd. Αυτό που με μπερδεύει είναι ότι σηκώνονται πολλά proccesses του /usr/bin/mpd και η λύση μου θα δώσει niceness -20 σε όλα.

Κοιτάω ένα script του runeaudio που δίνουν ξεχωριστά niceness στα διάφορα proccesses:

Code:
count=1
for pid in $(pgrep -w mpd); 
do
	if ((count == 3)) 
	then
		echo "### Set priority for: mpd-player thread ###";
		renice -15 $pid;
	fi
	if ((count == 4))  
	then
		echo "### Set priority for: mpd-output thread ###";
		renice -20 $pid;
	fi
	if ((count == 5))
	then
		echo "### Set priority for: mpd-decoder thread ###";
		renice -18 $pid;
	fi
count=$((count+1))
done

Κατ αρχάς δεν καταλαβαίνω πως το παραπάνω script αντιλαμβάνεται τα mpd-player, mpd-output mpd-decoder, αφού κοιτώντας στο htop εγώ τα βλέπω όλα ως /usr/bin/mpd.

Να δώσω ένα -20 σε όλα να τελειώνω;
 

tmjuju

Administration Team
Staff member
21 January 2007
21,651
Νατξ μη τα κάνεις όλα -20
Καντα όλα -19 ή -18 :D

Τόσο fine grain με τιμές που βλέπω -15, -18, -20 , είναι κατά πάσα πιθανότατα αυθαίρετες και όχι βάση μελέτης, πάνε να εισάγουν μαγεία, αλλά ως συνήθως η μαγεία δεν πιάνει πάντα.
Έχουμε συζητήσει για υλικό για Realtime-kernel/patches αν θες να ασχοληθείς, αλλά και πάλι ΙΜΗΟ υπερβολή.


Όσον αφορά το παραπάνω (που θεωρητικά έχει και ένα κάρο bugs)
το –w δεν πρέπει να είναι κοινά αποδεκτό στο pgrep. Θα προτιμούσα κανονικό grep τα full-names των process | grep -v grep
αλλά σίγουρα ένα script σα το παραπάνω , μπορείς να το έχεις για να κάνεις τις δοκιμές σου μες τις μέρες, πιθανολογώ ότι δε θα ακούσεις διαφορά, και μετά θα σου φαίνεται άχρηστο.
 

tuxx

Supreme Member
3 January 2014
3,319
/dev/null
Βάσει αυτού που λες, πείραξα τώρα το systemd script του mpd.

Από

Code:
[Unit]
Description=Music Player Daemon
After=network.target sound.target

[Service]
ExecStart=/usr/bin/mpd --no-daemon

[Install]
WantedBy=multi-user.target

To έκανα:


Code:
[Unit]
Description=Music Player Daemon
After=network.target sound.target

[Service]
ExecStart=/usr/bin/nice -n -19 /usr/bin/mpd --no-daemon

[Install]
WantedBy=multi-user.target

Και δείχνει να δουλεύει.

Σε ευχαριστώ πολύ για την απάντηση!

υ.γ. Δεν το κάνω για διαφορετικό ηχητικό αποτέλεσμα, απλά για να διασφαλίσω την προτεραιότητα. Πχ το ntfs-3g πολλές φορές σηκώνει cpu πολύ ψηλά και θέλω να σιγουρευτώ ότι δεν θα επηρρεάσει τον mpd.
 
Last edited:

tmjuju

Administration Team
Staff member
21 January 2007
21,651
Βάσει αυτού που λες, πείραξα τώρα το systemd script του mpd.

Από

Code:
[Unit]
Description=Music Player Daemon
After=network.target sound.target

[Service]
ExecStart=/usr/bin/mpd --no-daemon

[Install]
WantedBy=multi-user.target

To έκανα:


Code:
[Unit]
Description=Music Player Daemon
After=network.target sound.target

[Service]
ExecStart=/usr/bin/nice -n -19 /usr/bin/mpd --no-daemon

[Install]
WantedBy=multi-user.target

Και δείχνει να δουλεύει.

Σε ευχαριστώ πολύ για την απάντηση!

υ.γ. Δεν το κάνω για διαφορετικό ηχητικό αποτέλεσμα, απλά για να διασφαλίσω την προτεραιότητα. Πχ το ntfs-3g πολλές φορές σηκώνει cpu πολύ ψηλά και θέλω να σιγουρευτώ ότι δεν θα επηρρεάσει τον mpd.

Στο ntfs μάλλον είναι waiting (io) και όχι πραγματικός φόρτος cpu
Γενικά εάν δεις embedded set top boxes προτιμούν ext (παλιό μάλιστα λ.χ. ext3) σα native format, φυσικά ntfs is the way to go – much more winuser friendly
 

tuxx

Supreme Member
3 January 2014
3,319
/dev/null
Όταν αναφέρομαι στο ntfs-3g εννοώ όταν έχει μπει πάνω κάποιος ntfs δίσκος. Τα partitions του OS είναι ext4/vfat.
 
Last edited:

tmjuju

Administration Team
Staff member
21 January 2007
21,651
Όταν αναφέρομαι στο ntfs-3g εννοώ όταν έχει μπει πάνω κάποιος ntfs δίσκος. Τα partitions του OS είναι ext4/vfat.

ναι για Usb έγραφα και εγώ,
λ.χ. σκεψου satelitereceivers που γραφουν ταινίες, τα κανουν initialize σα ext
αλλα φυσικά οι χρήστες θα προτιμισουν (win/mac) fat/ntfs, usb formated disks
τεσπα λεπτομέριες

tuxx και πάλι 1000 μπράβο για τη δουλεία σου!!!
 

tuxx

Supreme Member
3 January 2014
3,319
/dev/null
Δοκίμασα μόλις να καρφώσω usb stick ενώ έπαιζε το rpi από samba server.

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

Το καλό με τον νέο driver είναι ότι πλέον δίνει outpout σε errors που έχουν να κάνουν με το USB. Έτσι αφού έβαλα το στικάκι έτρεξα ένα dmesg και το τελευτάιο μήνυμα ήταν αυτό:

Code:
[11986.593820] Transfer to device 4 endpoint 0x1 failed - FIQ reported NYET. Data may have been lost.

Ακόμα και την αναγνώριση του σφάλματος τη βρίσκω ένα πολύ μεγάλο βήμα.

Από κει και πέρα βέβαια με ένα update db, το φλασάκι αναγνωρίστηκε αμέσως και η μουσική αναπαραγωγή από αυτό ήταν άψογη.
 

tuxx

Supreme Member
3 January 2014
3,319
/dev/null
Γράφω μετά από πολύ καιρό σε αυτό το νήμα, κυρίως απευθυνόμενος προς κομπιουτεράδες που θέλουν να ψαχτούν. Οτιδήποτε έχω κάνει στο Archphile και οτιδήποτε χρειάζεστε για να πειραματιστείτε με boards όπως τα, RPI, Odroid κλπ, βρίσκονται στο github:

https://github.com/archphile/recipe/tree/master/scripts


Στο λινκ παραπάνω υπάρχουν scripts ανά board, όπου επί της ουσίας είναι μαζεμένη όλη η συνταγή δημιουργίας του Archphile. Οτιδήποτε περιέγραψα πριν χρόνια για το πως γίνεται με το χέρι, εδώ θα γίνει αυτόματα, απλώς εκτελώντας ένα script σε μια καθαρή εγκατάσταση ArchlinuxARM.

Δε θα παίξει πάντοτε, γιατί τραβάει τα δικά μου πακέτα και αρκετές φορές θέλουν χτίσιμο από το μηδέν. Παρόλα αυτά, μπορεί κάποιος κάλλιστα, να χρηισμοποιήσει τα scripts αυτά, να αλλάξει τα δικά μου πακέτα με τα επίσημα του ArchlinuxARM, να κάνει οποιεσδήποτε αλλαγές επιθυμεί και σε όλα τα υπόλοιπα και να καταλήξει με το CustomPhile του!

Όλο το διάστημα που ετοιμάζω τη νέα έκδοση, έχουν υπάρξει κάτοχοι odroid που δεν είχαν την υπομονή να περιμένουν το image μου και χρησιμοποιώντας το script μου ήδη απολαμβάνουν το Archphile στο σύστημά τους.

Για να συνοψίσω, όλη η πληροφορία που χρειάζεται κάποιος για να στήσει ένα headless σύστημα όπως το στήνω εγώ, υπάρχει στο github μου. Για οτιδήποτε χρειαστεί κανείς, μπορεί να ποστάρει στο νήμα αυτό και αν προκύψει οποιοδήποτε θέμα, ευχαρίστως να βρούμε τη λύση παρέα!