logotipo

img_google

Curso de Programación de Videojuegos.

Texto original creado por
Jesús Angel Sánchez Mena y Benjamín Moreno Palacios.

Versión HTML por Nacho Cabanes


Sonido. ¿De qué va eso?


El sonido en el ordenador es uno de los componentes fundamentales en cualquier programa que se precie, no ya a nivel de video-juego, sino incluso de aplicaciones que utilizan sonido para resaltar sucesos relevantes como errores, finalización de procesos, etc. En este primer apartado trataremos un poco la teoría del sonido (no os asustéis, os aseguro que absolutamente todo será entendible y hasta os resultará divertido).

En esta primera parte, sólo tratamos de dar una somera idea de cómo funciona esto del 'sonido', no trataremos todavía la programación de ningún dispositivo como el speaker o la tarjeta de sonido, esto lo haremos más adelante. Pero creo que unas primeras nociones de cómo se transmite el sonido, y de cómo se genera, son necesarias en un curso como este, en el que intentamos abarcar y comprender todo lo que sale de nuestro ordenador, así que manos a la obra.
 

El sonido: Un fenómeno físico:

Bien, en primer lugar, tenemos que desterrar la idea de que el sonido es algo mágico que no vemos, pero que gracias a nuestro oído podemos percibir. El sonido es un fenómeno físico que consiste en la transmisión a través de un medio, de una vibración. Un ejemplo muy claro se produce cuando tocamos una cuerda de una guitarra. El movimiento oscilatorio de la cuerda que se mueve arriba-abajo-arriba-abajo..., produce una perturbación en el aire que nos rodea. Las moléculas que rodean la cuerda se ponen a vibrar al mismo ritmo que la cuerda, sus vecinas empiezan a hacer lo mismo y así hasta que la perturbación (el sonido) llega hasta nuestro oído. Este al vibrar, recibe el sonido y lo manda al gran jefe que es el cerebro, donde es interpretado y reconocido.

     Así pues hemos quedado en que un sonido es una simple
vibración del aire. Esta
vibración se representa       |
gráficamente mediante una     A     ****                ****
onda como la de la figura     |   *      *             *
de la derecha.                | *          *          *
                              |*           *          *
     La gráfica dibujada con  |*           *          *
asteriscos representa la     -+------------*----------T--------
perturbación mencionada con   |            *          *
respecto al tiempo            |            *          *
                              |            *          *
     El tiempo marcado con la |              *      *
letra 'T' se le denomina      |                ****
Período . Es un parámetro     |
de la onda (así nos
referiremos a partir de ahora al hablar de la perturbación). Este parámetro lo
que nos indica es el tono del sonido que oímos: A un mayor período el sonido
que oímos es mas grave, y por contra, con un menor período, el sonido será más
agudo.

En realidad no se suele hablar de período, sino de frecuencia que es la inversa del período (1/T) y se define como numero de ondas por segundo. Teniendo en cuenta lo que hemos dicho antes, un sonido será mas agudo cuanto mayor sea su frecuencia, y más grave cuanto menor.

Otro parámetro de la onda es el que hemos marcado en la figura como 'A'.Este parámetro se denomina amplitud y es la mayor distancia de la onda del eje horizontal. La importancia de este parámetro estriba en que es el que determina el volumen del sonido. A mayor amplitud, mayor volumen, y viceversa.
 

Representación del sonido:

Bueno, pues ya conocemos cómo es nuestro amigo el sonido. Pero este amigo presenta una serie de problemas que a continuación os vamos a exponer:

     1º) Las ondas son funciones continuas del tiempo.
     2º) Los valores que toman las ondas son valores analógicos.
     3º) Cómo reproducimos la onda una vez que ya la tenemos almacenada.

'Las ondas son funciones continuas del tiempo': Esto quiere decir, en cristiano, que en cualquier intervalo de tiempo que tomemos, la onda puede tomar infinitos valores. Esto es un verdadero problema, pues la información  ocupa espacio (ya sea en disco o en memoria) y nosotros no podemos guardar  infinitos valores en nuestro PC. Es aquí donde intervienen las 'técnicas de  muestreo'.

Muestrear una onda, es coger de ella el valor que toma cada cierto tiempo. Creo que lo mejor es que miréis la figura y así os enteraréis mejor:

     |
     |
     |                    71.3    70.0
     |            50.0   *X******X****  60.2                30.4
     |     22.1 ***X***** |      |    **X***** 20.9  10.1   X*****
     |     *X***   |      |      |      |     *X****   *****|
     |   ** |      |      |      |      |      |    * X     |
     | *    |      |      |      |      |      |     *|     |
     |*     |      |      |      |      |      |      |     |
    -+------|------|------|------|------|------|------|-----|-------
     |

Como vemos, hemos tomado de esta onda un total de 8 muestras, obteniendo 8 valores de la onda para el intervalo de tiempo. El objetivo de tomar estas muestras, es que a partir de ellas se pueda reconstruir la onda cuando la tengamos almacenada en nuestro disco duro o en memoria pero esto es otra historia que debe ser contada en otro lugar.

Es evidente que cuantas más muestras tomemos, cuando reproduzcamos el sonido a partir de éllas, más parecida será la onda a la inicial, pero también es evidente que mayor espacio ocuparán en nuestro disco.

