Vous êtes sur la page 1sur 4

Espacializacin de Sonidos en Tiempo Real

Mauricio Ubilla C.
Departamento de Ciencia de Computacin, Escuela de Ingeniera, Pontificia Universidad Catlica de Chile

Abstract
El sonido 3D es una tecnologa que se ha desarrollado en los ltimos aos gracias a mediciones de HRTFs (Head-Related Transfer Functions) desarrolladas por varias universidades. Si bien esta tecnologa esta limitada tpicamente a un auditor, la experiencia en sonido entregada a esta persona es mucho mas realista e inmersiva que lo que existe actualmente, y por un bajo costo. Sin embargo, la mayora de las demostraciones actuales de sonido 3D son estticas y pre-grabadas. Un paso necesario hacia un sonido 3D dinmico, es poder especializar sonidos en tiempo real, es decir, en tiempo de reproduccin. En este paper se propone un esquema para especializar sonidos en tiempo real, discutiendo posibles aplicaciones y se verifica su factibilidad computacional midiendo tiempos en una implementacin en tiempo discreto.

Introduccin
El sonido 3D es una tecnologa que permite especializar sonidos a travs de audfonos, es decir, reproducirlos de manera que el auditor perciba que provienen de una ubicacin deseada. Para conseguir esto, se filtra el sonido que se desea especializar con una HRTF (Head Related Transfer Function) que corresponde a la respuesta del odo externo (en conjunto con la cabeza y el tronco) a un impulso emitido desde la posicin de inters. Varias universidades han realizado mediciones de estas respuestas al impulso. Una de las mas conocidas es la desarrollada por el Massachussets Institute of Technology (MIT) con el mueco Kemar, al cual ubicaron un micrfono en cada odo y realizaron mediciones de impulsos emitidos a diferentes ngulos de azimuth y elevacin en una esfera de 1.4 metros de radio. Estas mediciones se encuentran disponibles en Internet. Los resultados obtenidos de especializar sonidos mediante esta tcnica son asombrosos, sin embargo tiene la limitacin de requerir el uso de audfonos, lo cual restringe su uso tpicamente a una persona. A pesar de esto, lo realista e inmersiva de la experiencia para esta

persona, as como su bajo costo (solo se requiere audfonos y un software) la mantienen como un producto interesante y tentativamente comercializable. Una aplicacin posible y comercialmente viable del sonido 3D es en la industria de los videojuegos. Dada la gran cantidad de juegos monojugador, especialmente para PC, es perfectamente viable ofrecer Sonido 3D al jugador mediante el uso de audfonos. Otra aplicacin posible y comercialmente ms ambiciosa es en la industria de la msica. Si las grabaciones de msica contuvieran pistas separadas para cada instrumento, seria posible para el auditor disponer los instrumentos a su alrededor a su gusto. Una ltima aplicacin posible y an mas ambiciosa, es el sonido virtual, como complemento a la realidad virtual. Un sistema de sonido virtual requiere reconocer los giros de la cabeza del auditor (head tracking) para actualizar la espacializacin de los sonidos dependiendo de hacia adonde este orientado. Todas estas aplicaciones tienen en comun, el requerir una espacializacion en tiempo real de los sonidos, es decir, se

debe especializar continuamente trozos del sonido de manera que su posicin virtual con respecto al auditor se actualize en tiempo de reproduccin. A continuacin se propone un mtodo para conseguir esto.

Esquema Propuesto
El problema de especializar sonido en tiempo real o tiempo de reproduccin, requiere realizar 3 tareas: Por un lado, se requiere conocer, en todo instante, la posicin del auditor relativa a las fuentes, la cual puede cambiar, ya sea por movimientos de las mismas fuentes como por movimientos del auditor. Estos cambios de posicin pueden generarse en forma dinmica por decisin de la aplicacin misma, o por input del usuario, ya sea a travs del mouse, teclado o joystick, (como en el caso de un juego) o por sistemas mas complejos como Head Tracking. Por otro lado, se requiere especializar continuamente los sonidos, en base a estas posiciones relativas del auditor con respecto a las fuentes, y generar una mezcla de todos los sonidos posicionados. Finalmente, se requiere reproducir continuamente estas mezclas de sonidos, de manera que el auditor no deje de percibir sonido en ningn instante. Cada una de estas tareas se debe realizar continuamente, y en forma paralela: no se puede dejar de hacer ninguna de las tres en ningn momento. Se trata por lo tanto de un problema concurrente: cada tarea debe ser realizada por un proceso independiente. Se debe, por lo tanto definir 3 procesos: 1) Un proceso actualizador: encargado de actualizar el estado del sistema de sonido, conformado por las posiciones relativas de todas las fuentes con respecto al auditor. Este proceso recibe como entrada las interacciones del usuario con el sistema (I/O) y entrega como salida un objeto con el estado del sistema.

