Audio digital
Ajustes para tener audio digital de calidad profesional
La latencia es el tiempo que tarda una señal en ser procesada, es decir, el tiempo que pasa entre que el momento en que pulsamos una tecla y aquel en que escuchamos el sonido correspondiente. Cuanto menor sea esta latencia, mejor será nuestro sistema de sonido. Los kernel 2.6 tienen una latencia decente; pero para disfrutar de audio digital con calidad profesional, es necesario aplicar parches y retocar cosas. Lo que sigue a continuación es una recopilación de diferentes fuentes de información disponibles en Internet. Cualquier nueva información (y hasta las correcciones ;)) es bienvenida.
Lo primero es descargar las fuentes del kernel desde kernel.org. En este caso, estamos usando el kernel 2.6.17.6. Descargamos también el parche realtime de Ingo Molnar. Hay que hacer clic con el botón derecho en el enlace correspondiente y escoger "guardar como".
Además, vamos a necesitar tambien un parche para PAM, de modo que los usuarios que pertenezcan al grupo audio tengan permiso para usar realtime. El paquete libpam-modules que viene con etch (en Julio de 2006) es el 0.79-3.1, no tiene el nuevo rlimits que hace esto posible. Por suerte tenemos un paquete pam_debian_rlimits creado por Burkhard Ritter . Para sarge, en este repositorio tenemos un libpam-modules adecuado.
NOTA: el módulo realtime-lsm está obsoleto y será eliminado en cuanto la versión 0.80 de libpam-modules esté disponible. Además, al parecer, no es posible usar a laz el módulo capability (hal se queja si no lo tiene) y el módulo realtime. Por tanto, es mejor olvidarse del módulo realtime y usar PAM.
NOTA2: los paquetes modulo-tal-source de debian, están preparados para instalarse con module-assistant sobre un kernel debian. Si usamos un kernel vainilla de kernel.org (como es el caso), module-assistant fallará.
Muy bien, vamos a descomprimir las fuentes del kernel en el directorio /usr/src. Podemos hacerlo como usuario a condición de pertenecer al grupo "src"
$ cd /usr/src $ tar jxvf /path/hasta/linux-2.6.17.6.tar.bz2 $ ln -s linux-2.6.17.6 linux $ cd linux
Aplicamos el parche realtime
$ patch -p1 < /path/hasta/patch-2.6.17-rt7
Si el parche se aplica correctamente, estamos listos para configurar el kernel. Personalmente me gusta usar "make menuconfig"
$ make menuconfig
Las opciones relevantes en el tema del sonido digital son (según lo indicado en la web de AGNULA/DEMUDI)
CONFIGURACION DEL KERNEL
Para baja latencia:
Block layer --->
IO schedulers --->
<*> Anticipatoty I/O scheduler
<*> Deadline I/O scheduler
<*> CFQ I/O scheduler
Default I/O scheduler (CFQ) --->
Ajustamos nuestro procesador y frecuencia del reloj.
NOTA: Conviene ajustar la frecuencia del reloj lo más alto posible. Y conviene activar el soporte MTRR porque algunas aplicaciones (al parecer) lo usan.
Processor type and features --->
Processor family (Opteron/Athlon64/Hammer/K8) --->
Premption model ---> Complete preemption (realtime)
[*] MTRR (Memory Type Range Register) support
Timer frequency (1000 HZ) --->
Subsistema IDE
El subsistema IDE puede convertirse en un cuello de botella si no está bien configurado. Ver los "Audio hints" de Con Kolivas. Es importante NO configurar "IDE Taskfile access" (no se necesita normalmente) ni "generic/default IDE chipset support" (ya que debemos tener un módulo concreto, no genérico, para el chipset IDE de nuestra placa madre).
Device drivers --->
ATA/ATAPI/MFM/RLL support --->
<*> ATA/ATAPI/MFM/RLL support
<*> Inclide IDE/ATA2 disk support
[*] Use multimode by default
[ ] IDE Taskfile access
< > generic/default IDE chipset support
[*] PCI IDE chipset support
[*] Generic PCI bus-master DMA support
[*] Use PCI DMA by default when available
<M> EL CHIPSET PCI IDE QUE TENGA TU PLACA MADRE
<M> OTROS CHIPSETS PCI IDE SI QUIERES QUE FUNCIONE EN MAS DE UNA PLACA
Subsistema RTC
Algunas aplicaciones de audio usan RTC (seguimos en Device drivers)
Character devices --->
<M> Enhanced Real Time Clock Support
<M> Generic /dev/rtc emulation
[*] Extended RTC operation
Real Time Clock --->
<M> RTC class
--- RTC interfaces
<M> sysfs
<M> proc
<M> dev
--- RTC drivers
<M> Xicor/Intersil X1205
<M> Dallas/Maxim DS1672
<M> Philips PCF8563/Epson RTC8564
<M> Ricoh RS5C372A/B
<M> ST M48T86/Dallas DS12887
<M> Test driver/device
ALSA
Y por supuesto, hay que configurar ALSA, porque sin él, no hay audio que valga... El OSS (sistema obsoleto) queda sin configurar para nada, ALSA proporciona emulación OSS si tenemos alguna aplicación que necesite OSS. Seguimos en "Device drivers".
NOTA: En etch, tanto qjackctl como rosegarden se quejan de que no existe el dispositivo /dev/snd/seq. Esto es debido a que no se carga el módulo snd-seq. Soluciones: Compilar ALSA y el soporte para sequencer dentro del kernel (como se indica aquí) en vez de como módulos. O compilarlos como módulos y luego hacer "echo snd-seq >> /etc/modules" a fin de que el módulo se cargue en el arranque. O cargar el módulo a mano cuando haga falta con "modprobe snd-seq" (hay que hacerlo como root). O crear una regla udev que se encargue de ello al detectar un dispositivo MIDI.
Sound --->
<*> Sound card support
Advanced Linux Sound Architecture ---> <*> Advanced Linux Sound Architecture
<*> Sequencer support
<M> Sequencer dummy client
<M> OSS Mixer API
<M> OSS PCM (digital audio) API
[*] OSS PCM (digital audio) API - Include plugin system
[*] OSS Sequencer API
<M> RTC Timer support
[*] Use RTC as default sequencer timer
[*] Support old ALSA API
tmpfs
Para que JACK (el servidor de audio) tenga un buen rendimiento es necesario tmpfs
File systems --->
Pseudo filesystems --->
[*] Virtual memory file system support (former shm fs)
Ya tenemos configurados todos los ajustes necesarios para conseguir un kernel con baja latencia. Salimos del make-menuconfig y compilamos como usuario con el siguiente comando:
$ fakeroot make-kpkg --append-to-version -loquesea --initrd kernel-image
Tras la compilación, tendremos un paquete .deb en el directorio /usr/src, listo para ser instalado (como root)
NOTA: Si se configura dentro del kernel todo lo necesario para arrancar (y no como módulo), no es necesario usar la opcion --initrd al compilarlo.
$ su
# dpkg -i paquete.deb
Y reiniciamos para que el nuevo kernel entre en accion.
AJUSTES DEL SISTEMA DE ARCHIVOS
No conviene usar reiser4 porque al parecer, aunque tiene un gran ancho de banda, también tiene bastante latencia. Es mejor reiser3, pero tiene la desventaja de que ha quedado obsoleto tras la llegada de reiser4. La recomendación es usar ext3 con algunos retoques adicionales. Tener una partición dedicada a nuestro trabajo con música es buena idea, ya que alguno de estos ajustes, muy buenos para lograr baja latencia, pueden interferir en otras cosas. Sin embargo, tampoco hay gran problema que apliquemos estos cambios a nuestra partición /home (que esta sí, deberíamos tenerla siempre, en mi opinión)
Los dos primeros ajustes se pueden hacer en el archivo /etc/fstab Se trata de especificar las opciones noatime y writeback. Suponiendo que las aplicamos en nuestra partición /home, la línea orginal en /etc/fstab podría ser parecida a esta
/dev/hdaX /home ext3 defaults 0 0
Y la modificada podría ser parecida a:
/dev/hdaX /home/ext3 defaults,noatime,writeback 0 0
Y la tercera optimización que podemos aplicar es usar tune2fs para tener un B-tree, de este modo las búsquedas, etc, serán más rápidas:
$ tune2fs -O dir_index /dev/hdaX