Ειδικό Τεύχος : Linux και Ηχος Η Υποδοµή ηµήτρης Γλυνός glynos@storm.cs.unipi.gr Μάιος 2004
Linux και Ηχος, µια πονεµένη ιστορία Οδηγοί (drivers) για τις κάρτες ήχου παρέχονται παραδοσιακά από τους κατασκευαστές τους. Παρέχουν όµως υποστήριξη για το Linux; Standard API; Πρώτη προσπάθεια δηµιουργίας ενιαίου API και συλλογής οδηγών για τον πυρήνα, ϐασισµένη στο Open Sound System της 4Front Technologies 2/19
Open Sound System Οδηγοί καρτών ήχου για µεγάλη γκάµα Unix λειτουργικών (Solaris, Linux, FreeBSD, AIX etc.) Παροχή ενιαίου API µε ψηφιακή είσοδο/έξοδο ήχου (/dev/dsp), διαχείριση µίκτη (/dev/mixer), εισόδους/εξόδους MIDI (/dev/midi) κ.α. υστυχώς OSS = εµπορική εφαρµογή Ο πυρήνας στηρίχθηκε σε τµήµατα κώδικα που δόθηκαν ελεύθερα (OSS/Lite, OSS/Free) 3/19
Advanced Linux Sound Architecture Ελεύθερο λογισµικό µε στόχο την υλοποίηση µιας πλατφόρµας επεξεργασίας ήχου για επαγγελµατική και ερασιτεχνική χρήση σε περιβάλλον Linux Παρέχει πλέον πλήθος οδηγών που καλύπτουν µεγάλο ϕάσµα από τις κάρτες της αγοράς Υποστηρίζει multi-threaded εφαρµογές και SMP συστήµατα Παρέχει API και αντίστοιχη ϐιβλιοθήκη για να διευκολύνει τη συγγραφή λογισµικού που ϑα ϐασίζεται σε αυτό (alsa-lib) 4/19
Advanced Linux Sound Architecture Αντικατέστησε το OSS API στους πυρήνες της σειράς 2.6.x Παρέχει υποστήριξη και για το παλαιότερο OSS API µέσω αντίστοιχου kernel module µιας και υπάρχουν ακόµη εφαρµογές που στηρίζονται σε αυτό Επιτρέπει την ταυτόχρονη αξιοποίηση πολλών καρτών ήχου Οι συσκευές ϐρίσκονται στον κατάλογο /dev/snd (π.χ. /dev/snd/pcmc0d0p). Ο κατάλογος /proc/asound περιέχει πληροφορίες για αυτές. 5/19
Advanced Linux Sound Architecture glynos@speedoghost:/proc/asound$ cat devices 0: [0-0]: ctl 8: [0-0]: raw midi 17: [0-1]: digital audio playback 16: [0-0]: digital audio playback 24: [0-0]: digital audio capture 1: : sequencer 33: : timer glynos@speedoghost:/proc/asound$ cat pcm 00-00: ES1370/1 : ES1370 DAC2/ADC : playback 1 : capture 1 00-01: ES1370/2 : ES1370 DAC1 : playback 1 glynos@speedoghost:/proc/asound$ cat version Advanced Linux Sound Architecture Driver Version 1.0.2c 6/19
Advanced Linux Sound Architecture Επιτρέπει τη δυναµική καταχώρηση εισόδων (inputs) και εξόδων (outputs) στο σύστηµα από ϕυσικές και µη συσκευές (π.χ. software synthesizers) 7/19
Advanced Linux Sound Architecture Επιτρέπει τη «διασωλήνωση» εισόδων/εξόδων µεταξύ συσκευών παρέχοντας έτσι µια αλυσίδα από «ϕίλτρα» 8/19
Καθυστέρηση - Latency Η χρονική διάρκεια µεταξύ της σύνθεσης ενός ηχητικού σήµατος και της ακρόασης αυτού ή της µίξης αυτού µε άλλα σήµατα. Χρήση µεγάλου output buffer - Μεγάλη καθυστέρηση στην παραγωγή του σήµατος Χρήση µικρού output buffer - Κίνδυνος κενού buffer σε περίπτωση που ο scheduler αποφασίσει να δώσει περισσότερο χρόνο σε µια άλλη διεργασία Λύση : Μικρός buffer, Real-Time Scheduling, µικρή καθυστέρηση στον scheduler 9/19
Καθυστέρηση - Latency Πυρήνες >2.5.4 έχουν τη δυνατότητα να διακόψουν µια διεργασία χαµηλής προτεραιότητας ακόµη και όταν αυτή εκτελεί κώδικα σε kernel-space (Robert Love s pre-emptible kernel patch). Εµπειρικά λέγεται ότι το patch των Ingo Molnar, Andrew Morton για 2.4.x δίνει καλύτερες επιδόσεις (παρέχει περισσότερα σηµεία για scheduling σε κρίσιµα - χρονικά - σηµεία του κώδικα). Με συνδυασµό των παραπάνω έχει διαπιστωθεί καθυστέρηση <1msec για το 98% των δειγµάτων 10/19
Musical Instrument Digital Interface Πρωτόκολλο επικοινωνίας µουσικών συσκευών Αναπτύχθηκε το 1982 Μεταφορά µουσικών events (π.χ. NoteOn, PitchBend) µέσω σειριακής (31250 baud) ϑύρας Επιτρέπει τη δροµολόγηση των events µέσω τρίτων συσκευών (MIDI thru) Το ALSA επιτρέπει τη δηµιουργία εικονικών MIDI συσκευών (virtual midi card) 11/19
Musical Instrument Digital Interface 12/19
JACK Audio Connection Kit High Bandwidth Audio Server Επιτρέπει σε περισσότερες από µία εφορµογές να συνδεθούν ταυτόχρονα µε µια συσκευή Ανταλλαγή σήµατος ήχου µεταξύ οποιονδήποτε εφαρµογών - πελατών Επιτρέπει τη σύνδεση πελατών που ϑα του παρέχουν σήµα για µίξη/δροµολόγηση χωρίς απαραίτητα το σήµα να είναι στην ίδια µορφή µε το τελικά παραγόµενο Εξασφαλίζει Υψηλή Προτεραιότητα και Χαµηλή Καθυστέρηση από τον scheduler του πυρήνα 13/19
JACK Audio Connection Kit 14/19
LADSPA Linux Audio Developers Simple Plugin API API για τη συγγραφή ϕίλτρων που επεξεργάζονται το ηχητικό σήµα Αποτελείται από ένα απλό header file που περιγράφει το API και ένα SDK που διευκολύνει την ανάπτυξη κώδικα για plugins Παρόµοια ϕιλοσοφία µε τα VST Plugins του Cubase Υπάρχει πλήθος από ελεύθερα plugins στο Internet αλλά πάντα χρειάζονται περισσότερα :-) 15/19
LADSPA Κάθε plugin δέχεται δεδοµένα από input ports παράγει δεδοµένα σε output ports και ϱυθµίζεται µέσω των τιµών που ϑα λάβει σε control ports 16/19
LADSPA glynos@speedoghost: /ladspa_sdk/bin$./analyseplugin revdelay_1605.so Plugin Name: "Reverse Delay (5s max)" Plugin Label: "revdelay" Plugin Unique ID: 1605 Must Run Real-Time: No Ports: "Input" input, audio "Output" output, audio "Delay Time (s)" input, control, 0 to 5, default 0 "Dry Level (db)" input, control, -70 to 0, default 0 "Wet Level (db)" input, control, -70 to 0, default 0 "Feedback" input, control, 0 to 1, default 0 "Crossfade samples" input, control, 0 to 5000, default 1250, integer 17/19
LADSPA 18/19
Περισσότερες Πληροφορίες http://linux-sound.org http://www.linuxdj.com/audio/lad/index.php3 http://alsa-project.org http://www.zip.com.au/ akpm/linux/schedlat.html http://www.linuxdevices.com/articles/at8906594941.html http://www.harmony-central.com/midi/doc/doc.html http://jackit.sf.net http://www.ladspa.org http://plugin.org.uk 19/19