2) Un proceso productor: encargado de espacializar pequeas ventanas de tiempo de los sonidos, y generar una mezcla de ellas. El tamao de la ventana determinara la tasa de refresco de las posiciones de los sonidos. Este proceso recibe como entrada un objeto con el estado del sistema y entrega como salida un buffer con el sonido mezclado. 3) Un proceso consumidor: encargado de reproducir en forma continua, las ventanas de tiempo de sonido entregadas por el proceso productor a travs del buffer. Este proceso recibe como entrada, el buffer del proceso anterior y entrega como salida la reproduccin de sonido. Observaciones: a) El proceso actualizador (1), no necesariamente debe ser un proceso independiente a la aplicacin, de hecho puede ser el mismo proceso, pero claramente los procesos 2 y 3 deben ser procesos independientes al resto. b) Para que el problema sea factible de resolver, se requiere que el proceso productor (2) sea al menos tan rpido en generar las mezclas de los sonidos espacializados, como el proceso consumidor (3) en reproducirlas. Es aqu donde radica la principal dificultad del problema. c) Notar que el tiempo que tarda el proceso productor en generar la mezcla es directamente proporcional a la cantidad de sonidos a especializar. Existe por lo tanto un nmero mximo de sonidos que es posible espacializar, el cual puede ser, en el peor de los casos, cero. d) Existen parmetros que se pueden controlar para intentar conseguir que el problema sea factible. Estos son, el tamao de la ventana de tiempo, la tasa de muestreo de los sonidos y desde luego, la cantidad de sonidos. e) La implementacin de la convolucion, necesaria para especializar los sonidos, juega un rol

clave en la rapidez del proceso productor. f) Los procesos 2 y 3 son objeto del clsico problema de concurrencia del proceso consumidor y productor. El proceso consumidor (3) no puede leer del buffer mientras en proceso productor (2) este escribiendo en el. Como el proceso consumidor esta el 100% del tiempo leyendo del buffer (ya que est continuamente reproduciendo sonido) es necesario utilizar mltiples buffers. En general, es suficiente con dos buffers, tecnica conocida como double buffering. De esta forma el proceso consumidor puede leer de un buffer mientras el proceso productor escribe en el otro. A continuacin se presenta una implementacin para probar factibilidad de posicionamiento en tiempo real de un sonido y sus resultados.

elevacion el step es de 6 y para las 60 es de 10. El algoritmo carga todos los archivos al comienzo para evitar posteriores lecturas a disco al momento de realizar el posicionamiento. Son un total de 368 archivos, ordenados en 14 carpetas, cada una de las cuales contiene las mediciones correspondientes a un mismo ngulo de elevacin. Para espacializar un sonido en un ngulo de elevacin y azimuth dados, primero se redondea la elevacin al mltiplo de 10 ms cercano, esto es: elev = Round(elev/10)*10 A continuacin, se redondea el azimuth al mltiplo de su step ms cercano, el cual como se mencion, es funcin de la elevacin. azim = Round(azim/step(elev))step(elev)

