Desarrollo de un algoritmo de procesamiento de audio ...
Transcript of Desarrollo de un algoritmo de procesamiento de audio ...
Desarrollo de un algoritmo de procesamiento de audio espacial para la generación de
videojuegos en entorno Unity.
Daniel Montoya Restrepo (Q.E.P.D)
Elizabeth Cardona Muriel, [email protected]
Cristian Martínez Pino, [email protected]
Trabajo de Grado presentado para optar al título de Ingeniero de Sonido
Asesor: Diego Mauricio Murillo Gómez, Doctor (PhD) in Sound and Vibration.
Universidad de San Buenaventura
Facultad de Ingenierías (Medellín)
Ingeniería de Sonido
Medellín, Colombia
2021
Citar/How to cite [1]
Referencia/Reference
Estilo/Style: IEEE (2014)
[1] D. Montoya Restrepo, E. Cardona Muriel, y C. Martínez Pino, “Desarrollo de un
algoritmo de procesamiento de audio espacial para la generación de
videojuegos en entorno Unity.”, Trabajo de grado Ingeniería de Sonido,
Universidad de San Buenaventura, Facultad de Ingenierías, Medellín, 2021.
Bibliotecas Universidad de San Buenaventura
• Biblioteca Fray Alberto Montealegre OFM - Bogotá.
• Biblioteca Fray Arturo Calle Restrepo OFM - Medellín, Bello, Armenia, Ibagué.
• Departamento de Biblioteca - Cali.
• Biblioteca Central Fray Antonio de Marchena – Cartagena.
Universidad de San Buenaventura Colombia
Universidad de San Buenaventura Colombia - http://www.usb.edu.co/
Bogotá - http://www.usbbog.edu.co
Medellín - http://www.usbmed.edu.co
Cali - http://www.usbcali.edu.co
Cartagena - http://www.usbctg.edu.co
Editorial Bonaventuriana - http://www.editorialbonaventuriana.usb.edu.co/
Revistas - http://revistas.usb.edu.co/
Biblioteca Digital (Repositorio) http://bibliotecadigital.usb.edu.co
Dedicatoria
Inicialmente deseo dedicarle este trabajo a todas las personas que siempre creyeron en mi capacidad, capacidad que
tenemos todos, es agradable saber la fuerza, determinación y capacidad de resolver problemas cuando queremos
alcanzar un objetivo. A mis padres, Graciela Pino y Luis Eduardo Martínez, todos los días agradezco que este al lado
de ustedes, mi mayor fortuna son todos los valores que me enseñaron. A mi hermana Laura, gracias por estar siempre
al lado. A "el Dext", Daniel Montoya, gracias seguir enseñándome tantas cosas.
Cristian Martínez Pino
Todo el esfuerzo, el aprendizaje y el crecimiento que he tenido durante todo este tiempo en la universidad y en la
realización de este proyecto se lo quiero dedicar especialmente a mi familia, amigos y a todas las personas que están
y han estado conmigo, compartiendo, en clases, en trabajos, en charlas. . . A Daniel Montoya. . . es muy loco haber
comenzado este proyecto con él y sentir que todo iba a estar bien, repentinamente no tenerlo. . . Gracias Dani por los
cafés, por el tiempo y por ser la gran persona que serás siempre.
Elizabeth Cardona Muriel
Agradecimientos
¡A nuestras familias siempre agradecimientos!, a nuestros compañeros con los que se ha sufrido y
disfrutado todo este tiempo, al “profe” Diego, muchas gracias por el excelente acompañamiento y
asesoría durante todo el desarrollo del proyecto, por la buena energía, las buenas ideas y la
disposición siempre de ayudar. A Luis, David y todos los muchachos en Dreamhouse que con su
conocimiento, acertadas ideas y buena energía nos permitieron incursionar en el campo de la
realidad virtual y los videojuegos.
TABLA DE CONTENIDO
RESUMEN ..................................................................................................................................... 10
ABSTRACT ................................................................................................................................... 11
I. INTRODUCCIÓN ...................................................................................................................... 12
II. PLANTEAMIENTO DEL PROBLEMA .................................................................................. 13
A. Antecedentes ......................................................................................................................... 13
III. JUSTIFICACIÓN ..................................................................................................................... 17
IV. OBJETIVOS ............................................................................................................................ 18
A. Objetivo general .................................................................................................................... 18
B. Objetivos específicos ............................................................................................................. 18
V. MARCO TEÓRICO .................................................................................................................. 19
A. Modelado Acústico de recintos ............................................................................................. 19
B. Transformada de Fourier y Convolución en tiempo-real ...................................................... 21
1) Transformada de Fourier ................................................................................................... 21
2) Convolución en tiempo-real ............................................................................................... 23
C. Sistema Ambisonics, armónicos esféricos y codificación en B-format ................................ 24
1) Ambisonics ......................................................................................................................... 24
2) Armónicos esféricos ........................................................................................................... 25
3) Codificación B-Format ....................................................................................................... 27
4) Decodificación .................................................................................................................... 28
5) Decodificación por matriz Pseudoinversa .......................................................................... 29
D. Rotación del campo sonoro con armónicos esféricos ........................................................... 29
E. Audio 3D y reproducción ...................................................................................................... 30
1) Audio 3D ............................................................................................................................ 30
2) Funcionamiento del Audio 3D ........................................................................................... 31
3) Audio binaural .................................................................................................................... 32
F. Auralización interactiva ......................................................................................................... 32
VI. DESARROLLO ....................................................................................................................... 33
A. Diagrama de flujo de señal .................................................................................................... 33
B. Simulación acústica del recinto y obtención de respuestas al impulso en B-Format ............ 33
C. Diseño de escena virtual y preparación del entorno de comunicación Unity-LibPd ............. 36
1) Modelado 3D ...................................................................................................................... 36
2) LibPd para Windows de 64-bits embebido en Unity .......................................................... 37
D) Desarrollo del algoritmo basado en teoría de armónicos esféricos ....................................... 38
1) Rotación del campo sonoro ................................................................................................ 38
2) Reproducción del campo sonoro con armónicos esféricos ................................................. 38
3) Reproducción binaural ........................................................................................................ 39
E. Implementación en Unity....................................................................................................... 39
F. Prueba d aceptación de usuario .............................................................................................. 41
1) Resumen ............................................................................................................................. 41
2) Ejecución de pruebas .......................................................................................................... 42
3) Resultados de la prueba de aceptación ............................................................................... 42
VII. CONCLUSIONES .................................................................................................................. 43
REFERENCIAS ............................................................................................................................. 44
ANEXOS ........................................................................................................................................ 47
LISTA DE TABLAS
TABLA I. MATRIZ DE ROTACIÓN EN EL EJE Z .................................................................... 30
LISTA DE FIGURAS
Fig. 1. Armónicos esféricos para codificación de primer orden .................................................... 28
Fig. 2. Diagrama de flujo - metodología de trabajo ....................................................................... 33
Fig. 3. Posición fuente receptor para comprobación de codificación B-Format ............................ 34
Fig. 4. Respuesta al impulso sintetizada y codificada en B-Format .............................................. 34
Fig. 5. Distribución de receptores en la sala simulada (IRs) .......................................................... 35
Fig. 6. Niveles de presión distribuidos en recinto por octavas de frecuencia ................................ 36
Fig. 7. Modelo gráfico en Sketchup ................................................................................................ 36
Fig. 8. Modelo del recinto dentro del motor de videojuegos ......................................................... 37
Fig. 9. Vista de inspector donde Audio Source y C# script estan instanciados ............................. 40
Fig. 10. Prefabricado de la respuesta al impulso (IR) .................................................................... 40
Fig. 11. Vista superior (sin techo) del modelo gráfico en Unity .................................................... 41
LISTA DE ABREVIACIONES
HRTF Head-Related Transfer Function
RIR Room Impulse Response
DFT Discrete Fourier Transform
IDFT Inverse Discrete Fourier Transform
IR Impulse Response
VR Virtual Reality
CPU Central Processing Unit
FEM Métodos de Elementos Finitos
SDK Software Design Kit
DWG Digital Wave Guide
DWN Digital Wave Network
LTI Linear Time Invariant
SOFA Spatially Oriented Format of Acoustics
DESARROLLO DE UN ALGORITMO DE PROCESAMIENTO DE AUDIO ESPACIAL… 10
RESUMEN
El término audio 3D describe un sistema en el que múltiples sonidos pueden situarse alrededor de
un oyente incluso encima o por debajo de él. Con el desarrollo actual de los videojuegos y el auge
computacional, la inclusión de audio espacial ya es posible. El sonido 3D es el componente que
ayuda a capturar al jugador. La elaboración de videojuegos con audio espacial proporciona un
mejoramiento de la experiencia general del jugador, aumentado su atractivo, acercándolo a una
experiencia realista.
Las simulaciones virtuales de recintos para la obtención del campo sonoro basados en acústica
geométrica permiten una implementación en tiempo-real. Las auralizaciones proporcionan una
interactividad en los recintos que favorece la recreación y sonorización de escenas en videojuegos.
En consecuencia, se propone el desarrollo de un algoritmo que procese audio en tiempo-real dentro
del motor de videojuegos Unity, sin necesidad de utilizar entornos de desarrollo y procesamiento
de audio externos. Esto posibilita recrear la sensación de espacialidad del recinto en el que se
construya la escena virtual.
El algoritmo consiste en el procesamiento de respuestas al impulso en B-format que son
convolucionados en tiempo-real con una señal monofónica correspondiente a la fuente que se desee
espacializar. Posteriormente se realiza la decodificación del B-format y se realiza una convolución
con HRTF’s para obtener una escucha binaural. Esto propicia su uso en procesos de diseño de
videojuegos con audio 3D.
El desarrollo del algoritmo se realizó en el lenguaje de programación gráfico Pure Data. El
algoritmo se integró al motor de videojuegos Unity utilizando la biblioteca de síntesis de audio
embebible de Pure Data (LibPd).
El resultado de la investigación corresponde a una implementación del algoritmo en una escena
virtual, permitiendo la escucha del campo sonoro en el recinto.
Palabras clave: Audio 3D, B-format, procesamiento en tiempo-real, auralizaciones, videojuegos.
DESARROLLO DE UN ALGORITMO DE PROCESAMIENTO DE AUDIO ESPACIAL… 11
ABSTRACT
The term 3D audio describes a system in which multiple sounds can be placed around a listener
even above or below it. With the current development of videogames and the computational boom,
the inclusion of spatial audio is already possible. 3D sound is the component that helps capture the
player. The elaboration of videogames with spatial audio provides an improvement of the general
experience of the player, increasing his attractiveness, bringing him closer to a realistic experience.
The virtual simulations of enclosures to obtain the sound field based on geometric acoustics allow
a real-time implementation. The auralizations provide interactivity in the rooms that favor the
recreation and sounding of scenes in video games.
Consequently, the development of an algorithm that processes audio in real time within the Unity
video game engine is proposed, without the need to use external audio processing and development
environments, allowing to recreate the sensation of spatiality of the enclosure in which the virtual
scene.
The algorithm consists in the processing of impulse responses in B-format that are convolved in
real time with a monophonic signal corresponding to the source to be spatialized. Subsequently,
the decoding of the B-format is performed and a convolution with HRTF is performed to obtain a
binaural listening. This encourages its use in videogame design processes with 3D audio.
The algorithm was developed in the Pure Data graphic programming language. The algorithm was
integrated into the Unity video game engine using the Pure Data Embedded Audio Synthesis
Library (LibPd).
The result of the investigation corresponds to an implementation of the algorithm in a virtual scene,
allowing the listening of the sound field in the enclosure.
Keywords: 3D audio, B-format, real-time processing, auralizations, videogames.
DESARROLLO DE UN ALGORITMO DE PROCESAMIENTO DE AUDIO ESPACIAL… 12
I. INTRODUCCIÓN
El uso de la tecnología de Realidad Virtual VR ha demostrado ofrecer beneficios potenciales en
una amplia variedad de aplicaciones, tales como formación virtual, paseos arquitectónicos,
teleconferencias, ingeniería, construcción y medicina. Sin embargo, muchos de los sistemas VR
que se utilizan actualmente en la industria se centran en la representación visual de la información
[1]. Mediante la incorporación de otros tipos de estímulos sensoriales como el audio en un entorno
virtual, la fidelidad de la simulación se podría plantear considerablemente [2].
El audio en videojuegos es una parte fundamental para la forma en que éstos se experimentan.
Desde la creación de las primeras consolas de juego las características del audio han venido
cambiando consecuentemente con la evolución de la tecnología y el avance computacional. Esto
ha ido permitiendo incorporar mayor variedad de sonidos y técnicas de procesamiento con una
mayor calidad. Actualmente se vive la era de la realidad aumentada. Las personas desean vivir
experiencias mucho más inmersivos y esto trae consigo un reto para los programadores y creadores
de juegos. Estos tienen la tarea de crear un ambiente adecuado para que los jugadores pasen horas
sin aburrirse y queden capturados en la experiencia. Aquí el audio toma una gran importancia. El
audio 3D o espacial es una parte fundamental para crear experiencias realistas que capturan la
atención del jugador utilizando métodos que permiten simular la forma en que percibimos el sonido
en la realidad.
Este trabajo aborda el tema de desarrollo de un algoritmo de procesamiento de audio espacial para
la generación de escenas virtuales o videojuegos, permitiendo la espacialización de una fuente
sonora en un recinto. En la primera sección se encontrará el planteamiento del problema seguido
de una revisión de literatura y marco teórico. Posteriormente se presenta el desarrollo del trabajo,
implementación y validación del método.
DESARROLLO DE UN ALGORITMO DE PROCESAMIENTO DE AUDIO ESPACIAL… 13
II. PLANTEAMIENTO DEL PROBLEMA
La inmersión se considera como requisito primordial en cualquier desarrollo audiovisual. Ésta
permite lograr consumo óptimo por parte del usuario de cualquier proyecto multimedia. El audio
es parte fundamental para lograr la inmersión del jugador. Se busca con éste generar espacios que
soporten, aumenten y creen realidades específicas. Con este fin se han utilizado diferentes
mecanismos de captura, tratamiento y reproducción para audio.
Actualmente existen plugins de audio 3D que agregan direccionalidad a las fuentes sonoras con
señales convolucionados con HRTF’s (Head related transfer function) [3]. Para proporcionar los
efectos de salas incluyen modelos simplificados que permite cambiar parámetros básicos como
tamaño de la sala, absorción y tipo de reflexiones [4]. El sonido obtenido es poco natural pero el
procesamiento es liviano computacionalmente.
El uso de B-Format permite generar entornos interactivos mediante la manipulación de respuestas
al impulso. Por lo que se genera la siguiente pregunta: ¿Es posible generar un entorno de desarrollo
en Unity que permita la espacialización de una fuente sonora basado en respuestas al impulso B-
Format que proporcione una herramienta de diseño sonoro para el desarrollo de videojuegos?
A. Antecedentes
La inclusión de audio 3D es uno de los objetivos actuales de la industria de videojuegos debido al
realismo que añade junto con gráficos robustos a la experiencia de realidad virtual. Existen
diferentes plugins y complementos de espacialización de audio compatibles con motores de juego
como Unity. Las extensiones utilizan diferentes métodos para la espacialización ya sea desde el
tratamiento de archivos con contenido 3D como B-Format o binaurales o simplemente agregando
propiedades físicas a archivos monofónicos.
El Audio Spatializer SDK [3] es una extensión del plugin nativo de audio SDK de Unity. Permite
cambiar la forma en que la fuente transmite sonido al espacio. El paneo de fuentes puede ser una
forma simple de espacialización. El control de la ganancia de las señales en el oído izquierdo y
derecho se basa en la distancia y el ángulo entre la fuente y el receptor. El filtrado HRTF se basa
en el conjunto de datos KEMAR, que es un conjunto de grabaciones de respuesta de impulso por
oído realizadas en una cabeza simulada por Bill Gardner en MIT Media Lab. Estas respuestas de
DESARROLLO DE UN ALGORITMO DE PROCESAMIENTO DE AUDIO ESPACIAL… 14
impulso se convolucionan con la señal de entrada usando convolución rápida a través de la
Transformada Rápida de Fourier FFT. Los metadatos de posición sólo se usan para seleccionar los
conjuntos de respuestas de impulso correctos, ya que el conjunto de datos consiste en respuestas
de impulso distribuidas circularmente para ángulos de elevación que varían de -40 bajo a 90 grados
sobre la cabeza [3].
El HoloLens y su extensión para sonido Holograms 220 [5] es otro paquete de desarrollo
compatible con motores de videojuegos. Creado por Microsoft e incorporado a las versiones de
Unity 2017. Este plugin añade propiedades espaciales a objetos/fuentes como el tamaño y modelo
de la sala a partir de una base de datos de tipos de recintos. La direccionalidad se agrega
extendiendo la función de HRTF de componente de audio espacializado nativo de Unity.
Holograms 220 fue lanzado con el fin de dar mayor realidad a hologramas vistos con el HoloLens,
gafas de realidad virtual y aumentada [6].
La empresa Oculus y su división de audio han desarrollado el Oculus Native Spatializer. Este
plugin es una extensión compatible con versiones 5.2+ de Unity. Permite que las fuentes de sonido
monofónicas sean espacializadas en 3D con relación a la ubicación de la cabeza del avatar. Esto se
logra haciendo una convolución en el dominio del tiempo de la señal de audio con la HTRF
apropiada según sea la ubicación de la cabeza. Las propiedades de las salas se obtienen usando un
modelo simplificado llamado “caja de zapatos”. El cual consiste en un cuarto virtual centrado
alrededor de la cabeza del usuario con distancias y coeficientes de absorción variables para sus
paredes. Además soporta archivo de audio B-fortmat y AmbiX [4].
Vvaudio es una empresa que provee desde 2001 herramientas para el tratamiento de señales de
audio con contenido espacial. En 2015 sale VVEncode [7], un codificador-decodificador de audio
en formatos AmbiX, B-format y binaural. El motor del juego puede combinar estas señales con sus
otras formas nativas de renderizado de audio, retrasando la decodificación hasta el tiempo de
ejecución. Permite también la decodificación de la mezcla en el juego para sistemas de
reproducción binaural, surround o de audio 3D ya sean parlantes o audífonos.
La compañía VisiSonics Corporation y su división en sonido spacial RealSpace 3D Audio crearon
un complemento para las versiones 5.2+ de Unity. Permite a los diseñadores de videojuegos VR
crear audio inmersivo que realza sus ofertas visuales 3D, al tiempo que es lo suficientemente
eficiente como para trabajar con necesidades mínimas de CPU [8]. Las propiedades de dirección
DESARROLLO DE UN ALGORITMO DE PROCESAMIENTO DE AUDIO ESPACIAL… 15
se agregan añadiendo las características de dispersión dadas por la cabeza (HRTF) y de espacialidad
usando modelos simples de cuartos modificables por el desarrollador.
El 6 de junio de 2017, la empresa Tazman-Audio lanza la última versión de Fabric v2.3. Una
extensión soportada por las versiones 4.6+, 5.4+, 5.5+ y 5.6+ de Unity. Extiende la funcionalidad
de audio del motor y permite la creación de complejos y ricos comportamientos de las fuentes
sonoras [9]. Las propiedades 3D afectan cómo el oyente escucha el audio según sea la posición y
dirección de la cabeza respecto a la fuente.
Las aplicaciones del audio 3D no solo están en el desarrollo de videojuegos. Se ha aplicado también
en diversas escenas en donde es indispensable la localización de fuentes por medio del sonido, o
en la percepción de espacialidad dentro de un recinto. Como ejemplos se tienen los complejos
simuladores de entrenamiento aéreo, aplicaciones para la simulación de diseños arquitectónicos o
teleconferencias.
En el estudio titulado "Virtual Environment Interaction through 3D Audio by Blind Children"
publicado en 2009, se aplica el concepto de hiperhistorias (historias interactivas) a niños ciegos
[10]. Estas hiperhistorias están sumergidas en un mundo acústico-virtual 3D. Como resultado se
diseñó y probó la aplicación AudioBoom, un ambiente virtual interactuado a través de audio 3D
por niños ciegos. Estos fueron expuestos a experiencias en primera persona explorando mundos
interactivos con el uso de representaciones 3D-aurales del espacio. Esta experiencia fue
estructurada con tareas cognitivas donde los participantes generaban modelos concretos de su
propia representación construida con la interacción en el juego usando bloques de lego. La
interacción se logra partiendo de eventos programados en vóxeles (unidad cúbica que compone un
objeto tridimensional). En el diseño del juego un voxel podría representar un evento sonoro
especifico o nada. El mundo acústico-virtual 3D se logró con técnicas de especialización de las
fuentes. Se otorgaba propiedades de direccionalidad usando HRTF y de espacialidad con modelos
de habitaciones simples a un grupo de voxeles con eventos (sonoros) programados.
Partiendo de los objetivos de audio interactivo 3D y una reconstrucción fiel del campo sonoro, se
publica en 2017 el artículo titulado "Low Frequency Interactive Auralization Based on a Plane
Wave Expansion" [11]. Este documento se centra en el problema de auralizaciones interactivas con
superposición de ondas planas en recintos cerrados. Para esto, se simuló acústicamente un cuarto
usando el método de elementos finitos (FEM). A partir de la solución FEM, se crea un arreglo de
micrófonos y se implementa un método inverso para estimar las amplitudes complejas de las ondas
DESARROLLO DE UN ALGORITMO DE PROCESAMIENTO DE AUDIO ESPACIAL… 16
planas. La ventaja del método es la posibilidad que ofrece de implementar varias técnicas de
reproducción de sonido para aplicaciones de auralización. Características tales como la traslación
y rotación del campo acústico lo hacen conveniente para representaciones acústicas interactivas.
En otros proyectos como "Assessing Virtual Teleconferencing Rooms" se presenta un estudio sobre
cómo diseñar entornos acústicos virtuales utilizados en teleconferencias de audio 3D. Se busca
maximizar el rendimiento de localización, facilidad y calificaciones subjetivas de la calidad del
habla en aplicaciones de realidad virtual. El beneficio de la inclusión del audio 3D no solo se refleja
en la naturalidad de la experiencia sino también en el mejoramiento sustancial en la inteligibilidad
de la palabra [12].
Como se describió anteriormente existen diferentes algoritmos que permiten implementar audio
espacial en Unity. Sin embargo, muchos de ellos son paquetes cerrados ya que han sido
desarrollados por compañías externas. El presente proyecto busca generar un desarrollo propio, el
cual permita espacializar sonidos. Esto es acorde con el área de ingeniería de sonido en la cual hay
una gran proyección hacia el trabajo de audio espacial.
DESARROLLO DE UN ALGORITMO DE PROCESAMIENTO DE AUDIO ESPACIAL… 17
III. JUSTIFICACIÓN
"El hecho de que el sonido en el mundo real se oye espacialmente es el impulso inicial para incluir
este aspecto dentro de un escenario de simulación" [13].
La importancia de las experiencias de audio en la realidad virtual (VR) ha sido reconocida y
discutida en los últimos tiempos. Las herramientas para la producción y las plataformas para la
distribución del contenido de VR con audio espacial están siendo ampliamente disponibles. El audio
espacial ahora se puede integrar en aplicaciones VR usando kits de desarrollo de software (SDK) o
plugins para motores de juegos comunes y sistemas de middleware de audio. Muchas de estas
herramientas se proporcionan de forma gratuita para alentar a los creadores de contenido a integrar
audio espacial en la experiencia VR [14].
Estudios desarrollados han demostrado la importancia de la adición del sonido en espacios virtuales
y de sonido espacial como generador de mayor inmersión mejorando el grado de presencia y la
localización de fuentes sonoras. En la Universidad Tecnológica Chalmers en Suecia, el proyecto
"Better Presence and Performance in Virtual Environments by Improved Binaural Sound
Rendering" muestra varios estudios realizados a grupos de personas con la incorporación de audio
binaural. Los resultados indican que la información auditiva de alta calidad puede mejorar en gran
medida el rendimiento general de espacios virtuales y en algunos casos mejorar el rendimiento para
el cumplimiento de tareas [15]. El desarrollo tecnológico está enfocado hacia ambientes virtuales.
Con este trabajo se busca el desarrollo de un algoritmo que sea aplicado a videojuegos. Se plantea
generar un entorno de desarrollo en Unity que permita la incorporación y el procesamiento de audio
3D. El diseño sonoro se basa en la combinación de respuestas al impulso en B-Format y el uso de
HRTFs. Esto con el fin de aportar un sonido de mayor naturalidad y espacialidad sin el uso de una
gran carga computacional. Su utilidad también puede llevarse hacia el desarrollo de otro tipo de
escenas de realidad virtual.
DESARROLLO DE UN ALGORITMO DE PROCESAMIENTO DE AUDIO ESPACIAL… 18
IV. OBJETIVOS
A. Objetivo general
Desarrollar un algoritmo de procesamiento de audio espacial para el diseño de videojuegos (escena
virtual) en entorno Unity.
B. Objetivos específicos
Se describen algunos ejemplos de verbos comunes que se utilizan en el planteamiento de objetivos,
los cuales cambiarán dependiendo de su investigación.
• Diseñar metodológicamente el entorno del videojuego en la plataforma de desarrollo Unity.
• Desarrollar un algoritmo para espacializar las fuentes sonoras utilizando el lenguaje de
programación Pure Data (LibPd).
• Implementar y validar el algoritmo anterior para el diseño sonoro del videojuego.
DESARROLLO DE UN ALGORITMO DE PROCESAMIENTO DE AUDIO ESPACIAL… 19
V. MARCO TEÓRICO
A continuación, se presenta una breve revisión teórica de los conceptos necesarios que están
involucrados en todo el proceso para la obtención de una auralización. Desde el modelado acústico
de recintos y su relación con el procesamiento de audio en tiempo-real hasta la codificación y
decodificación del campo sonoro con armónicos esféricos. Se incluyen también conceptos básicos
y teoría de procesamiento digital de señales necesaria para la comprensión del trabajo.
Notación matemática
El presente trabajo utiliza letras en negrilla como notación para vectores (e.g. “ 𝒳𝒳 “). Las señales
en el dominio del tiempo y otras variables de tipo escalar se presentan con letras minúsculas (e.g.
“𝑓𝑓(𝑡𝑡)”, “𝑥𝑥”) y las señales en el dominio de la frecuencia se denotan con letras mayúsculas (e.g.
“𝐹𝐹(𝜔𝜔)”). La notación de distintas funciones, entidades físicas y símbolos matemáticos utilizados a
lo largo del trabajo pueden ser consultadas en la Tabla de símbolos.
A. Modelado Acústico de recintos
En primera instancia la respuesta al impulso proporciona información del comportamiento acústico
para una ubicación específica de fuente y receptor en un recinto. Permite evaluar parámetros como
la reverberación a partir de una curva de decaimiento de energía [16].
El modelado acústico virtual de recintos juega un papel importante en la fase de diseño de muchos
espacios. Los algoritmos acústicos geométricos y los basados en ondas son apropiados para la
auralizaciones de recintos. Poseen un gran potencial para ser utilizados en entornos virtuales
interactivos con reproducción de sonido en tiempo-real. Sus posibles aplicaciones van desde ayudar
al diseño acústico arquitectónico hasta el mejoramiento del audio de videojuegos [17].
Las técnicas para la simulación virtual de espacios acústicos se pueden dividir en varias categorías
principales: métodos geométricos (método de fuente de imágenes y métodos basados en rayos),
métodos basados en elementos o mallas (método de elementos finitos, método de elementos
fronterizos, mallas de guía de ondas digitales (DWG) y redes (DWN), mallas de diferencias finitas),
así como métodos estadísticos y algoritmos de reverberación para la reverberación tardía.
DESARROLLO DE UN ALGORITMO DE PROCESAMIENTO DE AUDIO ESPACIAL… 20
La idea original de las guías digitales de ondas (DWG) y las redes digitales de guía de ondas
(DWN) era simular la reverberación de la habitación [18].
Las simulaciones acústicas de recintos que utilizan modelos basados en ondas ofrecen varias
ventajas sobre las basadas en enfoques acústicos geométricos. Estas presentan mayor precisión en
la simulación en frecuencias bajas y en efectos de propagación de ondas como la difracción y la
oclusión. Sin embargo, las simulaciones con enfoques geométricos pueden adaptarse mejor para la
implementación en tiempo-real y, por lo tanto, son más apropiados para aplicaciones que requieren
interactividad en tiempo-real. Entre estas están la auralización interactiva o rendering de escenas
de audio para videojuegos [19].
Las principales desventajas de los modelos basados en ondas son los excesivos tiempos de
computación y los requisitos de memoria si se requieren simulaciones para un ancho de banda
completo en frecuencia.
El modelado acústico de recintos basado en ondas generalmente se considera como un proceso
offline, donde el objetivo es obtener la respuesta al impulso de la sala fuente /receptor (RIR) que
puede implementarse en tiempo-real para cualquier señal de audio de entrada por convolución. La
consecuencia de este proceso es que una RIR estática trae limitaciones significativas para que la
auralización sea dinámica e interactiva. Las simulaciones acústicas virtuales de recintos tienen un
alto potencial en áreas como el audio para videojuegos y aplicaciones de realidad virtual, pero la
auralización dinámica e interactiva en tiempo-real es una necesidad para resultados efectivos,
inmersivos y realistas, y esto ofrece una limitación en los modelos basados en ondas [19].
Con los modelos acústicos basados en métodos geométricos, se acepta generalmente que existen
limitaciones en cuanto a lo que se puede lograr en términos de precisión, aunque las RIR producidas
pueden dar una buena representación perceptual de una combinación fuente / receptor / recinto. Sin
embargo, la auralización dinámica e interactiva en tiempo-real aún no es posible sin imponer
limitaciones o suposiciones adicionales sobre el algoritmo básico [19].
La acústica geométrica, es la categoría de los métodos utilizados en la acústica para describir el
sonido como un fenómeno de rayos [20]. Los métodos de modelado geométrico suelen basarse en
el supuesto de que la longitud de onda del sonido modelado es pequeña en comparación con la
DESARROLLO DE UN ALGORITMO DE PROCESAMIENTO DE AUDIO ESPACIAL… 21
geometría del espacio. Como tal, el sonido se propaga principalmente en líneas rectas y la
determinación de trayectorias de reflexión resulta en pruebas de visibilidad [17].
El Ray tracing se utiliza como una técnica para generar una respuesta de impulso mediante el
seguimiento de la trayectoria de un rayo de sonido en un entorno tridimensional [21]. Los rayos se
emiten desde la fuente de sonido en muchas direcciones. Si un rayo golpea el receptor, se registra
un golpe o impulso. Si golpea un objeto, el rayo se refleja y el resto de su trayectoria se puede
rastrear recursivamente hasta un orden arbitrario [17].
Una de las desventajas de las técnicas de trazado de rayos son que el número discreto de rayos
rastreados y la forma arbitraria de las habitaciones pueden conducir a una pérdida significativa de
caminos de rayos o caminos contados varias veces [21]. La aritmética vectorial en la que se basan
los métodos de modelado geométrico no puede aplicarse al modelado de baja frecuencia, ya que la
longitud de onda del sonido modelado se compara con la geometría de la escena. En este caso, los
métodos basados en ondas son más precisos, ya que resuelven numéricamente la ecuación de onda
de una manera más rigurosa [17].
B. Transformada de Fourier y Convolución en tiempo-real
Para comprender el proceso de obtención de una auralización es de gran importancia conocer la
convolución. La transformada y la transformada inversa de Fourier son herramientas claves para
convolucionar dos señales. A continuación, se presentan las definiciones de estas dos operaciones.
1) Transformada de Fourier
En el ámbito del análisis de señales y de sistemas lineales invariantes en el tiempo (LTI), es de gran
importancia y utilidad la transformada de Fourier. Esta es una herramienta basada en la serie
matemática de Fourier, la cual permite describir una función periódica como una descomposición
de diversas ondas sinusoidales de diferente frecuencia y amplitud [22]. La transformada de Fourier
para funciones continuas en el tiempo se define como [23]:
𝑭𝑭(𝝎𝝎) = ∫ 𝒇𝒇(𝒕𝒕)𝒆𝒆−𝒋𝒋𝝎𝝎𝒕𝒕𝒅𝒅𝒕𝒕∞−∞ , (5.1)
DESARROLLO DE UN ALGORITMO DE PROCESAMIENTO DE AUDIO ESPACIAL… 22
donde F(ω) es la función expresada en el dominio de la frecuencia (ω), f(t) corresponde a la función
en el dominio del tiempo. La constante e es la constante Euler, y la constante j es el operador
imaginario definido como 𝑗𝑗 = √−1.
La transformada inversa de Fourier permite expresar una función en el dominio del tiempo a partir
de su definición en el dominio de la frecuencia. La ecuación (5.2) es la definición matemática de
la transformada inversa de Fourier para funciones continuas [23].
𝒇𝒇(𝒕𝒕) =𝟏𝟏𝟐𝟐𝟐𝟐
� 𝒇𝒇(𝝎𝝎)𝒆𝒆𝒋𝒋𝝎𝝎𝒕𝒕𝒅𝒅𝝎𝝎,∞
−∞
(5.2)
La transformada de Fourier y la transformada inversa de Fourier se denotan comúnmente como
ℱ[ 𝑓𝑓(𝑡𝑡)] ≡ 𝐹𝐹(𝜔𝜔) y ℱ−1[ 𝐹𝐹(𝜔𝜔)] ≡ 𝑓𝑓( 𝑡𝑡) respectivamente [23].
En el caso de la transformada de Fourier para funciones discretas (ecuación (5.3)) [23], una
transformada de tamaño N muestras permite obtener una función definida sobre L = N frecuencias
igualmente distribuidas en un intervalo de 0 a 2𝜋𝜋 [22]. De igual manera, la transformada inversa
de Fourier para funciones definidas a partir de L frecuencias discretas (ecuación (5.4)) [23] permite
expresar la función en el dominio del tiempo con un tamaño de N muestras [22].
𝑿𝑿𝒍𝒍 = �𝒙𝒙𝒏𝒏𝒆𝒆−𝒋𝒋𝟐𝟐𝟐𝟐𝒏𝒏𝒍𝒍/𝑵𝑵,𝑵𝑵−𝟏𝟏
𝒏𝒏=𝟎𝟎
(5.3)
𝒙𝒙𝒏𝒏 =𝟏𝟏𝑳𝑳�𝒙𝒙𝒏𝒏𝒆𝒆−𝒋𝒋𝟐𝟐𝟐𝟐𝒏𝒏𝒍𝒍/𝑵𝑵,𝑳𝑳−𝟏𝟏
𝒏𝒏=𝟎𝟎
(5.4)
En las cuales 𝑋𝑋𝑙𝑙 es la función expresada en términos de frecuencias discretas l y 𝑥𝑥𝑛𝑛 es la función
en el dominio temporal, donde n es la variable temporal discreta. El número de muestras de la
función en tiempo discreto se denota con N, y a su vez, el número de frecuencias de la función en
DESARROLLO DE UN ALGORITMO DE PROCESAMIENTO DE AUDIO ESPACIAL… 23
el dominio de la frecuencia se expresa con L. Finalmente 𝑥𝑥𝑛𝑛 es la función en el dominio temporal
discreto.
La transformada discreta de Fourier y la transformada inversa de Fourier para el caso discreto se
denotan como 𝐷𝐷𝐹𝐹𝐷𝐷[𝑥𝑥(𝑛𝑛)] e 𝐼𝐼𝐷𝐷𝐹𝐹𝐷𝐷[𝑥𝑥(𝑙𝑙)] respectivamente.
2) Convolución en tiempo-real
A partir de la respuesta al impulso, es posible otorgarle a una señal las características que introduce
un sistema, logrando emular la salida del sistema caracterizado ante una señal de entrada. Esto se
realiza utilizando la operación convolución [24]. La convolución particionada es un algoritmo
ampliamente utilizado debido a que se considera más eficiente en términos de recursos
computacionales, especialmente cuando se trabaja con respuestas al impulso con un número de
muestras mucho mayor al del buffer size [25].
El algoritmo generalizado de convolución particionada uniforme, propuesto por F. Wefers et. al
[25] divide la respuesta al impulso ℎ(𝑛𝑛) en s particiones ℎ0(𝑛𝑛),ℎ1(𝑛𝑛), . . . ,ℎ𝑠𝑠1(𝑛𝑛) cada una con un
tamaño M de muestras. Cada partición ℎ𝑖𝑖(𝑛𝑛) es retrasada un número de muestras 𝑖𝑖𝑖𝑖, expresado
en términos del buffer size B, y de un residuo 𝑑𝑑𝑖𝑖 para el caso donde número de muestras M de las
particiones de la FIR no sea múltiplo entero del buffer size. El retraso iM se expresa
matemáticamente como se indica en la ecuación (5.5), considerando las ecuaciones (5.6) y (5.7)
[25].
𝒊𝒊𝒊𝒊 = 𝒃𝒃𝒊𝒊𝑩𝑩 + 𝒅𝒅𝒊𝒊, (5.5)
𝒃𝒃𝒊𝒊 = �𝒊𝒊𝒊𝒊𝑩𝑩�,
(5.6)
𝒅𝒅𝒊𝒊 = 𝒎𝒎𝒎𝒎𝒅𝒅(𝒊𝒊𝒊𝒊,𝑩𝑩), (5.7)
En el cual 𝑏𝑏𝑖𝑖 es el múltiplo de buffer size para cada partición de ℎ𝑖𝑖(𝑛𝑛), los delimitadores ⌊𝑦𝑦⌋ indican
que el número dentro de estos se aproxima al entero inferior, y 𝑚𝑚𝑚𝑚𝑑𝑑(·) es el operador módulo. A
cada partición se le adicionan 𝑑𝑑𝑖𝑖 muestras con ceros a la izquierda (retrasando la señal) y 𝑁𝑁 −𝑖𝑖 −
DESARROLLO DE UN ALGORITMO DE PROCESAMIENTO DE AUDIO ESPACIAL… 24
𝑑𝑑𝑖𝑖 a la derecha, donde N es el tamaño de la transformada. Posteriormente estas particiones son
transformadas al dominio de la frecuencia y almacenadas [25].
Cada buffer size (B muestras) de la señal de entrada se almacena en orden de llegada. Se realiza
una DFT de N muestras, almacenando las transformadas de la señal de entrada en una línea de
retrasos en el dominio de la frecuencia. Se desplaza cada transformada de acuerdo a su orden de
llegada. Se realiza posteriormente una multiplicación entre la partición de la respuesta al impulso
i y su correspondiente espectro de entrada. Los resultados son almacenados en el orden de la línea
de retrasos [25].
Finalmente, se aplica una IDFT (ecuación (5.4)) a la señal almacenada. Se descartan las primeras
muestras por distorsión temporal, retornando B muestras correspondientes al tamaño del buffer size
[25].
C. Sistema Ambisonics, armónicos esféricos y codificación en B-format
En esta sección se presenta la teoría de armónicos esféricos, la cual es la base en la que se
fundamentan los sistemas Ambisonics.
1) Ambisonics
En 1970 un grupo liderado por Gerzon, del Instituto Matemático en Oxford escribió una serie de
artículos que hablaban de un verdadero formato de sonido surround [26]. Ambisonics es un sistema
de sonido multicanal que abarca la codificación y decodificación del campo sonoro 3D hasta un
arreglo de parlantes [27].
Esta descripción del campo sonoro es dada por una matriz que está basada en la teoría de armónicos
esféricos. Las investigaciones hechas con Ambisonics han continuado desde entonces. En tiempos
recientes éstas han sido de interés no solo del dominio musical sino también en otros campos como
videojuegos y producciones audiovisuales en los que el sonido es una parte fundamental.
DESARROLLO DE UN ALGORITMO DE PROCESAMIENTO DE AUDIO ESPACIAL… 25
2) Armónicos esféricos
Los armónicos esféricos hacen parte de la solución de la ecuación de onda cuando se expresa en
coordenadas esféricas. Cualquier función que sea integrable en la esfera unitaria se puede expandir
utilizando armónicos esféricos mediante [23].
𝒇𝒇(𝜽𝜽,𝝓𝝓) = � � 𝑨𝑨𝒏𝒏𝒎𝒎𝒀𝒀𝒏𝒏𝒎𝒎(𝜽𝜽,𝝓𝝓),𝒏𝒏
𝒎𝒎=−𝒏𝒏
∞
𝒏𝒏=𝟎𝟎
(5.8)
Donde 𝜃𝜃 y 𝜑𝜑 son los ángulos de elevación y azimut correspondientemente. Los coeficientes 𝐴𝐴𝑛𝑛𝑛𝑛
pueden ser calculados como:
𝑨𝑨𝒏𝒏𝒎𝒎 = � 𝒀𝒀𝒏𝒏𝒎𝒎(𝜽𝜽,𝝓𝝓) ∗ 𝒇𝒇(𝜽𝜽,𝝓𝝓) 𝒅𝒅𝛀𝛀,𝛀𝛀
(5.9)
Donde 𝑌𝑌𝑛𝑛𝑛𝑛(𝜃𝜃,𝜙𝜙) son los armónicos esféricos y (·) ∗ denota el conjugado complejo.
La ecuación de onda en coordenadas esféricas es dada por:
La solución obtenida por la separación de variables lleva a la siguiente expresión para la presión
[23]:
Donde 𝒋𝒋𝒏𝒏 es la función esférica de Bessel del primer tipo de orden n y 𝑌𝑌𝑛𝑛𝑛𝑛(𝜃𝜃,𝜙𝜙) son los armónicos
esféricos definidos por la siguiente ecuación:
𝟏𝟏𝒓𝒓𝟐𝟐
𝝏𝝏𝝏𝝏𝒓𝒓�𝒓𝒓𝟐𝟐
𝝏𝝏𝝏𝝏𝝏𝝏𝒓𝒓� +
𝟏𝟏𝒓𝒓𝟐𝟐 𝐬𝐬𝐬𝐬𝐬𝐬(𝜽𝜽)
𝝏𝝏𝝏𝝏𝜽𝜽
+ �𝐬𝐬𝐬𝐬𝐬𝐬 𝜽𝜽𝝏𝝏𝝏𝝏𝝏𝝏𝜽𝜽
� +𝟏𝟏
𝒓𝒓𝟐𝟐 𝐬𝐬𝐬𝐬𝐬𝐬(𝜽𝜽)𝝏𝝏𝝏𝝏𝝏𝝏𝝓𝝓𝟐𝟐 −
𝟏𝟏𝒄𝒄𝟐𝟐𝝏𝝏𝟐𝟐𝝏𝝏𝝏𝝏𝒕𝒕𝟐𝟐
= 𝟎𝟎, (5.10)
𝒑𝒑(𝒓𝒓,𝜽𝜽,𝝓𝝓,𝝎𝝎) = � � 𝑨𝑨𝒏𝒏𝒎𝒎(𝝎𝝎)𝒋𝒋𝒏𝒏(𝒌𝒌𝒓𝒓𝒙𝒙)𝒀𝒀𝒏𝒏𝒎𝒎(𝜽𝜽,𝝓𝝓),𝒏𝒏
𝒎𝒎=−𝒏𝒏
∞
𝒏𝒏=𝟎𝟎
(5.11)
DESARROLLO DE UN ALGORITMO DE PROCESAMIENTO DE AUDIO ESPACIAL… 26
Donde 𝝏𝝏𝒏𝒏𝒎𝒎 es la función de Legendre asociada.
La relación entre una onda plana y los armónicos esféricos es dada por la expansión de Jacobi-
Anger.
La relación para una onda esférica está dada por:
Donde 𝑥𝑥𝑠𝑠𝑠𝑠𝑠𝑠 es la posición de la fuente sonora y ℎ𝑛𝑛(2)(𝑘𝑘𝑟𝑟𝑠𝑠𝑠𝑠𝑠𝑠) es la función esférica de Hankel de
segundo orden.
En la aplicación de los armónicos esféricos para la descripción de campos acústicos. Es posible
utilizar el componente real de los armónicos esféricos 𝑌𝑌𝑛𝑛𝑛𝑛, la cual se obtiene a partir de sus
correspondientes armónicos complejos [27]. Esta componente se expresa matemáticamente como:
𝒀𝒀𝒏𝒏𝒎𝒎(𝜽𝜽,𝝓𝝓) = �(𝟐𝟐𝒏𝒏 + 𝟏𝟏)
𝟒𝟒𝟐𝟐(𝒏𝒏 −𝒎𝒎)!(𝒏𝒏 + 𝒎𝒎)!
𝝏𝝏𝒏𝒏𝒎𝒎(𝒄𝒄𝒎𝒎𝒄𝒄𝜽𝜽)𝒆𝒆𝒋𝒋𝒎𝒎𝝓𝝓,
(5.12)
𝒆𝒆𝒋𝒋𝒌𝒌 𝒙𝒙·𝒚𝒚� = 𝟒𝟒𝟐𝟐�𝒋𝒋𝒏𝒏𝒋𝒋𝒏𝒏(𝒌𝒌𝒓𝒓𝒙𝒙) � 𝒀𝒀𝒏𝒏𝒎𝒎(𝜽𝜽𝒙𝒙,𝝓𝝓𝒙𝒙)𝒀𝒀𝒏𝒏𝒎𝒎�𝜽𝜽𝒚𝒚,𝝓𝝓𝒚𝒚� ∗ ,𝒏𝒏
𝒎𝒎=−𝒏𝒏
∞
𝒏𝒏=𝟎𝟎
(5.13)
𝒆𝒆𝒋𝒋𝒌𝒌|𝒙𝒙−𝒙𝒙𝒄𝒄𝒓𝒓𝒄𝒄|
𝟒𝟒𝟐𝟐|𝒙𝒙 − 𝒙𝒙𝒄𝒄𝒓𝒓𝒄𝒄| = −𝒋𝒋𝒌𝒌� � 𝒋𝒋𝒏𝒏(𝒌𝒌𝒓𝒓𝒙𝒙)𝒉𝒉𝒏𝒏(𝟐𝟐)(𝒌𝒌𝒓𝒓𝒄𝒄𝒓𝒓𝒄𝒄)𝒀𝒀𝒏𝒏𝒎𝒎(𝜽𝜽𝒄𝒄𝒓𝒓𝒄𝒄,𝝓𝝓𝒄𝒄𝒓𝒓𝒄𝒄) ∗ ,
𝒏𝒏
𝒎𝒎=−𝒏𝒏
∞
𝒏𝒏=𝟎𝟎
(5.14)
DESARROLLO DE UN ALGORITMO DE PROCESAMIENTO DE AUDIO ESPACIAL… 27
3) Codificación B-Format
Este formato se basa en armónicos esféricos de orden 0 y 1. Es usado para almacenar la información
del campo sonoro 3D. Consiste en cuatro canales de audio W, X, Y, Z; cada uno representa una
grabación del campo sonoro usando un micrófono de presión para el canal W y tres micrófonos de
gradiente de presión ortogonalmente orientados a lo largo de los ejes x,y,z cartesianos para los
canales X,Y,Z respectivamente. Más específicamente, el número y orientación de estos micrófonos
es descrito por la dimensión escogida y de las funciones de armónicos esféricos de orden cero y
primero respectivamente [27]. En un entorno real no es físicamente posible tener múltiples cápsulas
de micrófono ocupando el mismo punto en el espacio. Por lo tanto, se emplean disposiciones
alternativas tales como un conjunto tetraédrico de cápsulas subcardioides cuyas cuatro salidas se
conocen como A Format. Entonces es posible realizar una conversión de A-Format a B-Format
para obtener las señales W, X, Y, Z [19]. La respuesta polar de cada micrófono que es usada para
grabar W, X, Y, Z es definida matemáticamente en las siguientes ecuaciones:
𝚼𝚼𝒏𝒏𝒎𝒎 =
⎩⎪⎨
⎪⎧𝒊𝒊√𝟐𝟐
�𝒀𝒀𝒏𝒏−|𝒎𝒎| − (−𝟏𝟏)𝒎𝒎𝒀𝒀𝒏𝒏
|𝒎𝒎|� 𝒑𝒑𝒑𝒑𝒓𝒓𝒑𝒑 𝒎𝒎 < 𝟎𝟎
𝒀𝒀𝒏𝒏𝒎𝒎 𝒑𝒑𝒑𝒑𝒓𝒓𝒑𝒑 𝒎𝒎 = 𝟎𝟎𝟏𝟏√𝟐𝟐
(𝒀𝒀𝒏𝒏−|𝒎𝒎| + (−𝟏𝟏)𝒎𝒎𝒀𝒀𝒏𝒏
|𝒎𝒎| 𝒑𝒑𝒑𝒑𝒓𝒓𝒑𝒑 𝒎𝒎 > 𝟎𝟎
,
(5.15)
𝑾𝑾 =𝟏𝟏𝑰𝑰�𝒄𝒄𝒊𝒊 �
𝟏𝟏√𝟐𝟐
� ,𝑰𝑰
𝒊𝒊=𝟏𝟏
(5.16)
𝑿𝑿 =𝟏𝟏𝑰𝑰�𝒄𝒄𝒊𝒊[𝐜𝐜𝐜𝐜𝐬𝐬 𝜽𝜽𝒊𝒊 𝐬𝐬𝐬𝐬𝐬𝐬𝝓𝝓𝒊𝒊],𝑰𝑰
𝒊𝒊=𝟏𝟏
(5.17)
𝒀𝒀 =𝟏𝟏𝑰𝑰�𝒄𝒄𝒊𝒊[𝐬𝐬𝐬𝐬𝐬𝐬 𝜽𝜽𝒊𝒊 𝐬𝐬𝐬𝐬𝐬𝐬𝝓𝝓𝒊𝒊],𝑰𝑰
𝒊𝒊=𝟏𝟏
(5.18)
DESARROLLO DE UN ALGORITMO DE PROCESAMIENTO DE AUDIO ESPACIAL… 28
Donde W, X, Y y Z son las señales del sistema Ambisonics de primer orden; 𝝓𝝓𝒊𝒊y 𝜽𝜽𝒊𝒊 son los ángulos
azimutal y elevación para la orientación de cada señal monofónica. [28]. Así se ven los armónicos
esféricos para los diferentes canales Ambisonic (W a Z de izquierda a derecha) [28]:
4) Decodificación
Las señales codificadas por Ambisonic no alimentan a los altavoces por sí mismos. Transportan la
información direccional de todo un campo sonoro. Eso significa que son completamente
independientes del diseño del altavoz elegido para decodificar el campo sonoro. Por lo tanto, un
decodificador Ambisonic siempre está diseñado para un altavoz específico, y un campo sonoro
codificado en B-Format se puede reproducir en cualquier sistema de decodificación Ambisonic
[28]. Para una buena reconstrucción del campo sonoro se tiene que el número de altavoces L deber
ser para el caso tridimensional:
Donde N es el orden utilizado en la expansión.
𝒁𝒁 =𝟏𝟏𝑰𝑰�𝒄𝒄𝒊𝒊[𝐜𝐜𝐜𝐜𝐬𝐬𝝓𝝓𝒊𝒊],𝑰𝑰
𝒊𝒊=𝟏𝟏
(5.19)
𝑳𝑳 ≥ (𝑵𝑵+ 𝟏𝟏)𝟐𝟐 (5.20)
Fig. 1. Armónicos esféricos para codificación de primer orden
DESARROLLO DE UN ALGORITMO DE PROCESAMIENTO DE AUDIO ESPACIAL… 29
5) Decodificación por matriz Pseudoinversa
Una notación de la ecuación de decodificación en forma de matriz puede ser útil. En este caso B es
el vector de columna de los canales 𝐴𝐴𝑚𝑚𝑏𝑏𝑖𝑖𝐴𝐴𝑚𝑚𝑛𝑛𝑖𝑖𝐴𝐴 (𝐵𝐵 = [𝑊𝑊𝑋𝑋𝑌𝑌𝑊𝑊]𝑇𝑇), donde 𝑇𝑇 es la traspuesta, p el
vector de columna de las señales del altavoz, C la matriz de decodificación. Las entradas de C son
los valores de los armónicos esféricos para las posiciones del altavoz, con N filas para los diferentes
armónicos esféricos, y L columnas para los altavoces. Entonces es posible expresar la función de
decodificación como [28]:
Donde 𝑪𝑪−𝟏𝟏 es la inversa si 𝑳𝑳 = (𝑵𝑵 + 𝟏𝟏)𝟐𝟐, y la Moore-Penrose pseudo-inverse si 𝑳𝑳 > (𝑵𝑵 + 𝟏𝟏)𝟐𝟐.
D. Rotación del campo sonoro con armónicos esféricos
Por medio de matrices de rotación simples, es posible rotar un campo sonoro codificado en
Ambisonic alrededor de los tres ejes de un sistema de coordenadas 𝑥𝑥, 𝑦𝑦 y 𝑧𝑧. Esta propiedad del
campo sonoro Ambisonic es utilizado en técnicas binaurales de reproducción de audio 3D [28]. La
Tabla I muestra la matriz de rotación para el eje 𝑊𝑊 para hasta nueve coeficientes de armónicos
esféricos [29].
𝑩𝑩 = 𝑪𝑪𝒑𝒑 (5.21)
𝒑𝒑 = 𝑪𝑪−𝟏𝟏 ∗ 𝑩𝑩 (5.22)
DESARROLLO DE UN ALGORITMO DE PROCESAMIENTO DE AUDIO ESPACIAL… 30
TABLA I. MATRIZ DE ROTACIÓN EN EL EJE Z
ACN 0 In 1 In 2 In 3 In 4 In 5 In 6 In 7 In 8 In
0 In 1 1 0 0 0 0 0 0 0
1 In 0 cos (𝑎𝑎) 0 𝐴𝐴𝑖𝑖𝑛𝑛(𝑎𝑎) 0 0 0 0 0
2 In 0 0 1 0 0 0 0 0 0
3 In 0 −𝐴𝐴𝑖𝑖𝑛𝑛(𝑎𝑎) 0 𝐴𝐴𝑚𝑚𝐴𝐴(𝑎𝑎) 0 0 0 0 0
4 In 0 0 0 0 cos (2𝑎𝑎) 0 0 0 𝐴𝐴𝑖𝑖𝑛𝑛 (2𝑎𝑎)
5 In 0 0 0 0 0 𝐴𝐴𝑚𝑚𝐴𝐴(𝐴𝐴) 0 𝐴𝐴𝑖𝑖𝑛𝑛 (𝑎𝑎) 0
6 In 0 0 0 0 0 0 1 0 0
7 In 0 0 0 0 0 −𝐴𝐴𝑖𝑖𝑛𝑛 (𝑎𝑎) 0 𝐴𝐴𝑚𝑚𝐴𝐴 (𝑎𝑎) 0
8 In 0 0 0 0 −𝐴𝐴𝑖𝑖𝑛𝑛 (𝑎𝑎) 0 0 0 cos (2𝑎𝑎)
E. Audio 3D y reproducción
En esta sección se presenta el concepto de audio 3D y se presenta la definición de audio binaural y
auralización.
1) Audio 3D
Un Sistema de audio 3D tiene la habilidad de posicionar sonidos alrededor del oyente. Los sonidos
son reproducidos por parlantes o audífonos, pero la percepción que tiene el oyente es que el sonido
proviene de puntos arbitrarios en el espacio. Esto es similar al paneo en sistemas convencionales
estéreo: los sonidos pueden ser paneados en puntos entre los dos parlantes, creando imágenes
virtuales o “fantasmas” del sonido donde no está el parlante. Sin embargo, los sistemas estéreo no
pueden posicionar sonidos en los lados o en la parte posterior del oyente, ni encima o debajo de él.
Un sistema 3D hace justo esa tarea [26].
DESARROLLO DE UN ALGORITMO DE PROCESAMIENTO DE AUDIO ESPACIAL… 31
2) Funcionamiento del Audio 3D
Los humanos podemos localizar fuentes gracias a un complejo mecanismo que utiliza la posición
de las orejas y las pequeñas diferencias de tiempo y nivel que produce su ubicación en la cabeza,
incluso los hombros y la morfología de la cabeza participan en este proceso.
Un sonido generado en el espacio crea una onda de sonido que se propaga y llega a los oídos del
oyente. Cuando el sonido está a la izquierda del oyente llega primero al oído izquierdo antes que,
al derecho, en consecuencia, la señal que llega al oído derecho está retrasada con respecto a la señal
del izquierdo. En adición la señal del oído derecho puede estar atenuada debido a la sombra acústica
generada por la cabeza. Ambas señales que llegan a los oídos están también sujetas a un complicado
proceso de filtración causado por la interacción acústica con el torso, cabeza, y en particular con el
pabellón en el oído externo [26].
Los pliegues presentes en el pabellón modifican el contenido en frecuencia de la señal, reforzando
o atenuando frecuencias debido a los rebotes que sufren las ondas que llegan a éstos.
Inconscientemente se usa tiempos de retardo, diferencias de amplitudes e información tonal en
cada oído para determinar la posición de las fuentes de sonido.
La transformación del sonido desde un punto en el espacio hasta cada canal del oído puede ser
medida con precisión. Estas medidas son llamadas Head-Related Transfer Functions (HRTF’s),
las cuales dependen de los ángulos y la distancia de la fuente al receptor. Generalmente son medidas
a dos metros asumiendo que se tienen ondas planas. Por lo que la dependencia a la distancia se
ignora.
Un sistema de audio 3D funciona replicando el proceso natural de escucha reproduciendo el sonido
con las señales de localización en los oídos del oyente. Este proceso se puede emular usando un
par de HRTF’s que filtren un archivo de audio. Se reproducen a través de audífonos y el oyente
percibirá el sonido en una locación específica dada por la HRTF. Este proceso es llamado síntesis
binaural [26].
Cada persona posee un par de HRTF’s correspondiente a su estructura, por esta razón el uso de
HRTF’s no individualizadas generalmente conlleva dos problemas particulares de localización:
confusiones con sonidos provenientes de adelante y atrás y errores en la elevación. Estos dos
problemas son la gran limitación de la tecnología 3D [26].
DESARROLLO DE UN ALGORITMO DE PROCESAMIENTO DE AUDIO ESPACIAL… 32
3) Audio binaural
El audio binaural se basa en HRTF’s para emular la forma de la cabeza y como ésta afecta las ondas
que llegan a los oídos. Esto crea experiencias de escucha realistas donde se puede discernir la
ubicación de las fuentes de sonido en el espacio [30]. Las funciones describen los caminos entre la
fuente de sonido y cada oído en términos de diferencias de tiempo interaurales (𝐼𝐼𝐷𝐷𝐷𝐷). Estas son el
resultado de las diferencias en el tiempo de propagación de las ondas de sonido. Las diferencias de
nivel interaural (𝐼𝐼𝐿𝐿𝐷𝐷) se presentan por la diferencia de las longitudes de los recorridos de
propagación. A esto se le suma el efecto de sombra acústica que genera la cabeza humana. Se
realiza la síntesis binaural al convolucionar la fuente de sonido mono con la 𝐻𝐻𝐻𝐻𝐷𝐷𝐹𝐹 específica del
oyente. Este proceso de síntesis también se puede combinar con modelos de campo sonoro para
producir simulaciones y modelos de recintos binaurales. La síntesis binaural aplicada a cada
reflexión produce la Respuesta Binaural al Impulso del Recinto [31]. En caso de utilizar altavoces
para la reproducción es necesario el uso de técnicas para la cancelación de crosstalk [32].
F. Auralización interactiva
Los sistemas de realidad virtual que permiten al usuario tener una experiencia multisensorial están
siendo ampliamente investigados debido a su potencial aplicación en áreas como entretenimiento,
educación, evaluaciones subjetivas, etc. En cuanto a la auralización, esta técnica permite al usuario
escuchar el campo sonoro de un espacio específico y también le permite interactuar con el entorno.
Esto significa que proporciona la capacidad de movimiento dentro del entorno virtual,
reconstruyendo el campo acústico según la posición. El desarrollo RIR de un sistema en tiempo-
real requiere una pesada carga computacional. Esto se debe a que la tiene que ser calculada de
manera interactiva basándose en las ubicaciones de fuente / oyente para luego convolucionarse
con el audio grabado en un ambiente anecoico. Además, si se realiza una reproducción binaural
mediante auriculares o utilizando altavoces. La RIR binaural debe tener en cuenta la rotación de la
cabeza del usuario y los cambios de la HRTF con respecto a los ángulos de incidencia de las ondas
acústicas [33].
DESARROLLO DE UN ALGORITMO DE PROCESAMIENTO DE AUDIO ESPACIAL… 33
VI. DESARROLLO
A. Diagrama de flujo de señal
El proyecto se compone de la realización de diferentes unidades. En la Figura. 2 se presenta el
diagrama de flujo utilizado en el desarrollo del algoritmo de espacialización de fuentes sonoras.
Fig. 2. Diagrama de flujo - metodología de trabajo
Las diferentes etapas de desarrollo del proyecto son descritas a continuación.
B. Simulación acústica del recinto y obtención de respuestas al impulso en B-Format
Previo a la simulación para todas las posiciones de receptor en el recinto y obtención de IRs en
codificación B-format, se llevó a cabo una simulación en condiciones anecoicas con un solo
receptor ubicado a un metro de distancia y al frente de la fuente. Esto con el propósito de corroborar
la amplitud de las señales en codificación B-format de acuerdo con la teoría de codificación [28].
DESARROLLO DE UN ALGORITMO DE PROCESAMIENTO DE AUDIO ESPACIAL… 34
El esquema de la distribución espacial de receptor y fuente y las dimensiones del espacio simulado
es descrito en la Figura. 3.
Fig. 3. Posición fuente receptor para comprobación de codificación B-Format
Se utilizó el algoritmo de predicción 2 de Catt-Acoustic recomendado para la generación de
auralizaciones y se tomó solo el sonido directo. La respuesta al impulso obtenida se presenta en la
Figura. 4
Fig. 4. Respuesta al impulso sintetizada y codificada en B-Format
DESARROLLO DE UN ALGORITMO DE PROCESAMIENTO DE AUDIO ESPACIAL… 35
De la anterior Figura. 3 se puede evidenciar como el dipolo que está ubicado en el eje x a la misma
altura de la fuente, es decir a cero grados es el único que tiene presencia de señal. Esto se observa
en los canales W y X, mientras que en los canales Y y Z la señal es nula.
Luego de corroborar la codificación en B-format, se realizó la simulación del recinto con la
ubicación de los receptores mostrada en la Figura. 5. El propósito de esta simulación es que las
respuestas al impulso sean actualizadas en tiempo-real cuando se esté haciendo la implementación
dentro del entorno Unity. Esto con el fin de emular las reflexiones y el efecto de procedencia que
se tiene.
Fig. 5. Distribución de receptores en la sala simulada (IRs)
Se simuló con el algoritmo de predicción 2 de Catt-Acoustic y se tomaron 25000 rayos. Los
gráficos de niveles de presión SPL por octavas de frecuencia de 500Hz, 1000Hz, 2000Hz, 4000Hz
son presentados en la Figura. 6,
Se observa la presencia de modos generados por la geometría y características físicas del recinto.
Estos corresponden a puntos de mínima presión afectando el nivel SPL de los receptores 5,6,7,10
y 11.
DESARROLLO DE UN ALGORITMO DE PROCESAMIENTO DE AUDIO ESPACIAL… 36
Fig. 6. Niveles de presión distribuidos en recinto por octavas de frecuencia
Posteriormente se guardaron las respuestas al impulso B-format para cada punto de receptor en
formato *.mat y se generaron los archivos de audio *.wav en el software de procesamiento Matlab.
C. Diseño de escena virtual y preparación del entorno de comunicación Unity-LibPd
1) Modelado 3D
En primera instancia se definió el tipo de escenario para la escena. Se realizó el diseño del recinto
en el software de modelado 3D Sketchup el cual se puede observar en la Figura. 7. Posteriormente
se importó al entorno Unity donde se realizó un proceso de texturización e iluminación.
Fig. 7. Modelo gráfico en Sketchup
DESARROLLO DE UN ALGORITMO DE PROCESAMIENTO DE AUDIO ESPACIAL… 37
La Figura. 8 muestra el entorno de trabajo dentro de Unity, su ventana principal de escena, jerarquía
de objetos y jerarquía de carpetas dentro de Assets
Fig. 8. Modelo del recinto dentro del motor de videojuegos
2) LibPd para Windows de 64-bits embebido en Unity
Esta etapa se encarga de la implementación del puerto de comunicación LibPd de compatibilidad
con Unity y Windows de 64 bits. El cual se encuentra dentro de la plataforma de desarrollo
colaborativo GitHub [34]. Posteriormente se descargó la librería embebida de Pure Data: LibPd
y se recompiló para ser utilizada en sistemas de 64 bits siguiendo los pasos encontrados en la
misma plataforma. Para la descripción de esta metodología favor remitirse al anexo 1
Existen diferentes trabajos que realizan una conexión sencilla además de crear métodos claros
para incorporar Pure Data como motor de audio para Unity. Entre ellas existe uPD v1.01, es un
paquete de Unity realizado por Magicolo [35] que facilita la conexión de la librería. La misma
incluye una lista de métodos para la comunicación de Unity con el patch de Pure Data. Además
de diferentes efectos (chorus, flangger, etc) de Pure Data y escenas de ejemplo que demuestran el
uso de la librería.
DESARROLLO DE UN ALGORITMO DE PROCESAMIENTO DE AUDIO ESPACIAL… 38
D) Desarrollo del algoritmo basado en teoría de armónicos esféricos
El algoritmo fue desarrollado en el lenguaje gráfico de programación Pure Data. Se utilizó la
librería embebida LibPd dentro de Unity como se encuentra en el anexo 1. A continuación, se
describirá el proceso de desarrollo y las pruebas correspondientes a cada uno de los patch para
verificar el correcto funcionamiento. El patch principal del algoritmo en Pure Data es presentado
en el anexo 2.
1) Rotación del campo sonoro
En la primera parte se realizó el almacenamiento en tablas de cada uno de los cuatro canales de la
respuesta al impulso. Posteriormente esta respuesta se multiplicó con la matriz de rotación para
los cuatro primeros coeficientes presentada en el marco teórico en la Tabla I. Para verificar que la
matriz de rotación generara la salida deseada, se ingresó una respuesta al impulso simulada en
condiciones anecoicas ubicada a cero grados de la fuente y tomando únicamente el sonido
directo. Para este caso como se mencionó con anterioridad solo en los canales W y X habría
presencia de señal. Siguiendo la teoría de rotación en azimut, si se genera un cambio en el ángulo
del receptor con respecto a la fuente de 90 grados la señal estaría presente en el dipolo ubicado a
lo largo del eje Y. Esto se evidenció ubicando sliders a la salida de la matriz de rotación para cada
canal. Efectivamente para una rotación de 90 grados en azimut las sliders relacionadas a los
canales W y Y presentaron un desplazamiento. Mientras que las sliders para los canales X y Z
permanecieron inmóviles. Así mismo se verificó para un ángulo de 45 grados en el que los
dipolos ubicados en el eje X y Y deberían capturar la señal. Como se esperaba los dos canales Y y
X presentaron señal y movimiento de las sliders correspondientes.
En el anexo 3 se encuentra el subpatch de Pure Data para la rotación del campo sonoro.
2) Reproducción del campo sonoro con armónicos esféricos
En consecuencia, la señal de salida de la matriz de rotación se convoluciona con un audio anecoico.
La convolución utiliza el algoritmo de Overlap Add. La señal resultante se multiplica punto a punto
con la matriz de decodificación que contiene las amplitudes para cada parlante ubicado en la esfera
DESARROLLO DE UN ALGORITMO DE PROCESAMIENTO DE AUDIO ESPACIAL… 39
unitaria que proporcionará la reconstrucción del campo sonoro. Las amplitudes para cada parlante
son calculadas teniendo en cuenta los ángulos de azimut y elevación de la posición correspondiente
a cada parlante. Esta distribución fue calculada de acuerdo con la teoría de armónicos esféricos
presentada en el marco teórico. Para verificar el correcto funcionamiento de este proceso, se utilizó
la misma IR con la que se verificó el patch de rotación. Se corroboró para una posición de receptor
ubicado al frente de la fuente (cero grados azimut) que la señal proviniera de esa misma dirección.
Entonces se verificó que los parlantes con mayor cercanía a los 0 grados en azimut con respecto a
la fuente tuvieran el mayor nivel de amplitud. En acierto con lo mencionado se verificó situando
medidores VU en la salida, así se pudo observar los parlantes con mayor ganancia.
El anexo 4 contiene el subpatch de Pure Data correspondiente a la decodificación del B-Format.
3) Reproducción binaural
Finalmente, la señal es convolucionada con cada par de HRTFs correspondiente a cada ubicación
de altavoz. Se utilizó la base de datos SOFA (Spatially Oriented Format for Acoustics). Esto con
el fin de obtener una reproducción binaural. El procedimiento consta de sumar las señales de los
canales izquierdo y derecho independientemente. La reproducción final corresponde al audio de la
fuente con las propiedades acústicas de la sala. Para cada ángulo de rotación ingresado se obtiene
la rotación del campo sonoro 3D en azimut.
El anexo 5 corresponde al subpatch de Pure Data donde la señal para cada parlante es
convolucionada con las HRTFs correspondiente a su ubicación en la esfera unitaria para ser
reproducido con formato binaural.
E. Implementación en Unity
El algoritmo para la espacialización 3D de fuentes sonoras fue posteriormente implementado en
una escena virtual dentro del motor de videojuegos Unity. Para establecer un envío de datos
requeridos en el patch de Pure Data desde Unity a LibPd se programó el código basado en los
métodos de comunicación del paquete libpd64 implementado con base a la información descargada
de la cuenta del usuario djKoloski en GitHub [34]. Se creó el script en lenguaje nativo de Unity:
C#, por medio de este se realiza el envío del ángulo de rotación de acuerdo con la posición del
DESARROLLO DE UN ALGORITMO DE PROCESAMIENTO DE AUDIO ESPACIAL… 40
ávatar, la respuesta al impulso correspondiente a su ubicación en el recinto y el audio monofónico
de la fuente. Ver anexos 6 y 7.
En la Figura. 9 se presenta la interfaz en Unity donde se permite activar la propiedad de Audio
Source y así permite asignar y cargar el audio monofónico correspondiente a la fuente. Además, se
instancia el script de C# que permite el envío de datos.
Fig. 9. Vista de inspector donde Audio Source y C# script están instanciados
La Figura. 10 muestra la interfaz en donde se permite cargar la IR correspondiente a una
ubicación en el recinto.
Fig. 10. Prefabricado de la respuesta al impulso (IR)
DESARROLLO DE UN ALGORITMO DE PROCESAMIENTO DE AUDIO ESPACIAL… 41
La Figura. 11 muestra una vista superior del modelo gráfico y la distribución de las respuestas al
impulso dentro del recinto.
Fig. 11. Vista superior (sin techo) del modelo gráfico en Unity
F. Prueba d aceptación de usuario
A continuación, se presenta la prueba de aceptación de usuario bajo las recomendaciones de la
National Bureau Standards (NBS) [36]. La prueba tiene como objetivo la evaluación del
cumplimiento de los requerimientos de diseño del algoritmo de procesamiento de audio espacial
para la generación de videojuegos en entorno Unity. El tipo de prueba realizada es de “Caja
cerrada”. Este tipo de prueba de aceptación analiza las funcionalidades del software sin conocer la
estructura interna del código del mismo [37].
1) Resumen
Se realizó una prueba manual del funcionamiento del algoritmo implementado en una escena
virtual. Esta prueba busca reconocer la aceptación del funcionamiento del algoritmo por parte de
los usuarios con conocimientos de audio. Para esto se realizaron una serie de preguntas concretas
DESARROLLO DE UN ALGORITMO DE PROCESAMIENTO DE AUDIO ESPACIAL… 42
para la validación del cumplimiento de los requerimientos de funcionamiento por parte de los
encuestados. La prueba realizada se puede encontrar en el Anexo 6.
2) Ejecución de pruebas
• Condiciones de inicio: El programa debe estar instalado correctamente en el computador
utilizado para la prueba. Se debe haber informado acerca del procedimiento, objetivos y
posibles riesgos que implica la prueba. El encuestado debe aceptar las condiciones y
diligenciar el consentimiento informado.
• Condiciones de finalización: La ejecución de la prueba finaliza cuando el usuario responda
a la totalidad de las preguntas. En caso de presentarse algún riesgo que pueda afectar al
encuestado se debe suspender la realización de la prueba.
• Población utilizada para la prueba: La prueba fue realizada a diez personas: docentes y
estudiantes de ingeniería de sonido.
3) Resultados de la prueba de aceptación
La prueba fue realizada bajo el consentimiento dado por los docentes y estudiantes que la
realizaron. Evaluando la percepción del cambio en el campo sonoro al navegar dentro del recinto
en la escena virtual, los resultados fueron positivos. La totalidad de los encuestados percibe el
cambio al actualizarse las respuestas al impulso de acuerdo a su posición. En su mayoría perciben
rotación del campo sonoro cuando se gira la cabeza del avatar en el eje horizontal, reconociendo la
ubicación de la fuente en el espacio. Sin embargo, en la percepción de la atenuación por factores
como la distancia, la respuesta es positiva con algunas observaciones en cuanto a los cambios
sutiles en las diferencias de nivel. Teniendo en cuenta los resultados anteriores se verifica que el
algoritmo cumple con los objetivos propuestos en el proyecto.
DESARROLLO DE UN ALGORITMO DE PROCESAMIENTO DE AUDIO ESPACIAL… 43
VII. CONCLUSIONES
• De acuerdo a la bibliografía, el presente desarrollo es el primero que permite espacializar
fuentes sonoras con respuestas al impulso B-Format usando la librería embebida de Pure
Data (LibPD).
• Gracias a que Pure Data es un lenguaje de programación gráfico orientado al
procesamiento digital de señales. A través de su librería embebida (LibPD) lo convierte en
una herramienta amigable de programación, para el desarrollo de algoritmos de
procesamiento de audio y la integración con diferentes entornos de desarrollo.
• El desarrollo de un algoritmo de espacialización en un entorno nativo dentro de Unity, si es
posible sin la dependencia de motores de procesamiento de audio externos. Este algoritmo
consta tanto del trabajo de armónicos esféricos como de binaural y es posible realizar un
prototipo funcional.
• Las pruebas de aceptación de usuario realizadas indican que el algoritmo desarrollado
cumple con los requerimientos de diseño formulados. Al finalizar el presente proyecto se
cuenta con un algoritmo que permite el procesamiento de respuestas al impulso
B-format. Permite la espacialización de fuentes en tiempo-real y la rotación del campo
sonoro sobre el eje horizontal. Implementado en una escena virtual para su aplicación en
procesos de diseño de videojuegos.
• Como recomendación se tiene que a pesar de la creación de la librería LibPD en el año
2012. Las integraciones a Unity como motor de audio son recientes y no hay un flujo de
trabajo claro y estandarizado.
DESARROLLO DE UN ALGORITMO DE PROCESAMIENTO DE AUDIO ESPACIAL… 44
REFERENCIAS
[1] J. Blauert, H. Lehnert, J. Sahrhage y H. Strauss, «An Interactive Virtual-Environment
Generator for Psychoacoustic Research. I: Architecture and Implementation,» Acta Acustica
united with Acustica, vol. 86, nº 1, pp. 94-102, 2000.
[2] Q. Huong, Dinh, N. Walker, L. Hodges, C. Song y A. Kobayashi, «Evaluating the importance
of multi-sensory input on memory and the sense of presence in virtual environments,»
Proceedings IEEE Virtual Reality, pp. 222-228, 1999.
[3] Unity Technologies, «Unity - manual: Audio spatializer sdk.,» 15 08 2017. [En línea].
Available: https://docs.unity3d.com/es/current/Manual/AudioSpatializerSDK.html.
[4] Oculus VR, «Oculus audio sdk.,» 20 08 2017. [En línea]. Available:
http://static.oculus.com/documentation/pdfs/audiosdk/latest/audiosdk.pdf.
[5] VisiSonics, «RealSpace 3D Audio 2014,» 15 08 2017. [En línea]. Available:
http://realspace3daudio.com/technology/#techoverview.
[6] Microsoft, «developer.microsoft.com.,» [En línea]. Available:
https://developer.microsoft.com/en-us/windows/mixed-reality/holograms_220. [Último
acceso: 15 08 2017].
[7] VVAudio, «Vvaudio | vvaudio.com.,» 22 09 2017. [En línea]. Available:
https://www.vvaudio.com/.
[8] Corporation, V., «Technology - realspace3d audio.,» 17 08 2017. [En línea]. Available:
http://realspace3daudio.com/technology/#techoverview.
[9] Tazman-Audio, «Tazman-audio.,» [En línea]. Available: http://www.tazman-
audio.co.uk/fabric. [Último acceso: 17 08 2017].
[10] J. Sánchez y M. Lumbreras, «Virtual Environment Interaction Through 3D Audio by Blind
Children,» CyberPsychology & Behavior, vol. 2, pp. 101-11, 1999.
[11] D. Murillo Gomez, R. J. Astley y F. Maria Fazi, «Low Frequency Interactive Auralization
Based on a Plane Wave Expansion,» Applied Sciences, vol. 7, pp. 1-22, 2017.
[12] M. Hyder y M. Haun, «Assessing virtual teleconferencing rooms.,» 129th Audio Engineering
Society Convention 2010, vol. 2, pp. 1011-1022, 2010.
DESARROLLO DE UN ALGORITMO DE PROCESAMIENTO DE AUDIO ESPACIAL… 45
[13] D. Begault, 3-D Sound for Virtual Reality and Multimedia Cambridge, Boston: AP
Professional, 1994.
[14] C. Pike, R. Taylor, P. Tom y F. Melchior, «Object-based spatial audio production for virtual
reality using the Audio Definition,» BBC Research & Development, nº 378, p. 10, 2016.
[15] P. Larsson y K. V. D. Mendel, «Better presence and performance in virtual environments by
improved binaural sound rendering,» Journal of the Audio Engineering Society, nº 000228,
2002.
[16] ISO (the International Organization for Standardization, ISO 3382-2-2008: Measurement of
room acoustic parameters — Part 2: Reverberation time in ordinary rooms — Technical
Corrigendum 1, ISO/TC 43/SC 2 Building acoustics, 2009.
[17] J. Van Mourik y D. Murphy, «Geometric and wave-based acoustic modelling using blender,»
Journal of the Audio Engineering Society, nº P-5, 2013.
[18] P. Huang, M. Karjalinen y J. Smith, «Digital waveguide networks for room response
modeling and synthesis,» Journal of the Audio Engineering Society, vol. 4, pp. 1761-1778,
2005.
[19] H. Lehnert y J. Blauert, Principles of binaural room simulation,, Applied Acoustics, 1992.
[20] P. charalampous y D. michael, «tree traversal algorithms for real time sound propagation
calculation,» Journal of the Audio Engineering society, nº 4-1, 2014.
[21] H. Lehnert, «Systematic errors of the ray-tracing algorithm,» Applied Acoustics, vol. 38, nº
2-4, pp. 207-221, 1993.
[22] J. Proakis y D. Manolakis, Digital Signal Processing (4th Edition), New Jersey: Pearson
Prentice Hall, 2006.
[23] E. Williams, Fourier Acoustics: Sound Radiation and Nearfield Acoustical Holography,
Academic Press, 1999.
[24] M. Neukmon, Signals, Systems and Sound Synthesis, Bern Peter Lang AG Bern Peter Lang
International Academic Publishers 2013, 2013.
[25] F. Wefers y M. Vorländer, «uniformly-partitioned convolution with independent partitions
in signal and filter,» Journal of the Audio engineering Society, nº 9205, 2014.
DESARROLLO DE UN ALGORITMO DE PROCESAMIENTO DE AUDIO ESPACIAL… 46
[26] A. Southern, J. Wells y D. Murphy, «Rendering walk-through auralisations using wave-based
acustic models,» 17th European Signal Processing Conference (EUSIPCO 2009), pp. 715-
719, 2009.
[27] A. Horsburgh, K. Mcalpine y D. Clark, «A perspective on the adoption of ambisonics,»
Journal of the Audio Engineering Society, nº 4-3, 2011.
[28] F. Hollerweger, «An Introduction to Higher-Order Ambisonic,» 2005. [En línea]. Available:
http://decoy.iki.fi/dsound/ambisonic/motherlode/source/HOA_intro.pdf. [Último acceso: 18
08 2017].
[29] B. R. S. Ltd, «Hoa Technical Notes - B-Format Rotation,» Blue Ripple Sound Ltd, 2015. [En
línea]. Available: https://www.blueripplesound.com/rotations. [Último acceso: 25 08 2017].
[30] N. Kraakman, «Binaural Audio,» Purple Pill - immersive content, 13 01 2017. [En línea].
Available: https://purplepill.io/vr-glossary/binaural-audio/. [Último acceso: 17 08 2017].
[31] C. Tsakostas, A. Floros y I. Dellyannis, «Binaural rendering for enhanced 3d audio,» Audio
Mostly 2007 - 2nd Coference on Interaction with Sound, Conference Proceedings, 2007.
[32] D. B. Ward y G. W. Elko, «Effect of loudspeaker position on the robustness of acoustic
crosstalk cancellation,» IEEE Signal Processing Letters}, vol. 6, nº 5, pp. 106-108, 1999.
[33] W. Gardner, D Audio and Acoustic Environment Modeling, Boston: The Springer
International Series in Engineering and Computer Science,, 1999.
[34] D. Koloski y A. Pazos, «Libpd64. A port of LibPD to 64-bit compatibilty with Unity,» [En
línea]. Available: https://github.com/djkoloski/libpd64.
[35] Magicolo, «Magicolo / uPD,» [En línea]. Available: https://github.com/Magicolo/uPD.
[36] United States. National Bureau of Standards., An overview of computer software acceptance
testing, Washington, DC: U.S. Dept. of Commerce, National Bureau of Standard, 1986.
[37] C. Mackerras, «5 Different Types of User Acceptance Testing,» growthhackers.com, 16 10
2016. [En línea]. Available: https://growthhackers.com/articles/5-different-types-of-user-
acceptance-testing.
DESARROLLO DE UN ALGORITMO DE PROCESAMIENTO DE AUDIO ESPACIAL… 47
ANEXOS
Anexo 1. Compilación de LibPD en Windows 64
La compilación debe realizarse en un entorno tipo UNIX (terminal). El software MSYS2 es una
buena opción, aunque no es un compilador, por lo tanto, debe ser agregado un paquete GCC con
el comando:
$ pacman Sy
$ pacman S mingww64x86_64gcc
El código fuente de Pure data (LibPd)es obtenido clonándolo de la plataforma de desarrollo
colaborativo GitHub. Se abre una terminal git y se ejecuta para clonar:
$ git clone htps://github.com/libpd/libpd
Esta librería tiene algunos paquetes que deben ser agregados ejecutando los siguientes comandos:
$ cd libpd
$ git submodule init
$ git submodule update
De vuelta en MSYS2, se ingresa a la ubicación donde la librería fue clonada y se ejecuta el archivo
que construirá el dll en 64-bits ejecutando los comandos:
$ cd libpd
$ mingw64\_build\_csharp.bat
Una vez terminado el proceso de compilación, se ignoran las advertencias y se busca dentro del
directorio de LibPD los archivos siguientes archivos:
$ libpd/libs/libpdcsharp.dll
$ libpd/libs/mingw64/libwinpthread1.dll
DESARROLLO DE UN ALGORITMO DE PROCESAMIENTO DE AUDIO ESPACIAL… 48
Anexo 2. Algoritmo de Pure Data para espacializar fuentes en B-Format
DESARROLLO DE UN ALGORITMO DE PROCESAMIENTO DE AUDIO ESPACIAL… 49
Anexo 3. Subpatch de rotación del campo sonoro
DESARROLLO DE UN ALGORITMO DE PROCESAMIENTO DE AUDIO ESPACIAL… 50
Anexo 4. Decodificación de B-Format
Anexo 5. Codificación Binaural
DESARROLLO DE UN ALGORITMO DE PROCESAMIENTO DE AUDIO ESPACIAL… 51
Anexo 6. Script para ubicación de respuestas al impulso en el recinto
using System.Collections; using System.Collections.Generic; using UnityEngine; public class ImpulseResponse : MonoBehaviour { public string IR_Name; public AudioClip sample; public float characterDistance; public string IR_Path; // Use this for initialization void Start () { return StartCoroutine(GetAudioByPath(IR_Path)); lock (ConvoManager.instance) { ConvoManager.instance.IRs.Add(this); } } // Update is called once per frame void Update () { characterDistance = Vector3.Distance(transform.position, ConvoManager.instance.character.transform.position); } public float GetDistance() { return characterDistance; } IEnumerator GetAudioByPath(string path) { WWW dir = new WWW(path); while (!dir.isDone) { Debug.Log("wait"); } AudioClip clip = dir.GetAudioClip(); sample = clip; yield return null; } }
DESARROLLO DE UN ALGORITMO DE PROCESAMIENTO DE AUDIO ESPACIAL… 52
Anexo 7. Script de administración y envío de respuestas al impulso
using System.Collections; using System.Collections.Generic; using UnityEngine; using Magicolo; public enum LookDir { Left, Right } public class ConvoManager : MonoBehaviour { public GameObject character; public List<ImpulseResponse> IRs; public static ConvoManager instance; public Vector3 direction; public float currentAngle; public LookDir characterLookDir; public AudioClip audioToSend = null; public AudioClip audioToSend2=null; public float[] s1; public float[] s2; public float[] s3; public float[] s4; public float[] s1_1; public float[] s2_1; public float[] s3_1; public float[] s4_1; public bool bangSend = false; public bool loop=false; public int currentChannelLength = 0; public int currentChannelLength2 = 0; public int currentIntAngle = 0; public int currentClosestIR = -1; public int currentClosestIR2 = -1; public ImpulseResponse closest; public ImpulseResponse closest2;
DESARROLLO DE UN ALGORITMO DE PROCESAMIENTO DE AUDIO ESPACIAL… 53
int posicion=1; int crossfade=0; // Use this for initialization/// <inicializacion del patch, envio de la fuente>//////////////////////////////////////// void Awake () { direction = transform.forward; direction.y = 0; direction = direction.normalized; if (!instance) instance = this; else { if (instance != this) Destroy(this.gameObject); } AudioConfiguration config = AudioSettings.GetConfiguration(); config.sampleRate = 44100; AudioSettings.Reset(config); //Opening the patch will connect it up to the DSP PureData.OpenPatch("rotacion_16384_cross"); //Nombre de la fuente AudioSource sample = GetComponent<AudioSource> (); string sample_nombre = sample.clip.name; //envio nombre de fuente Debug.Log ("el nombre de la fuente enviado es: " + sample_nombre+ "y fue" + PureData.Send<string>("sample", sample_nombre)); //PureData.Send<int>("cambio", 1); PureData.Send("cross",1); } // Update is called once per frame/// <UPDATE>Envio de las repsuesta al impulso segun su posicion/// <summary>//////////// void Update() { PureData.Receive ("posicion", Posicion, false); PureData.Receive ("sonando", CrossfadePosicion, false);
DESARROLLO DE UN ALGORITMO DE PROCESAMIENTO DE AUDIO ESPACIAL… 54
if (Input.GetKeyDown (KeyCode.Space)) { Debug.Log ("la posicion es: " + posicion); Debug.Log ("crossfade esta en: " + crossfade); } if (IRs.Count <= 0) return; int closestIR = -1; int closestIR2 = -1; float minDist = 1000; float minDist2 = 1200; for (int i = 0; i < IRs.Count; i++) { float currentDist = IRs[i].GetDistance(); if (currentDist < minDist) { minDist = currentDist; closestIR = i; } } for (int j = 0; j < IRs.Count; j++) { if (j == closestIR) continue; float currentDist2 = IRs[j].GetDistance(); if (currentDist2 < minDist2) { minDist2 = currentDist2; closestIR2 = j } } if (currentClosestIR != closestIR) { Debug.Log("Closest IR = " + closestIR); if (posicion == 1) { Debug.Log(" posicion cambio" + PureData.Send<int> ("Irposicion", 0)); } if (posicion == 0) { Debug.Log(" posicion cambio" + PureData.Send<int> ("Irposicion", 1)); } Debug.Log(" crossfade activado" + PureData.Send("cross", 1)); closest = IRs[closestIR]; audioToSend = IRs[closestIR].sample;
DESARROLLO DE UN ALGORITMO DE PROCESAMIENTO DE AUDIO ESPACIAL… 55
ProcessChannels(); if (posicion == 1) { bool escritura = PureData.WriteArray ("W", s1); PureData.WriteArray ("X", s2); PureData.WriteArray ("Y", s3); PureData.WriteArray ("Z", s4); PureData.WriteArray ("XR", s2); PureData.WriteArray ("YR", s3); if (escritura == true) { Debug.Log ("IR actual escrita en tablas A"); } } else if (posicion == 0) { bool escritura2= PureData.WriteArray ("W2", s1_1); PureData.WriteArray ("X2", s2_1); PureData.WriteArray ("Y2", s3_1); PureData.WriteArray ("Z2", s4_1); PureData.WriteArray ("X2R", s2_1); PureData.WriteArray ("Y2R", s3_1); if (escritura2 == true) { Debug.Log ("IR actual escrita en tablas B"); } } currentClosestIR = closestIR; } if (currentClosestIR2 != closestIR2) { Debug.Log ("Closest IR2 = " + closestIR2); closest = IRs [closestIR2]; audioToSend2 = IRs [closestIR2].sample; ProcessChannels (); if (posicion == 1) { bool escrituraB =PureData.WriteArray ("W2", s1_1); PureData.WriteArray ("X2", s2_1); PureData.WriteArray ("Y2", s3_1); PureData.WriteArray ("Z2", s4_1); PureData.WriteArray ("X2R", s2_1); PureData.WriteArray ("Y2R", s3_1); if (escrituraB == true) { Debug.Log ("Segunda IR escrita en tablas B"); } } else if (posicion == 0) { bool escrituraB2 =PureData.WriteArray ("W", s1); PureData.WriteArray ("X", s2);
DESARROLLO DE UN ALGORITMO DE PROCESAMIENTO DE AUDIO ESPACIAL… 56
PureData.WriteArray ("Y", s3); PureData.WriteArray ("Z", s4); PureData.WriteArray ("XR", s2); PureData.WriteArray ("YR", s3); if (escrituraB2 == true) { Debug.Log ("Segunda IR escrita en tablas A"); } } currentClosestIR2 = closestIR2; } if (currentIntAngle != (int)currentAngle) { //envio de angulo PureData.Send<int>("angulo", (int)currentAngle); currentIntAngle = (int)currentAngle; } //s1 + s2 + s3 + s4 + currentAngle if (!bangSend) { //envio de bang inicio Debug.Log("el envio del bang es: " + PureData.Send("ya", 1)); bangSend = true; } if (!loop) {
//envio de bang inicio Debug.Log("el envio del Loop es: " + PureData.Send("loop", 1)); loop = true; } CalculateAngle(); } float[] currentData = null; float[] currentData2 = null; void ProcessChannels() { if (audioToSend == null) { return; }
currentData = new float[audioToSend.samples * audioToSend.channels]; audioToSend.GetData (currentData, 0); int samplesLength = currentData.Length / 4; s1 = new float[samplesLength];
s2 = new float[samplesLength]; s3 = new float[samplesLength]; s4 = new float[samplesLength];
DESARROLLO DE UN ALGORITMO DE PROCESAMIENTO DE AUDIO ESPACIAL… 57
if (currentChannelLength != samplesLength) { PureData.Send<float> ("len", samplesLength); currentChannelLength = samplesLength; } int count = 0; for (int j = 0; j < currentData.Length; j += 4) { s1[count] = currentData[j]; s2[count] = currentData[j + 1]; s3[count] = currentData[j + 2]; s4[count] = currentData[j + 3]; count++; } if (audioToSend2 == null) { return; } currentData2 = new float[audioToSend2.samples * audioToSend2.channels]; audioToSend2.GetData(currentData2, 0); int samplesLength2 = currentData2.Length / 4; s1_1 = new float[samplesLength2]; s2_1 = new float[samplesLength2]; s3_1 = new float[samplesLength2]; s4_1 = new float[samplesLength2]; if (currentChannelLength2 != samplesLength2) { PureData.Send<float>("len", samplesLength); currentChannelLength2 = samplesLength2; } int count2 = 0; for (int j = 0; j < currentData2.Length; j += 4) { s1_1[count2] = currentData2[j]; s2_1[count2] = currentData2[j + 1]; s3_1[count2] = currentData2[j + 2]; s4_1[count2] = currentData2[j + 3]; count2++; } }
DESARROLLO DE UN ALGORITMO DE PROCESAMIENTO DE AUDIO ESPACIAL… 58
void Posicion(float param) { //float crossfade = posicion (); posicion = (int)param; } void CrossfadePosicion(float param) { //float crossfade = posicion (); crossfade = (int)param; } public void CalculateAngle() { float posX = character.transform.position.x; float posY = character.transform.position.z; float currentYAxis = character.transform.eulerAngles.y; Vector3 currentPlayerDir = character.transform.forward; currentPlayerDir.y = 0; currentPlayerDir = currentPlayerDir.normalized; float dot = Vector3.Dot(direction, currentPlayerDir); //Cos(theta) float acos = Mathf.Acos(dot); currentAngle = acos * (360f / (Mathf.PI * 2)); //- 180f; if (currentYAxis >= 0 && currentYAxis < 180f) characterLookDir = LookDir.Right; else if (currentYAxis >= 180f) characterLookDir = LookDir.Left; switch (characterLookDir) { case LookDir.Right: currentAngle *= -1; break; case LookDir.Left: currentAngle *= 1; break; } } }
DESARROLLO DE UN ALGORITMO DE PROCESAMIENTO DE AUDIO ESPACIAL… 59
Anexo 8. Prueba de aceptación de usuario
Prueba de aceptación de software para el trabajo de grado “Desarrollo de un algo-ritmo de
procesamiento de audio espacial para la generación de videojuegos en entorno Unity”.
A continuación, se presenta una prueba de aceptación de software diseñada siguiendo las
recomendaciones del estándar de la National Bureau Standards (NBS) Special Publication
500-136. El objetivo del desarrollo de esta prueba es la evaluación de los requerimientos de diseño
del algoritmo que permita espacializar una fuente con respuestas al impulso codificadas en B-
Format en el motor de videojuegos Unity. La prueba no es de carácter obligatorio. No presenta
ningún riesgo considerado y requiere disponibilidad de tiempo mínimo de 10 minutos. Todas las
preguntas deben ser respondidas. En caso de responder alguna pregunta de manera negativa se
requiere una justificación clara de la respuesta.
Declaro que he leído y he sido informado del objetivo de la prueba, sus riesgos y consideraciones.
Realizo esta prueba a voluntad y doy permiso de utilizar la información aquí consignada para fines
académicos del trabajo de grado “Desarrollo de un algoritmo de procesamiento de audio espacial
para la generación de videojuegos en entorno Unity”.
.
.
.
.
.
.
.
.
.
.
.
.
Nombre completo:
Firma:
C.C:
DESARROLLO DE UN ALGORITMO DE PROCESAMIENTO DE AUDIO ESPACIAL… 60
Antes de comenzar, verifique junto con el encuestador, que la escena se encuentre compilada y
pueda ser ejecutada desde su computador sin ningún programa abierto. Se realizarán preguntas
concretas con respecto al funcionamiento del algoritmo implementado en la escena virtual,
orientadas a la verificación de los requerimientos de diseño propuestos.
1. ¿Es la escena virtual evaluada, un archivo tipo ejecutable en formato .exe? SI_NO_ ¿Es
otro formato?, ¿Cuál?
2. ¿Considera que, en la escena virtual, el avatar de juego puede (por medio de las teclas de
navegación y el uso del mouse o ratón) desplazarse por el espacio y rotar el campo de
visión? SI_NO_ ¿Por qué no?
3. ¿Es posible navegar en diferentes puntos del espacio y escuchar la fuente sonora desde cada
uno de ellos? SI_NO_ ¿Por qué no?
4. ¿Percibe usted una rotación del campo sonoro con respecto a la posición de la fuente al
rotar la visión en el eje horizontal? SI_NO_ ¿Por qué no?
5. ¿Al acercarse o alejarse de la fuente, percibe un cambio en el campo sonoro? SI_NO_ ¿Por
qué no?
6. ¿Al acercarse o alejarse de la fuente, percibe una atenuación o aumento en el nivel de la
fuente sonora? SI_NO_ ¿Por qué no?
7. ¿Teniendo en cuenta la anterior evaluación, ¿acepta usted el desarrollo del algoritmo,
indicando y verificando que cumple con los requerimientos de diseño planteados? SI_NO_
¿Por qué no?