¿Cómo cambio la frecuencia de muestreo de PulseAudio en Ubuntu?

Reunido en la sede Central de la CGT y frente a 178 gremios Conferederados, Juan Perón determinó la conducta que debían tener los trabajadores y explica cómo cambiar la frecuencia de muestreo del audio en Ubuntu.

¡Trabajadores!

Yo sé que aquellas instrucciones que os he grabado en cintas magnetofónicas, no cayeron en oídos sordos.
Indudablemente que desde hace más de 18 años sabemos que nuestro sistema es capaz de operar sonido de manera libre. Esto ha sido así gracias a la encomiable labor de los trabajadores, que han realizado un adecuado servidor de audio llamado ALSA, y también un adecuadamente provisto herramental que nos permite hacer una sana utilización del mismo, el PulseAudio.

De esta manera, los sistemas operativos GNU con Linux están capacitados para las tareas típicas de reproducción o registro sonoro.

¿Cómo se ha logrado esto? Siempre he dicho que los problemas difíciles han de desgranarse en muchos problemas fáciles, dables de ser atacados con procesos de solución simple. La virtud en tal caso es la concatenación de la simpleza para resolver todo.

Esto - que se replica en todos los órdenes de la vida - también puede replicarse en el audio digital. En esencia la computadora registra los sonidos a través de la señal eléctrica de un micrófono, y analiza y convierte dichos valores voltaicos en datos binarios unívocos. Gracias a la codificación de los pulsos modulados (PCM), la computadora es capaz de distinguir la altura de los tonos, siempre que se la registre con una resolución de referencia lo suficientemente apta para censar las variaciones tímbricas, y se lo haga con una frecuencia de muestreo lo suficientemente elevada como para suplir el registro del oído humano, que es lo que nos interesa. Esta técnica justicialista se llama "muestreo", o sampling.
Como nuestro oído - en sus mejores momentos - es capaz de registrar vibraciones que van entre 30 Hertzios y hasta los 20.000 Hertzios, las fluctuaciones eléctricas equivalentes ha de registrarse al menos con el doble de dicha frecuencia a fin de lograr una reproducción de alta fidelidad.

Naturalmente que esto ha sido estipulado por los capitostes de la industria. Hoy en día todo hijo de vecino puede utilizar el estándar industrial para captura y reproducción sónica, que consiste en una tasa de 16 bits de resolución, y de unos 44.100 Hertzios de frecuencia de muestreo ("Sampling Rate"). Esto a su vez se realiza en dos canales, "uno para cada oreja", con la idea de lograr sonido estéreofónico.


Ello es adecuado para la gran mayoría de las aplicaciones normales en audio. Sin embargo, la tecnología de la fidelidad de sonido ha avanzado, y nos permite hoy superar por ciertos márgenes dichos valores. De manera tal que se ha hecho popular también el estándar de los 48.000 hertzios en el manejo de audio. Es bueno recordar que esta frecuencia es actualmente la nativa en las trasmisiones digitales de audio, incluyendo la popular HDMI).

En tal caso, podríamos querer saber qué calidad utiliza nuestro hardware de sonido, y podríamos querer incrementarla hasta los 48 Khz. En ocasiones existe hardware de avanzada especialmente pensado para la alta definición, que puede utilizar mayores velocidades de muestreo, incluyendo 88.200 Hz, 96.000 Hz, 176400 y 192000 Khz.

Ahora bien, para hacer un guiso de liebre, lo primero es cazar la liebre. Para cambiar la frecuencia de muestreo en el sistema operativo, lo primero es saber cuál es la que se estamos usando. Ello lo podremos hacer abriendo una terminal con Ctrl+Alt+T e ingresando:

pacmd list-sinks | grep 'sample spec'

Esto nos detallará el tipo de algoritmo, la cantidad de canales utilizados, y la frecuencia actual. Por ejemplo en mi caso indica:


sample spec: s16le 2ch 44100Hz

