Il est possible de transformer un pc en une station de travail multimédia grâce à linux. Seront abordées ici les quesdtions du son et de l'audio, mais certains des points traités seront également utiles à ceux qui veulent travailler professionellement de la vidéo.
1.- Introduction
Une contrainte très importante qui doit être satisfaite pour une station de travail multimédia est la possibilité de pouvoir effectuer ses tâches en temps réel. Une autre contrainte importante dans un environnement de production est la stabilité.
La préemption des kernels 2.6 est excellente pour des usages comme les serveurs ou les ordinateurs de bureau ou domestiques, mais elle est insuffisante dans un environnement de production multimédia. Il sera donc nécessaire d'installer un kernel temps réel (ou avec préemption complête).
Un soin particulier doit être apporté à la configuration matérielle de l'ordinateur afin de garantir la stabilité du système.
Dans un soucis de performance, des environnements graphiques légers comme xfce4 ou fluxbox seront préferrés à kde ou gnome.
L'overlay pro audio production applications permet de mettre rapidement en oeuvre une station de travail multimédia sous gentoo. Cet overlay a aussi un wiki et une liste d'emails. Je vais essayer ici de présenter son installation et sa mise en oeuvre.
Un excellent site en français de référence pour la mao sous linux est MAO libre. Je me concentrerais donc ici sur la MAO sous gentoo.
Remarque importante
Les ebuilds de cet overlay ne sont pas supportés par les développeurs de gentoo et vous installez ces programmes à vos risques et périls.
2.- Installation et mise à jour de l'overlay
La méthode conseillée est avec layman:
* Installation de layman
Code: Select all
emerge -av laymanCode: Select all
echo "source /usr/portage/local/layman/make.conf" >> /etc/make.confCode: Select all
layman -f -a pro-audioCode: Select all
layman -s pro-audio3.- Installation des sources du kernel multimédia
Remarques importantes
1) Un kernel temps réel permet d'obtenir une préemption complête du système. Cette préemption doit être contrôlée par un mécanisme approprié: PAM-rlimits ou le module du kernel realtime-lsm.
Pour clarifier les choses car c'est souvent un sujet à confusion, la préemption complête (realtime preemption en anglais) est mise à disposition par un patch du kernel écrit par Ingo Molnar. Comme son nom l'indique, ce patch rend le kernel complêtement préemptible, ce qui permet d'obtenir une latence plus faible des opérations, et particulièrement des tâches audio. Un kernel patché avec ce patch est appellé un rt-kernel; cela a à voir avec le scheduling (agencement?) des opérations, mais n'a rien à voir avec les permissions utilisateurs.
Le module realtime-lsm n'est rien d'autre qu'un module de sécurité linux (LSM) qui rend possible d'accorder la permission à l'utilisateur d'utiliser les capacités temps réel du kernel linux. Il fonctionne sur n'importe quel kernel. Il va être remplacé par une version de PAM appelée PAM-rlimits laquelle utilise la fonction RLIMITS du kernel pour authoriser l'accès aux capacités temps réel d'une façon plus sure que le fait le realtime-lsm.
2) N'utilisez pas ce kernel pour obtenir une meilleure latence de kde. Non seulement ce n'est pas son but, mais vous risquez même de voir la latence de kde devenir pire en cas d'utilisation intensive du son. Par contre, vous aurez moins de xruns avec jack ainsi qu'une meilleure latence son.
3) Une station multimédia nécessite une configuration matérielle musclée pour pouvoir effectuer des tâches complexes en temps réel. Points les plus importants: beaucoup de mémoire RAM; disques durs rapides avec partitions séparées pour le système et les enregistrements; côté processeur, un duocore 64 bits sera l'arme ultime.
Lors d'utilisation de disques durs PCI, il est très important que le disque dur servant aux enregistrements soit sur un autre contrôleur (lisez câble) que le disque système. Si les PCI modernes sont rapides, ils bouchonnent au niveau du contrôleur lors d'accès simultanés sur deux partitions séparées ou deux disques séparés situés sur le même contrôleur. Voir SCSI vs. IDE vs. USB vs. FireWire.
Installation des sources
Note: Il s'agit d'un kernel expérimental
Code: Select all
emerge -av rt-sourcesCode: Select all
$ emerge -av rt-sources
These are the packages that would be merged, in order:
Calculating dependencies... done!
[ebuild R ] sys-kernel/rt-sources-2.6.17-r8 USE="-build -fbsplash realtime-lsm -symlink -vesafb-tng" 42,114 kB [4]
Total size of downloads: 42,114 kB
Portage overlays:
[1] /usr/portage/local/layman/test
[2] /usr/portage/local/layman/science
[3] /usr/portage/local/layman/kpex-media
[4] /usr/portage/local/layman/pro-audio
Would you like to merge these packages? [Yes/No]Les USE flags particuliés à ce kernel sont les suivants:
fbsplash: possibilité de boot splash avec gensplash, non recommendé pour un usage en production.
realtime-lsm: installe le module realtime-lsm dans les sources du kernel.
vesa-tng: installe le nouveau vesa-tng framebuffer, non recommandé pour un usage en production.
4.- Configuration du kernel multimédia
Copier la configuration du kernel actuel
Si vous avez le support pour l'accès à la configuration via /proc/config.gz:
Code: Select all
zcat /proc/config.gz > .configCode: Select all
cp /usr/src/linux-`uname -r`/.config .configCode: Select all
make oldconfigModification de configurations importantes
Cet exemple est pour un kernel 2.6.16
Code: Select all
make menuconfigCode: Select all
Processor type and features --->
Preemption Mode (Complete Preemption (Real-Time)) --->
( ) No Forced Preemption (Server)
( ) Voluntary Kernel Preemption (Desktop)
( ) Preemptible Kernel (Low-Latency Desktop)
(X) Complete Preemption (Real-Time)Code: Select all
Processor type and features --->
Timer frequency (1000 HZ) --->
(X) 1000 HZCode: Select all
Device drivers --->
Character devices --->
<*> Enhanced Real Time Clock SupportCode: Select all
Device drivers --->
Sound --->
Advanced Linux Sound Architecture --->
<*> RTC Timer support
[*] Use RTC as default sequencer timer(Note: Regarder dans le fichier .config du rt-kernel pour une liste complête.)
Code: Select all
Kernel hacking --->
[*] Magic SysRq key #that one is always good to have ;)
[ ] Kernel debuggingNote: cette option est disponible seulement si le use flag realtime-lsm était activé lors de l'installation des sources. Si ce n'était pas le cas, sélectionner seulement "Default Linux Capabilities". Vous pourrez toujours installer le module après installation du kernel avec "emerge realtime-lsm".
Code: Select all
Security options --->
[*] Enable different security models
<M> Default Linux Capabilities
<M> Realtime Capabilities5.- Compilation et installation du kernel multimédia
Compilation:
Code: Select all
make && make modules_installCode: Select all
cp arch/i386/boot/bzImage /boot/kernel-2.6.16-rt22
cp System.map /boot/System.map-2.6.16-rt22Code: Select all
cd /boot
mkinitrd -k kernel-2.6.16-rt22 -i initrd-2.6.16-rt22Code: Select all
nano -w /boot/grub/grub.confEt enfin nous y sommes: redémarrez!
6.- Configuration et test du temps réel
Avec le realtime-lsm
Après le redémarrage:
* Si le module realtime-lsm n'a pas été compilé avec le kernel (voir ci-dessus point 5.-)
Le lien symbolique /usr/src/linux doit pointer sur les sources du rt-kernel.
Code: Select all
emerge -av realtime-lsmCode: Select all
id <username>Code: Select all
$ id dom
uid=1000(dom) gid=100(users) groupes=100(users),7(lp),10(wheel),11(floppy),18(audio),19(cdrom),27(video),35(games),80(cdrw),85(usb),440(plugdev),444(kdemouse),445(freenet)Code: Select all
gpasswd -a <username> audio* Chargez le module realtime-lsm:
Code: Select all
modprobe commoncap
modprobe realtime gid=18Code: Select all
echo "realtime" /etc/modules.autoload.d/kernel-2.6
echo "options realtime gid=18" >> /etc/modules.d/realtime
modules-updateCode: Select all
$ lsmod|grep realtime
realtime 5384 0
commoncap 7168 1 realtimeAvec RLIMITS et PAM
* Assurez-vous que vous avez la dernière version de pam de l'overlay:
Code: Select all
emerge -av pamNote: Si vous ne voyez pas l'overlay pro-audio dans la sortie de cette commande, cela signifie que vous utilisez une version ~arch de pam. Supprimez cette référence dans /etc/portage/package.keywords pour pouvoir installer pam-rlimits de l'overlay. La plupart des ebuilds de l'overlay sont en arch. Certains programmes ont des versions cvs et svn, lesquelles sont, conformément à gentoo, en -*.)
* Modifiez /etc/security/limits.conf pour y rajouter
Code: Select all
# rtprio
@audio - rtprio 90
@audio - nice -5
@audio - memlock 500000Avec RLIMITS et sans PAM
Code: Select all
emerge set_rlimitsCode: Select all
@audio /usr/bin/jackd nice=-1 rtprio=85
@audio /usr/bin/qjackctl nice=-1 rtprio=84
@audio /usr/bin/ardour nice=-1 rtprio=83
@audio /usr/bin/hydrogen nice=-1 rtprio=82
@audio /usr/bin/jackeq nice=-1 rtprio=81
@audio /usr/bin/jack-rack nice=-1 rtprio=80
@audio /usr/bin/jamin nice=-1 rtprio=79
@audio /usr/bin/qsynth nice=-1 rtprio=78
@audio /usr/bin/rosegarden nice=-1 rtprio=77
@audio /usr/bin/seq24 nice=-1 rtprio=76
@audio /usr/bin/specimen nice=-1 rtprio=75
@audio /usr/bin/vkeybd nice=-1 rtprio=74
@audio /usr/bin/zynaddsubfx nice=-1 rtprio=73
@audio /usr/bin/ams nice=-1 rtprio=72
@audio /usr/bin/amsynth nice=-1 rtprio=71rtirq
c'est un script de dénattage qui fixe les priorités du matériel. Il assigne différentes priorités aux IRQ, pour donner la priorité la plus importante à la RTC, suivie des cartes sons, de l'usb et de l'i8042. Pour l'installer:
Code: Select all
emerge rtirq
rc-update add rtirq defaultCode: Select all
/etc/init.d/rtirq restartCode: Select all
/etc/init.d/rtirq statusTest de l'audio temps réel
* Démarrez qjackctl et faites votre cofiguration
* Cliquez sur Start -> et JACK doit démarrer.
* Démarrez zynaddsubfx
* Ouvrez Connect dans qjackctl
* et connectez zynadd à la sortie de la carte son
* jouez avec zynadd
Vous devriez entendre zynaddsubfx dans toute sa gloire.
7.- Configuration des IRQs
Il est recommandé de regler la priorité des interruptions matérielles de l'ordinateur comme indiqué ci-dessus avec rtirq.
Je ne saurait trop vous recommander de lire le Linux hardware stability guide, Part 2 de Daniel Robbins . Il est particulièrement important de ne pas avoir d'IRQ partagées avec la carte son. La raison en est que rtirq va assigner la même priorité à tout périphérique qui partagerait la même IRQ que celle de la carte son. Cela provoquerait immanquablement des plantées et des blocages du système.
Il est indispensable pour la stabilité du système que la sortie de "cat /proc/interrupts" ne montre pas d'IRQ partagée:
Code: Select all
$ cat /proc/interrupts
CPU0
0: 85850747 XT-PIC [........N/ 0] pit
1: 65574 XT-PIC [........./ 20] i8042
2: 0 XT-PIC [........N/ 0] cascade
3: 0 XT-PIC [........./ 0] ohci_hcd:usb2
4: 730029 XT-PIC [........./ 0] ohci_hcd:usb1
5: 16 XT-PIC [........./ 0] ohci_hcd:usb3
6: 533038 XT-PIC [........./ 0] ehci_hcd:usb4
7: 1 XT-PIC [........./ 0] parport0
8: 318973 XT-PIC [........./ 0] rtc
9: 0 XT-PIC [........./ 0] acpi
10: 373340 XT-PIC [........./ 0] EMU10K1
11: 1635098 XT-PIC [........./ 0] ohci1394, eth0
12: 0 XT-PIC [........./ 0] bttv0
14: 1343881 XT-PIC [........./ 0] ide0
15: 1351 XT-PIC [........./ 0] ide1
NMI: 0
LOC: 5804087
ERR: 0
MIS: 0Code: Select all
RTIRQ_NAME_LIST="rtc snd usb i8042"Il est aussi bien que la priorité des IRQs dans le kernel corresponde autant que possible à celle dans la carte mère. L'ordre des IRQs dans une machine non APIC est le suivant:
Code: Select all
0, 1, 8, 9, 10, 11, 12, 13, 14, 15, 2, 3, 4, 5, 6, 7
0 : priorité la plus forte
7 : priorité la plus faible8.- Divers
USB et jackd
Les cartes son USB ne permettent pas de réaliser des latences aussi faibles que les cartes son PCI mais elles sont très populaires. La période d'interruption d'un bus USB est d'environ 1 msec. Pour que jackd fonctionne aussi bien que possible, il est nécessaire qu'il soit réglé sur un multiple de cette période, par exemple 48 kHz 3 periods, dans qjackctl. De plus, le chargement de snd-usb-audio avec le paramètre "nrpacks=1" améliore aussi beaucoup la latence (CONFIG_USB_BANDWIDTH et CONFIG_USB_DYNAMIC_MINORS ne doivent pas être sélectionnés dans la configuration du kernel).
EMU10K1 et fontes sonores
D'autres cartes son populaires sont les Live et Audigy qui possèdent un synthétiseur capable d'utiliser les fontes sonores sf2. La configuration par défaut du module du kernel ne permet pas de charger des fontes sonores d'une taille totale supérieure à 128MB.
Pour agrandir cette taille, éditez /etc/modules.d/alsa et rajoutez:
Code: Select all
options snd-emu10k1 max_buffer_size=size_in_MBCode: Select all
# modules-updateVous chargez les fontes sonores comme d'habitude avec asfxload. Pour tester que tout fonctionne bien:
Code: Select all
# cat /proc/asound/card0/wavetableD1Code: Select all
asfxload votre_soundfontCartes Firewire
Le firewire est un bus série à haute vitesse. Son standard est l'IEE1394.
Alsa ne supporte pas ce protocole mais il existe deux solutions pour linux:
IEEE 1394 for Linux
FreeBob project
Avant d'acheter une telle carte, consulter ces sites pour savoir si votre matériel fonctionnera avec linux. Le problème est que si certains fabriquants collaborent avec linux, d'autres ne le font pas, et que pour une carte son il n'y a pas seulement le protocole de communication IEEE1394 à gérer, mais aussi le hardware de la carte. Si votre carte son n'est pas reconnue, adressez une plainte-requête polie mais ferme à son fabricant.
Il n'y a pas à ce jour d'ebuild gentoo pour freebob (à ma connaissance), mais il y en a un pour l'IEEE1394: sys-libs/libavc1394 ainsi qu'un module kernel. N'ayant jamais testé ce type de cartes, je ne peux pas vous en dire plus.