Pruebas y Resultados
Se implemento un algoritmo para espacializar sonidos monofnicos, en un ngulo de elevacin y azimuth dados, en tiempo discreto, es decir mediante un mismo proceso encargado de posicionar y luego reproducir los sonidos. El objetivo es medir el tiempo que el proceso tarda en posicionar un solo sonido versus la duracin del sonido, para una tasa de muestreo determinada. El algoritmo utiliza las mediciones de HRTF del Kemar de MIT. Cada medicion corresponde a un archivo wav stereo con la grabacin de un impulso emitido a 1.4 metros del Kemar, a un ngulo de elevacin y azimuth determinados. El rango del ngulo de elevacin de las mediciones va de los -40 a los 90 , con un step de 10, mientras el rango del ngulo de azimuth va de los 0 a los 180. (Para el rango de -180 a 0 basta con invertir los canales de las muestras anteriores). El step con que varia el ngulo de azimuth depende del ngulo de elevacin. Por ejemplo para las mediciones de 0 de elevacin el step de azimuth es 5, para las de 30 de Finalmente, se convoluciona el sonido monofnico, por los dos canales de la medicin de HRTF correspondiente a (elev, Abs(azim)). Si azim es menor que 0, se deben invertir los canales. La implementacin de la convolucion es de gran relevancia, ya que su tiempo de ejecucin puede variar significativamente dependiendo de la implementacin. En el algoritmo se utilizo una implementacin lenta de convolucion circular en el dominio del tiempo, la cual se sabe que corre en tiempo nm. (Donde n y m son los largos de los arreglos) Sin embargo hay implementaciones en el dominio de la frecuencia utilizando la Transformada Rpida de Fourier FFT que corren en tiempo nlog(n). (n>m) Se prob el algoritmo con 2 archivos muestreados a 44.100 Hz, con duraciones de 1 y 2 segundos. Para el archivo de 1 segundo, el algoritmo tarda alrededor de 0.8 segundos en posicionarlo, mientras que para el de 2 segundos tarda alrededor de 1.5 segundos, lo cual nos indica que s seria posible especializar al menos un sonido en tiempo real con esta implementacin.

El algoritmo fue implementado en C# y se prob en un computador con un procesador Athlon XP de 2 Ghz.

Conclusiones y Trabajo Futuro


La espacializacin de sonidos en tiempo real es un proceso necesario para lograr sistemas de sonido 3D dinmicos, que permitan cambiar la posicin de las fuentes virtuales con respecto al auditor, en tiempo de reproduccin. Una implementacin de un algoritmo de espacializacion de sonidos en tiempo real, requiere trabajo de tres procesos concurrentes: Un proceso encargado de actualizar las posiciones de las fuentes virtuales con respecto al auditor. Un proceso encargado de especializar ventanas de tiempo de los sonidos y dejarlas en un buffer. Un proceso encargado de leer el sonido especializado del buffer y reproducirlo. La interaccin de los ltimos dos procesos resulta en el clsico problema concurrente de consumidor-productor que trabajan con memoria compartida. Este problema puede ser resuelto trabajando con un buffer doble. Un restriccin con respecto a estos dos procesos, es que el segundo proceso debe ser ms rpido en especializar sonidos que el tercero en reproducirlos, para lograr una reproduccin continua. Se implement un algoritmo para especializar sonidos monofnicos en tiempo discreto, es decir con un solo proceso encargado de posicionar y luego reproducir los sonidos. Para posicionar los sonidos se utilizo las mediciones de HRTF del Kemar de MIT, y se utiliz una convolucion circular implementada en el dominio del tiempo. Se prob el algoritmo con 2 sonidos con una tasa de muestreo de 44.100 Hz, con duraciones de 1 y 2 segundos. El algoritmo tard 0.8 y 1.5 segundos respectivamente en posicionarlos. Los resultados obtenidos indican que si es posible especializar al menos un sonido

en tiempo real con esta implementacin, ya que el tiempo de espacializacin obtenido es menor al tiempo de reproduccin. Adems puede considerarse la implementacin utilizada como muy poco optimizada, ya que esta se puede mejorarse de varias maneras: Utilizando una implementacin de la convolucin en el dominio de la frecuencia en vez del tiempo, utilizando FFT, y precomputando las transformadas de las HRTFs. Utilizando sonidos y HRTFs con tasas de muestreo inferiores a los 44.100 Hz utilizados. Implementando el algoritmo en un lenguaje de mejor rendimiento que C#, como C++ En el futuro se planea probar el algoritmo con una implementacin de la convolucion basada en FFT, as como con sonidos y HRTFs a tasas de muestreo inferiores, para medir mejoras en el rendimiento, y posteriormente desarrollar un algoritmo multi-hebra para especializar sonidos en tiempo real.