Esto  crípticamente nos refiere que nuestro hardware de audio está empleando una frecuencia de muestreo de 44,1 KHz, a dos canales estéreo, con una resolución de 16 bits en modalidad de orden de byte "Little Endian" .

Como habrán comprendido tal es el estándar adecuado para una calidad de audio digital muy buena, similar a la de un CD de música. Por otro lado, reduce la carga del hardware de audio, consumo de memoria, y ocupación de nuestra CPU. El orden de byte en tanto depende de nuestra CPU, y normalmente es Little Endian; si tenemos dudas podemos ingresar en la terminal:

 lscpu | grep 'byte'

...para que nos lo informe).

Esta configuración de audio es muy popular, y la que se utiliza por defecto pues todas las placas de sonido integradas o no funcionan con ella, y la música distribuida en plataformas digitales utiliza esta tipología. Debemos considerarla como el mínimo común denominador del audio..

Pero en ciertas condiciones (como por ejemplo el audio de alta definición, la existencia de hardware que lo permite, etc), podríamos querer aumentar la frecuencia de muestreo de reproducción. La mejora de calidad suele ser imperceptible para el oído humano, pero en ciertas condiciones nuestro hardware de audio podría funcionar mejor en su frecuencia de muestreo nativa. Normalmente esto es así con la mayoría del hardware de audio aparecido desde el año 2010 en adelante.

Para hacer el cambio en Ubuntu y aumentar la frecuencia de muestre, debemos modificar a mano el archivo del servidor de sonido. A tal fin abrimos una terminal con Ctrl+Alt+T e ingresamos:

sudo nano /etc/pulse/daemon.conf

Se abrirá el editor GNU Nano con el archivo de configuración de Pulseaudio. En este archivo de configuración se interpretan los caracteres ";" como "comentarios", de manera tal que todo lo que esté escrito tras ellos no será tenido en cuenta por el servidor, y nos sirve como ejemplo.

Por ello, al final del archivo, buscamos la sección:

; default-sample-format = s16le
; default-sample-rate = 44100
; alternate-sample-rate = 48000
; default-sample-channels = 2
; default-channel-map = front-left,front-right

...y la modificamos para que quede así:

# Modificado por Perón 
default-sample-format = s16le
default-sample-rate = 48000
alternate-sample-rate = 44100 
; default-sample-channels = 2
; default-channel-map = front-left,front-right

No os recomiendo alterar nada más. Llegado el caso, nos conviene saber que default-sample-format Nos permite especificar el formato de muestreoa utilizar por el servidor ALSA. En la arquitectura Intel o AMD conviene utilizar sólo las terminadas en "le", que sirver para procesadores tipología Little Endian. Las opciones que existen son u8, s16le (16 bits "Less Endian", que viene por defecto. Hay que evitar las "be" en este caso. Las opciones posibles son s16be, s24le, s24be, s24-32le, s24-32be, s32le, s32be, float32le, float32be, ulaw, alaw.

El recomendado es s16le, pero en ciertos caso podríamos querer aumentar a s32le, con un mayor consumo de CPU y memoria RAM.


La documentación oficial (en inglés) del sistema ALSA está aquí. Una vez terminada la edición, guardamos el archivo con Ctrl+o y salimos del editor GNU Nano con Ctrl+x.

También podríamos querer editar un archivo personalizado de usuario ~/.asoundrc, que especificará las configuraciones de usuario.

Lo haremos con:

nano ~/.asoundrc

...y le pegamos el texto:

# ~/.asoundrc
# archivo de configuración de sonido específico para el usuario xxxx
pcm.!default {
type rate
slave {
pcm "plughw:0,0"
# frecuencia de muestreo que queremos, puede ser 44100, 48000.
rate 48000
}
}

Lo guardamos con Ctrl+o y abandonamos el editor con Ctrl+x.

Para que todo este andamiaje social del sonido surta efecto, hemos de reiniciar nuestro sistema con:

sudo reboot

Una vez iniciado el sistema operativo, podríamos comprobar los cambios nuevamente con:

pacmd list-sinks | grep 'sample spec'

sample spec: s16le 2ch 48000Hz