Objetivos

 

  • Audio digital.
  • Características de una señal de audio digital.
  • Compresión de audio.
  • La interfaz I2S

 

Material requerido

 

 

Taza de café  Un café y diez minutos

Audio digital

 

Llevo bastante tiempo queriendo dedicar una serie de tutos al tema de audio con Arduino / ESP32, porque es un tema que me interesa mucho ya que la música es una de mis pasiones y para ser franco, si usamos un Arduino UNO el tema se acabaría enseguida, pero afortunadamente, el ESP32 es otro tema ya que dispone de un par de pines I2S, un interfaz pensado por y para la música y el sonido digital.

Y, mis queridos amigos, esto ya son palabras mayores y nos permite hacer cositas impensables en nuestros venerables y bastante obsoletos Arduinos oficiales (Hasta ahora)

Por eso vamos a empezar un poco con el tema y procuraremos ir hablando de sonido, música, mp3, wav y otras rarezas que surgen en cuan tocas el tema del audio digital. Pero antes tenemos que hablar de lo que es el sonido y de cómo funciona nuestro oído para asegurarnos de que comprendemos cuatro ideas básicas.

Sonido y sonido digital

 

Según la Wikipedia, el sonido es:

  • El sonido consiste en ondas acústicas que se producen cuando las oscilaciones de la presión del aire son convertidas en ondas mecánicas en el oído humano y percibidas por el cerebro.
  • La propagación del sonido involucra transporte de energía sin transporte de materia, en forma de ondas mecánicas que se propagan a través de un medio elástico sólido, líquido o gaseoso. Entre los más comunes se encuentran el aire y el agua

 

Estoy seguro de que todos tenéis oídos y esta descripción era superflua, pero tiene de bueno que deja claro que el sonido es una onda que se propaga por el aire (Entre otros medios)
Una nota limpia producida por un piano, es de una frecuencia característica. Por ejemplo, el Do central de un piano tiene una frecuencia de 494Hz. Esto quiere decir que al pulsar esa tecla se produce una señal senoidal que se repite 494 veces por segundo. Es lo que te hace diferenciar una tecla pulsada a la izquierda del piano, de otra pulsada más a la derecha.

Nuestro oído es muy hábil interpretando frecuencia de las ondas que se propagan por el aire como tonos musicales (Gracias a lo cual podemos disfrutar de la música). Pero los sonidos pueden ser mezclas de distintas frecuencias, amplitudes y envolventes, y su variación es totalmente analógica. Es decir, que varía de forma continua a lo largo del tiempo y como ya sabéis, los ordenadores no se llevan bien con los valores analógicos.

Por eso para poder tratar digitalmente la música, con todas las ventajas que conlleva, tenemos que digitalizarla. Es decir, debemos usar un convertidor ADC (Analógico a digital) que vaya tomando valores discretos del valor de la señal a lo largo del tiempo y guardarlo, de forma que podamos reconstruir una aproximación a la onda real.

Esto naturalmente puede generar problemas variados:

  • De fidelidad: Si no se toman suficientes muestras por segundo de modo que la representación digital de la onda analógica sea suficientemente parecida a la original y no creáis que es fácil engañar a nuestros oídos.
  • Al numero de muestras que tomamos por segundo, se le llama frecuencia de muestreo y se acepta que para digitalizar música se debe muestrear a 44 Khz (44 mil muestras por segundo)
  • De resolución de la muestra: No es lo mismo muestrear a 8 bits, que nos daría 28 =256 lo que no son demasiadas graduaciones, que, a 16 bits, 216 =65.536 graduaciones

En general el teorema de Nyquist determina que se necesita muestrear una señal armónica al menos a una frecuencia de 2 veces mas q, la frecuencia máxima que se desea digitalizar para asegurar que la representación digital obtenida concuerda con la muestra original y no nos pasa lo que vemos en el grafica de abajo:

Se acepta que el oído humano puede escuchar tonos de entre 20 Hz y 20 khz (Un recién nacido con un oído espectacular, tú y yo entre 40Hz y 8Khz) y Así, para la música digital como los CDs, se muestrea a 44.100 muestras por segundo con una amplitud de 16 bits.

Se puede rebajar esta calidad y a medida que se haga el sonido va perdiendo fidelidad, brillo y calidad, claro. Como siempre, se puede hacer más barato y peor.

¿Qué es la compresión de audio?

 

Veamos, imagínate que queremos digitalizar el audio de un concierto de tu artista favorito que dura una hora. Hemos dicho que para que el sonido tenga calidad CD debemos muestrear a 16 bits, 44Khz por segundo, o sea 44.100 muestras por segundo durante
Una hora que son 3.600 segundos, lo que nos da un total de:

  • 16 x 44.100 x 3.600 = 2.540.160.000 bits / seg = 2.54 Gb / seg.

Podrías grabar esto a un fichero WAV, que es un formato sin comprimir tendrías un CD, pero recuerda que si vas a pasar este fichero a un colega probablemente se lo mandaras por internet y aquí la cosa no va a la velocidad de tu disco duro por lo que ibas a tardar un ratito.

Como el mundo está lleno de gente lista, a alguien se le ocurrió comprimir el audio con una serie de procedimientos, que soy incapaz de comprender, pero e los que me aprovecho con gran satisfacción y agradecimiento, que nos permiten reducir el fichero anterior a poco mas o menos la decima parte usando la compresión MP3, que es una compresión con perdida.

Eso quiere decir que se eliminan a sabiendas partes de la señal original, para reducir el tamaño, pero se hace en unas zonas en las que se ha demostrado el oído humano no suele ser capaz de reconocerlo. Siempre hay gente que dice que el si lo nota, pero yo siempre me río de ellos socarronamente.

Estos mismo han decidido que la calidad perdida no compensa usar el mp3 y han creado otros formatos de compresión sin perdida como el FLAC, OGG o el Monkey’s Audio, que poco más o menos comprime a la mitad el tamaño sin perder calidad.
Personalmente yo no soy del 51% que prefiere Pepsi por lo que me quedo con el mp3 (Que los discos están caros) pero vosotros podéis decidirlo a vuestra bola.

La interfaz I2S

 

Para los que ya estéis bregados con los Arduinos, las interfaces como I2C y SPI os serán familiares. La idea es que a veces tenemos que conectar varios elemente a un mismo cable para transmitir y recibir información del tipo que sea con algunas órdenes de control (Normalmente)

El I2S es otro de estas vías de comunicación y control que esta humilde casa no habíamos tocado hasta ahora, pero que nuestros muy amados ESP32 incluyen de serie (A diferencia de los venerables Arduinos UNO o MEGA) y que está dedicado a transmitir y recibir información de audio.

Entrar a pontificar sobre los modos del I2S y el detalle de la comunicación sería largo y aburrido así que me voy a saltar esta parte, pero aquí os dejo la entrada de la Wikipedia sobre I2S por si os sobra el tiempo: El interfaz I2S

Bástenos decir que como la intención es dedicar unos cuantos tutos al tema del audio digital, vamos a emplear el I2S en muchas de sus variantes y de ese modo será un poco menos árido entrar en los sucios detalles técnicos.

En la próxima sesión, veremos algún sistema básico de reproducir audio digital mediante un dispositivo sencillo que os puede resultar de utilizad y poco a poco iremos avanzando en el apasionante mundo del audio digital, e iremos viendo que cositas podemos hacer con un ESP32 y un poco de imaginación.