Cuanto mayor numero de muestras cojamos por unidad de tiempo se dice que es mayor la 'frecuencia de muestreo'. Esta frecuencia está estandarizada en ciertos valores como son los siguientes:

          . 8000 Hz (8000 muestras por segundo): Que es suficiente cuando la onda que digitalizamos representa la voz humana.
          . 11000 Hz, 22000 Hz, 44000 Hz

Estas frecuencias de muestreo no son aleatorias. Hay teoremas y desarrollos' que demuestran que estas frecuencias son las óptimas para sus objetivos, pero no nos vamos a extender más en este asunto.

En cuanto al espacio que ocuparían estas muestras en el disco, es un tema que trataré en el siguiente punto.

'Los valores que toman las ondas son valores analógicos': Como ya sabréis, nuestro querido ordenador, sólo es capaz de representar dígitos binarios (unos y ceros). Por contra, los valores que las ondas pueden tener son, no solo reales, sino infinitos. Por ejemplo un valor que una onda puede tomar es 25.237. Para solucionar esto, lo que hacemos es 'codificar' en binario estos valores.

Es evidente que con 8,16,32,... bits que podamos tener, según la tarjeta de sonido, solo podemos representar un numero finito de valores, con lo que habrá valores que no podamos representar, y habrá un cierto error. Pero también es cierto, que cuantos más bits tenga nuestra tarjeta, mayor numero de valores tendremos, y más exacta será la codificación de los valores de la onda.

Para aclarar todo esto que he escrito seguido, y que parece tan teórico vamos a poner un ejemplo. Imaginad que estamos digitalizando un sonido cualquiera como el ladrido de un perro. Ese sonido es una onda, que vamos a muestrear (tomar valores) a una frecuencia de muestreo de 22000 Hz (22000 muestras por segundo). Si estamos realizando el proceso con una Sound-Blaster (no es por hacer publicidad, es que es la marca que yo tengo) de 16 bits, esto quiere decir que cada muestra que tomamos es codificada con 16 bits. Si suponemos que el ladrido del perro dura 10 seg (ya se que es un ladrido un poco largo, pero es que es por redondear) y echando alguna cuenta:

         1 seg=20000 muestras => 10 seg=200000 muestras

200000 muestras a 16 bits cada muestra son 3200000 bits, que, divididos entre 8 bits, que tiene un byte son... 400000 bytes!!!. Casi medio MegaByte para 10 segundos de ladrido de perro. Aquí es donde debemos tomar la decisión de si deseamos calidad o por el contrario poco espacio en disco. En este ejemplo si hubiéramos utilizado una tarjeta de 8 bits, es verdad que hubiéramos tenido una menor calidad en la digitalización, pero nuestro sonido hubiera tenido (200000*8)/8=200000 bytes, es decir, la mitad que en el caso anterior. Bueno, la decisión es vuestra.

'Cómo reproducimos la onda una vez que ya la tenemos almacenada': En realidad, esta es la parte mas fácil de todo el proceso, ya que se limita a poner el nivel de potencial que nos den las muestras en cierto dispositivo (dígase speaker, tarjeta de sonido, DAC conectado al puerto paralelo, ...), y con esto tenemos el sonido reproducido en la salida. Posteriormente esta señal se amplifica para subir el volumen al deseado, obteniendo el ladrido de perro, a nuestra madre gritando, o a tu amigo al que has digitalizado para cambiarle la voz.
 

Modificación de los sonidos:

Como colofón para este apartadillo dedicado a la naturaleza del sonido, no queríamos terminar sin comentaros cómo se realizan diversos efectos de sonido como superponer dos ondas, agregar eco a un sonido, o aumentar o disminuir su volumen. Estos efectos vienen explicados detalladamente a continuación, todas las modificaciones que vamos a hacer serán realizadas sobre las muestras que hayamos tomado del sonido:

Superposición de sonidos:
La superposición de sonidos consiste en mezclar en una misma onda dos o más sonidos y que se escuchen todos ellos a la vez. Para conseguir este efecto es necesario que ambos sonidos hayan sido digitalizados (muestreados) con una misma frecuencia de muestreo, y lo único que hay que hacer es sumar los valores de las muestras que correspondan al mismo instante de tiempo. La onda resultante es pues la suma de las dos anteriores, obteniéndose así la superposición de los dos sonidos.

Agregar eco:
Este efecto es muy sencillo de realizar, y consiste en sumarle a una onda, ella misma desplazada en el tiempo unos milisegundos. Para ello, a cada muestra se le suma una de un tiempo anterior. La mayor parte de programas que realizan tratamiento de ondas tienen este efecto, e incluso algunos permiten definir a voluntad el tiempo de retardo, probar y disfrutar con ellos, conociendo ahora como funcionan.

Aumentar o disminuir el volumen:
Para realizar este efecto basta con multiplicar por un factor constante todas las muestras del sonido digitalizado. El factor será una constante que, si es menor que uno, reducirá el volumen, y si es mayor que uno, lo amplificará

Bueno, espero que esta primera introducción al tratamiento del sonido por ordenador no os haya aburrido demasiado. A lo mejor he sido un poco teórico en mis explicaciones, pero es necesario tener un sitio donde mirar cuando no sepáis alguna cosa. Además de lo que vais a flipar con los amigos cuando les contéis esto. Si tenéis alguna duda mas, ya sabéis donde estoy ...
 
 
 


[ Anterior | Índice | Siguiente ]

La última versión de este texto se podrá encontrar en Internet, en la dirección:
www.pobox.com/users/ncabanes/