Desarrollo de una plataforma de efectos sobre un decodificador SAC
Texto completo
(2) Desarrollo de una plataforma de efectos sobre un decodificador SAC. INFORMACIÓN DEL PROYECTO Título. Desarrollo de una plataforma de efectos sobre un decodificador SAC. Andrés González Fornell Autor [email protected]. José Fermín Parera Bermúdez Tutor [email protected]. Fecha de publicación. 03/07/2017. Escuela Técnica Superior de Ingenieros de Telecomunicación Institución Universidad Politécnica de Madrid. 2.
(3) Andrés González Fornell. RESUMEN Se ha definido e implementado un módulo software de efectos de sonido que utiliza una señal de audio codificado según el estándar ISO/IEC 23003 (coloquialmente denominado MPEG-D) para aplicar un conjunto de efectos sobre el audio previamente a su reproducción. El formato de la señal de audio de entrada de la plataforma es MPEG-Surround (Spatial Audio Coding), de forma que el sistema, aunque utilizando decodificación SAC, es compatible con decodificación SAOC. Por ello, los efectos utilizan los parámetros de Spatial Audio Coding (definido en la parte 1 del estándar) y de Spatial Audio Object Coding (definido en la segunda parte). De esta forma, la plataforma coincide con el conjunto módulo de efectos y decodificación de la parte 2 del estándar. Por otro lado, tanto la aplicación de los efectos como la reproducción del audio resultante trabajan en tiempo real. Todo el sistema, escrito en lenguaje de programación C/C++, se presenta en una interfaz de usuario que permite controlar y mostrar el proceso al completo.. ABSTRACT A sound effects software module is defined and implemented, where an audio coded signal according to ISO/IEC 23003 standard (well known as MPEG-D) is decoded to apply a set of effects over the signal before it is played. The input audio signal format is MPEG-Surround (Spatial Audio Coding), so that the system, although it is decoded as SAC, is compatible with SAOC decoding. Consequently, effects are using both Spatial Audio Coding (first part in the standard) and Spatial Audio Object Coding (second part). Therefore, the platform fits with the effects and decoding modules of the second part of the standard. On the other hand, effects application and audio playback run on real time. The whole system, written in C/C++ programming language, is presented on a user interface which allows to control and show the entire process.. PALABRAS CLAVE. 3. Spatial Audio Coding. SAC. ISO/IEC 23003-Part 1. ISO/IEC 23003-1. MPEG-D. MPEG-Surround. Effects. Efectos.
(4) Desarrollo de una plataforma de efectos sobre un decodificador SAC. CONTENIDO INFORMACIÓN DEL PROYECTO...................................................................... 2 RESUMEN.............................................................................................................. 3 PALABRAS CLAVE ............................................................................................. 3 CONTENIDO ......................................................................................................... 4 ÍNDICE ................................................................................................................... 6 LISTA DE CONTENIDO ....................................................................................... 7 1.. INTRODUCCIÓN ....................................................................................... 11 1.1. 1.2. 1.3.. 2. 3.. MPEG-Surround.............................................................................................. 13 Módulo de efectos ........................................................................................... 15 Motivación ...................................................................................................... 17. OBJETIVOS................................................................................................. 18 DESARROLLO ........................................................................................... 19 3.1. Gestor del proceso ........................................................................................... 20 3.1.1. Gestor de ficheros........................................................................................ 22 3.2. Codificador de audio ....................................................................................... 24 3.2.1. Decodificador SAC ..................................................................................... 25 3.2.2. Codificador SAC ......................................................................................... 26 3.2.3. Bitstream ..................................................................................................... 27 3.3. Efectos ............................................................................................................. 31 3.3.1. Compresor ................................................................................................... 32 3.3.2. Ecualizador .................................................................................................. 34 3.3.3. Reverb ......................................................................................................... 44 3.3.4. Panning ........................................................................................................ 53 3.4. Interfaz de usuario ........................................................................................... 55 3.4.1. Procesado en tiempo real ............................................................................. 55 3.4.2. Dispositivos de salida de audio ................................................................... 56 3.4.3. Representación gráfica de señales ............................................................... 58. 4.. RESULTADOS ............................................................................................ 60 4.1. Pruebas de rendimiento ................................................................................... 60 4.2. Información del software ................................................................................ 63 4.2.1. Requisitos de Rendimiento.......................................................................... 63 4.2.2. Dependencias .............................................................................................. 64 4.2.3. Clases implementadas ................................................................................. 66 4.3. Uso de la aplicación ........................................................................................ 68 4.3.1. Aplicación con interfaz de usuario .............................................................. 68 4.3.2. Aplicación ejecutable vía línea de comandos .............................................. 74 4.4. Guía de implementación de nuevos efectos .................................................... 78 4.4.1. Inclusión del efecto ..................................................................................... 81 4.4.2. Descripción del control de interfaz de usuario ............................................ 83 4.4.3. Funciones disponibles ................................................................................. 89. 4.
(5) Andrés González Fornell. 5.. CONCLUSIONES ....................................................................................... 91 5.1. 5.2.. Resolución de los objetivos ............................................................................. 91 Conclusiones generales ................................................................................... 92. BIBLIOGRAFÍA .................................................................................................. 93 ANEXO A. PLANIFICACIÓN DEL PROYECTO ........................................... 95. ANEXO B. CONTROL DE VERSIONES GIT ................................................. 97. ANEXO C. DOCUMENTACIÓN DE LA APLICACIÓN .............................. 101. 5.
(6) Desarrollo de una plataforma de efectos sobre un decodificador SAC. ÍNDICE B Bitstream ........................................................... 13, 27. C Complemento a 2 .............................................. 22, 58 Compresor ............................................................... 32. D Delay ....................................................................... 44 Delta de Kronecker ................................................. 44 Densidad espectral de potencia ............................... 58. E Ecualizador ............................................................. 34. F Fast Fourier Transform ........................................... 58. L. Part 1 – MPEG Surround ................................... 12 Part 2 – Spatial Audio Object Coding ................ 12 Part 3 – Unified speech and audio coding .......... 12 Part 4 – Dynamic Range Control ....................... 12. P Parámetros SAOC Donmix gains (DMG) ........................................ 14 Inter-object cross correlations (IOC) .................. 14 Object energies (NRG) ................................. 14, 31 Object level differences (OLD) .................... 14, 31 Peaking filter ........................................................... 40 Pulse-Code Modulation (PCM)............................... 22. R Reverb ..................................................................... 44. S Shelf filter High shelf filter .................................................. 38 Low shelf filter ................................................... 37 Spatial Audio Object Coding .................................. 14. Low Frequencies Enhacement .......................... 13, 54. W M MPEG-D. WAVE .................................................................... 22 Formato de cabecera .......................................... 22. 6.
(7) Andrés González Fornell. LISTA DE CONTENIDO Tabla 1 – Descripción de las distintas partes de MPEG-D ......................................................................... 12 Tabla 2 – Abreviaturas de canales .............................................................................................................. 13 Tabla 3 – Parámetros de codificación SAOC ............................................................................................. 14 Tabla 4 – Planteamiento de los objetivos del proyecto .............................................................................. 18 Tabla 5 – Caracteres reservados en nombres de ficheros de Unix ............................................................. 22 Tabla 6 – Formato de archivos wave .......................................................................................................... 22 Tabla 7 – Expresión 5 – Fragmento de código 5 – Comprobación de cabecera de archivos wave ............ 23 Tabla 8 – Cambios de nombre de función en sac_hybfilter........................................................................ 24 Tabla 9 – Cambios de nombre de función en sac_polyphase ..................................................................... 25 Tabla 10 – Variables del bitstream ............................................................................................................. 27 Tabla 11 – Valores del índice de la frecuencia de muestreo ....................................................................... 28 Tabla 12 – Valores del índice de la configuración del árbol ...................................................................... 28 Tabla 13 – Configuración de los canales de audio según la configuración del árbol ................................. 29 Tabla 14 – Valores del índice de la ganancia de los canales surround ....................................................... 29 Tabla 15 – Valores del índice de la ganancia de los canales LFE .............................................................. 29 Tabla 16 – Valores del índice de la ganancia del downmix ....................................................................... 30 Tabla 17 – Parámetros del efecto compresor .............................................................................................. 32 Tabla 18 – Bandas de frecuencia del ecualizador ....................................................................................... 34 Tabla 19 – Parámetros del efecto ecualizador ............................................................................................ 43 Tabla 20 – Parámetros del efecto reverb .................................................................................................... 46 Tabla 21 – Coeficientes del filtro feedforward comb filter de JCRev ........................................................ 47 Tabla 22 – Parámetros del filtro feedforward comb filter de JCRev .......................................................... 48 Tabla 23 – Coeficientes del filtro Schroeder allpass filter de JCRev ......................................................... 48 Tabla 24 – Parámetros del filtro Schroeder allpass filter de JCRev ........................................................... 49 Tabla 25 – Coeficientes del filtro Schroeder-Moorer lowpass feedback comb filter de Freeverb.............. 50 Tabla 26 – Parámetros del filtro Schroeder-Moorer lowpass feedback comb filter de Freeverb ............... 51 Tabla 27 – Coeficientes del filtro Schroeder diffusion allpass filter de Freeverb ...................................... 51 Tabla 28 – Parámetros del filtro Schroeder diffusion allpass filter de Freeverb ........................................ 52 Tabla 29 – Canales aceptados por parámetro del efecto panning ............................................................... 54 Tabla 30 – Parámetros del efecto panning .................................................................................................. 54 Tabla 31 – Formatos aceptados de valores de audio de la salida de audio del sistema .............................. 57 Tabla 32 – Posibles valores del parámetro Options de la clase AudioChart .............................................. 59 Tabla 33 – Resultados de las pruebas de rendimiento ................................................................................ 60 Tabla 34 – Requisitos de rendimiento de la aplicación .............................................................................. 63 Tabla 35 – Librerías usadas por la aplicación ............................................................................................ 65 Tabla 36 – Ruta de las librerías .................................................................................................................. 66 Tabla 37 – Lista de clases implementadas .................................................................................................. 67 Tabla 38 – Parámetros de la configuración de un canal en la interfaz de usuario ...................................... 70 Tabla 39 – Ventana de test de la interfaz de usuario .................................................................................. 71 Tabla 40 – Controles de la ventana de codificador de la interfaz de usuario.............................................. 72 Tabla 41 – Argumentos de la aplicación ejecutable vía línea de comandos ............................................... 74 Tabla 42 – Lista de etiquetas para el archivo de configuración del efecto ................................................. 75 Tabla 43 – Parámetros de los efectos implementados ................................................................................ 76 Tabla 44 – Tipos de mensaje de consola .................................................................................................... 77 Tabla 45 – Variables restringidas en la implementación de nuevos efectos ............................................... 79 Tabla 46 – Funciones restringidas en la implementación de nuevos efectos .............................................. 80 Tabla 47 – Lista de etiquetas para el control de interfaz de usuario de nuevos efectos .............................. 84 Tabla 48 – Lista de atributos de las etiquetas de control del control de interfaz de usuario de efectos ...... 85 Tabla 49 – Atributos permitidos por las etiquetas de control de la interfaz de usuario de efectos ............. 86 Tabla 50 – Lista de atributos de las etiquetas de representación del control de interfaz de usuario de efectos .................................................................................................................................................................... 87 Tabla 51 – Atributos permitidos por las etiquetas de representación de la interfaz de usuario de efectos . 88 Tabla 52 – Funciones heredadas de EffectBase.......................................................................................... 89 Tabla 53 – Funciones disponibles de Effect ............................................................................................... 90 Tabla 54 – Resolución de los objetivos del proyecto ................................................................................. 92. 7.
(8) Desarrollo de una plataforma de efectos sobre un decodificador SAC Tabla 55 – Lista de commits en el control de versiones Git ..................................................................... 100 Figura 1 – Tráfico de datos en Internet [1] ................................................................................................. 11 Figura 2 – Posición de los distintos canales de audio ................................................................................. 13 Figura 3 - Esquema de Spatial Audio Coding ............................................................................................ 14 Figura 4 - Esquema de Spatial Audio Object Coding ................................................................................. 14 Figura 5 – Diagrama del módulo de efectos de SAOC ............................................................................... 15 Figura 6 – Procesado de Insert effects del módulo de efectos de SAOC .................................................... 16 Figura 7 – Diagrama de módulos de la aplicación...................................................................................... 19 Figura 8 – Diagrama del gestor del proceso ............................................................................................... 20 Figura 9 – Buffers de entrada y salida ........................................................................................................ 21 Figura 10 – Ejemplo de conversión de campo de cabecera little endian a big endian ................................ 23 Figura 11 – Inclusión de la decodificación SAC ........................................................................................ 26 Figura 12 – Inclusión de la codificación SAC ............................................................................................ 26 Figura 13 – Ejemplo de función de compresión ......................................................................................... 32 Figura 14 – Diagrama de un ecualizador de arquitectura en cascada ......................................................... 35 Figura 15 – Diagrama de un ecualizador de arquitectura en paralelo ......................................................... 35 Figura 16 – Respuesta en frecuencia del filtro low shelf filter ................................................................... 37 Figura 17 – Respuesta en frecuencia del filtro high shelf filter .................................................................. 38 Figura 18 – Respuesta en frecuencia del filtro peaking filter ..................................................................... 40 Figura 19 – Respuesta en frecuencia del filtro total de ecualización sin compensación ............................ 41 Figura 20 – Respuesta en frecuencia del filtro total de ecualización con compensación ........................... 42 Figura 21 – Buffer cíclico de los filtros en el efecto reverb ....................................................................... 45 Figura 22 – Respuesta en frecuencia del filtro feedforward comb filter de JCRev .................................... 47 Figura 23 – Respuesta en frecuencia del filtro Schroeder allpass filter de JCRev ..................................... 48 Figura 24 – Diagrama de JCRev ................................................................................................................ 49 Figura 25 – Respuesta en frecuencia del filtro Schroeder-Moorer lowpass feedback comb filter de Freeverb .................................................................................................................................................................... 50 Figura 26 – Respuesta en frecuencia del filtro Schroeder diffusion allpass filter de Freeverb ................... 51 Figura 27 – Diagrama de Freeverb ............................................................................................................. 52 Figura 28 – Funciones realizadas en un ciclo del procesado en tiempo real .............................................. 55 Figura 29 – Buffer cíclico de los dispositivos de salida ............................................................................. 57 Figura 30 – Entornos de las pruebas de rendimiento .................................................................................. 60 Figura 31 – Resultados de las pruebas de rendimiento ............................................................................... 61 Figura 32 – Tiempo de ejecución de la aplicación ..................................................................................... 61 Figura 33 – Memoria máxima utilizada en la aplicación ............................................................................ 62 Figura 34 – Ventanas de la interfaz de usuario ........................................................................................... 68 Figura 35 – Formato de la ventana principal de la interfaz de usuario ....................................................... 68 Figura 36 – Ventana principal de la interfaz de usuario ............................................................................. 69 Figura 37 – Configuración de un canal en la interfaz de usuario ............................................................... 70 Figura 38 – Ventana de gráficos de señal de la interfaz de usuario ............................................................ 71 Figura 39 – Ventana de codificador de la interfaz de usuario .................................................................... 72 Figura 40 – Barra de opciones de la ventana principal de la interfaz de usuario ........................................ 73 Figura 41 – Formato de mensaje de consola .............................................................................................. 77 Figura 42 – Importación de los archivos de nuevo efecto en el proyecto ................................................... 81 Figura 43 – Importación del archivo de descripción del control de interfaz de usuario ............................. 82 Figura 44 – Modificaciones de las versiones en miles de líneas ................................................................ 97 Figura 45 – Número de publicaciones de versiones ................................................................................... 97 Expresión 1 – Nivel de energía de un objeto en un intervalo y banda de SAOC ....................................... 16 Expresión 2 – Nivel de energía máximo en un intervalo y banda de SAOC .............................................. 16 Expresión 3 – Diferencia de nivel de un objeto en un intervalo y banda de SAOC ................................... 16 Expresión 4 – Memoria total usada por los buffers de entrada y salida ..................................................... 21 Tabla 7 – Expresión 5 – Fragmento de código 5 – Comprobación de cabecera de archivos wave ............ 23 Expresión 6 – Tamaño de cabecera de archivos wave ................................................................................ 23 Expresión 7 – Nivel de energía de un canal en un intervalo ....................................................................... 31 Expresión 8 – Nivel de energía máximo en un intervalo ............................................................................ 31 Expresión 9 – Diferencia de nivel de un canal en un intervalo .................................................................. 31 Expresión 10 – Parámetro ratio de compresión .......................................................................................... 32. 8.
(9) Andrés González Fornell Expresión 11 – Parámetro ratio de expansión ............................................................................................ 32 Expresión 12 – Parámetro pendiente del compresor .................................................................................. 33 Expresión 13 – Función del compresor tipo downward ............................................................................. 33 Expresión 14 – Función del compresor tipo upward .................................................................................. 33 Expresión 15 – Ganancia de compresor tipo downward ............................................................................ 33 Expresión 16 – Ganancia de compresor tipo upward ................................................................................. 33 Expresión 17 – Factor de calidad de los filtros del ecualizador ................................................................. 34 Expresión 18 – Función total de transferencia de un ecualizador de arquitectura en cascada .................... 35 Expresión 19 – Función total de transferencia de un ecualizador de arquitectura en paralelo ................... 35 Expresión 20 – Función de transferencia de un filtro de segundo orden .................................................... 36 Expresión 21 – Ecuación de un filtro de segundo orden ............................................................................ 36 Expresión 22 – Función de transferencia del filtro analógico low shelf filter ............................................ 37 Expresión 23 – Relación entre la frecuencia de corte y frecuencia central de la primera banda ................ 37 Expresión 24 – Variables de sustitución para la conversión de un filtro analógico en digital .................... 37 Expresión 25 – Función de transferencia del filtro digital low shelf filter ................................................. 38 Expresión 26 - Coeficientes del filtro low shelf filter [8] ........................................................................... 38 Expresión 27 – Relación entre los filtros low shelf filter y high shelf filter ............................................... 39 Expresión 28 – Función de transferencia del filtro digital high shelf filter ................................................ 39 Expresión 29 - Coeficientes del filtro high shelf filter [8] .......................................................................... 39 Expresión 30 – Sustitución de variables de conversión paso bajo a paso banda ........................................ 40 Expresión 31 – Función de transferencia de un filtro peaking filter de primer orden ................................ 40 Expresión 32 – Función de transferencia del filtro peaking filter .............................................................. 40 Expresión 33 - Coeficientes del filtro peaking filter [9] ............................................................................. 41 Expresión 34 – Matriz de compensación de ganancias de ecualización ..................................................... 42 Expresión 35 – Ecuación de multitrayecto en señales acústicas ................................................................. 44 Expresión 36 – Respuesta al impulso de un sistema de reverberación ....................................................... 44 Expresión 37 – Función de transferencia de un sistema de reverberación ................................................. 44 Expresión 38 – Función de transferencia del filtro genérico utilizado en el efecto reverb ......................... 45 Expresión 39 – Ecuación del filtro genérico usado en el efecto reverb ...................................................... 45 Expresión 40 – Función de transferencia del filtro feedforward comb filter de JCRev.............................. 47 Expresión 41 – Función de transferencia del filtro Schroeder allpass filter de JCRev ............................... 48 Expresión 42 – Función de transferencia de JCRev ................................................................................... 49 Expresión 43 – Función de transferencia del filtro Schroeder-Moorer lowpass feedback comb filter de Freeverb ...................................................................................................................................................... 50 Expresión 44 – Función de transferencia del filtro Schroeder diffusion allpass filter de Freeverb ............ 51 Expresión 45 – Expresión general del efecto panning ................................................................................ 53 Expresión 46 – Salidas del efecto panning ................................................................................................. 53 Expresión 47 – Máximo número de muestras de señal de la función de envío por dispositivo de salida de audio ........................................................................................................................................................... 55 Expresión 48 – Periodo máximo del procesado en tiempo real .................................................................. 55 Expresión 49 – Tamaño máximo del buffer del dispositivo de salida de audio ......................................... 56 Expresión 50 – Densidad espectral de potencia de una señal discreta [9] .................................................. 58 Expresión 51 – Tiempo de ejecución medio............................................................................................... 62 Expresión 52 – Memoria máxima utilizada en media ................................................................................ 62 Expresión 53 – Señal de test de dispositivo de salida................................................................................. 70 Fragmento de código 1 – Extracción de una muestra de los buffers de entrada y salida ............................ 20 Fragmento de código 2 – Extracción de todas las muestras de un canal de los buffers de entrada y salida .................................................................................................................................................................... 20 Fragmento de código 3 – Inicialización de los buffers de entrada y salida ................................................ 21 Fragmento de código 4 – Liberación de los buffers de entrada y salida ..................................................... 21 Tabla 7 – Expresión 5 – Fragmento de código 5 – Comprobación de cabecera de archivos wave ............ 23 Fragmento de código 6 – Inclusión de la decodificación SAC en el gestor de procesos ............................ 26 Fragmento de código 7 – Inclusión de la codificación SAC en la interfaz de usuario ............................... 26 Fragmento de código 8 – Cálculo de parámetros SAOC ............................................................................ 31 Fragmento de código 9 – Filtro de enésimo orden ..................................................................................... 36 Fragmento de código 10 – Uso de índices en un buffer cíclico .................................................................. 46 Fragmento de código 11 – Filtro genérico usado en el efecto reverb ......................................................... 46 Fragmento de código 12 – Función de envío de datos a la salida de audio del sistema ............................. 56. 9.
(10) Desarrollo de una plataforma de efectos sobre un decodificador SAC Fragmento de código 13 – Función de recepción de datos de dispositivos de audio del sistema ............... 56 Fragmento de código 14 – Representación de número entero en complemento a 2 ................................... 58 Fragmento de código 15 – Recorte de la variable de densidad espectral de potencia ................................ 58 Fragmento de código 16 – Ejemplo de ejecución de la aplicación ejecutable vía línea de comandos ....... 75 Fragmento de código 17 – Ejemplo de archivo de configuración de efecto ............................................... 76 Fragmento de código 18 – Declaración de la clase de los nuevos efectos .................................................. 78 Fragmento de código 19 – Cabecera del constructor de los nuevos efectos ............................................... 78 Fragmento de código 20 – Código fuente del constructor de los nuevos efectos ....................................... 78 Fragmento de código 21 – Inclusión de la clase EffectBase de los nuevos efectos .................................... 78 Fragmento de código 22 – Cabecera de la función para aplicar el efecto de los nuevos efectos ................ 78 Fragmento de código 23 – Código fuente de la función para aplicar el efecto de los nuevos efectos ........ 78 Fragmento de código 24 – Cabecera de la función para asignar valores a las gráficas de los nuevos efectos .................................................................................................................................................................... 79 Fragmento de código 25 – Código fuente de la función para asignar valores a las gráficas de los nuevos efectos......................................................................................................................................................... 79 Fragmento de código 26 – Variable a devolver en la función para asignar valores a las gráficas de los nuevos efectos......................................................................................................................................................... 79 Fragmento de código 27 – Obtención del valor de un parámetro en la implementación de nuevos efectos .................................................................................................................................................................... 79 Fragmento de código 28 – Conversiones del valor de un parámetro en la implementación de nuevos efectos .................................................................................................................................................................... 80 Fragmento de código 29 – Ejemplo de descriptor XML de plantilla de efecto .......................................... 84 Fragmento de código 30 – Estructura de un elemento XML ...................................................................... 84 Fragmento de código 31 – Etiquetas de control en la descripción del control de interfaz de usuario ........ 86 Fragmento de código 32 – Etiquetas de representación en la descripción del control de interfaz de usuario .................................................................................................................................................................... 88. 10.
(11) Andrés González Fornell. 1. INTRODUCCIÓN En el mundo actual, donde el envío masivo de datos multimedia a escala mundial forma gran parte de la nueva economía digital y del entretenimiento en los hogares, la codificación de audio es absolutamente necesaria. La cantidad de información de audio que se transmite a través de Internet o redes de difusión multimedia se incrementa exponencialmente, lo que hace imprescindible optimizar este envío masivo. Esto impulsa la búsqueda de una compresión y codificación cada vez más eficiente. 120 EB/mes 7,0 EB/mes 12,0 EB/mes. 100 EB/mes 80 EB/mes 60 EB/mes 40 EB/mes 20 EB/mes. 6,1 EB/mes 5,5 EB/mes 29,3 EB/mes. 6,5 EB/mes 6,5 EB/mes 37,3 EB/mes. 6,8 EB/mes 7,8 EB/mes. 6,9 EB/mes 9,3 EB/mes. 6,9 EB/mes 10,8 EB/mes. 89,3 EB/mes 71,8 EB/mes. 46,7 EB/mes. 58,0 EB/mes. 0 EB/mes 2013. 2014 Vídeo / audio. 2015 Web / datos. 2016. 2017. 2018. Archivos. Figura 1 – Tráfico de datos en Internet [1]. Como se muestra en la gráfica, el vídeo y audio es el principal tipo de información que cursa Internet en los momentos actuales, y además el que mayor previsión de crecimiento tiene para el futuro. Una de las causas es la reciente explotación del vídeo y audio en streaming. El grupo Moving Pictures Experts Group fue creado en 1988 por la International Organization for Standardization y la International Electrotechnical Commission para estandarizar codificadores de compresión y transmisión de audio y vídeo. Son autores de los formatos de audio MPEG-2 Layer 3 [1] (conocido coloquialmente como MP3) y AAC [2]. Estos dos formatos son los formatos actualmente establecidos para la codificación de audio en la mayoría de los entornos de reproducción. Obviamente, la complejidad de los codificadores está sujeta a la tecnología del momento en que fueron concebidos, por lo que los estándares más recientes usarán técnicas cada vez más complejas contando con mayores recursos de computación. Esto además conlleva una compresión cada vez más eficiente que puede traducirse en una minimización de la capacidad de transmisión del audio o un aumento de la calidad del propio sonido mediante mayores tasas de muestreo, cuantización, canales, etc.. 11.
(12) Desarrollo de una plataforma de efectos sobre un decodificador SAC MPEG-D (ISO/IEC 23003), formalizada en 2007, es el estándar de codificación de audio más reciente. Actualmente se encuentra en desarrollo y contiene cuatro partes. Norma. Descripción. Estado. MPEG-D Part 1. MPEG Surround [3] define la codificación de compresión de audio de forma que la codificación tradicional de MPEG, en formato monocanal o estéreo, se pueda extender a multicanal.. International standard confirmed (90.93)1. MPEG-D Part 2. Spatial Audio Object Coding [4] amplía la codificación multicanal de MPEG Surround a la codificación por objetos audio. De esta forma el usuario es capaz de configurar parámetros de dichos objetos en decodificación y por tanto la experiencia del mismo se potencializa considerablemente.. International standard to be revised (90.92). MPEG-D Part 3. Unified speech and audio coding [5] se especializa en la codificación de audio de conversación y música mezclados, utilizando predicciones adaptadas para este tipo de situaciones, las cuales abarcan un amplio número de casos de uso.. International standard under periodical review (90.20). MPEG-D Part 4. Dynamic Range Control [6] especifica tecnologías para el volumen del audio y el control de rango dinámico.. International standard published (60.60). Tabla 1 – Descripción de las distintas partes de MPEG-D. En el siguiente apartado se describen las dos primeras partes en mayor profundidad, ya que optan a convertirse en futuros codificadores de amplio uso en entornos de multicanal.. 1. Código ISO/IEC del estado de un estándar. 12.
(13) Andrés González Fornell. 1.1. MPEG-SURROUND El estándar MPEG-Surround es un formato de audio que busca la codificación eficiente de señales de audio con varios canales, para conseguir una mejor experiencia de usuario. Los canales pueden ser definidos según la posición espacial que supuestamente tendrán en el entorno a la hora de la reproducción del audio. En la figura de la derecha se muestra una disposición estándar de todos los tipos de canales más importantes. Además, son detallados en Figura 2 – Posición de los distintos canales de audio la tabla de abajo. No todos los canales tienen por qué ser usados en una configuración dada, sino que dependiendo del número de canales se seleccionarán los que aporten mejor envolvente de audio. Abreviación. Descripción. L. Canal frontal izquierdo. LC. Canal frontal izquierdo central. LS. Canal izquierdo envolvente. LSR. Canal trasero izquierdo envolvente. R. Canal frontal derecho. RC. Canal frontal derecho central. RS. Canal derecho envolvente. RSR. Canal trasero derecho envolvente. C. Canal frontal central. LFE. Canal de mejora de bajas frecuencias Tabla 2 – Abreviaturas de canales. Su aplicación se centra en los sistemas de audio que ofrecen experiencias de percepción sonoras espacialmente sofisticadas. Dicha codificación, denominada Spatial Audio Coding, obtiene un conjunto de parámetros en función de la relación que tienen los distintos canales entre ellos. El envío de una o dos únicas señales (esto compatibiliza la codificación con los formatos existentes mono y estéreo), mezcla de todos los canales y junto con los parámetros estimados (transmitidos en un flujo bitstream), son suficientes para que el decodificador pueda reconstruir las salidas siguiendo la configuración específica de los altavoces. Aunque el número de salidas puede diferir al de entradas, una configuración de decodificación adecuada garantiza que la percepción espacial del usuario encaje con la deseada en la codificación.. 13.
(14) Desarrollo de una plataforma de efectos sobre un decodificador SAC. Figura 3 - Esquema de Spatial Audio Coding. Por otra parte, la segunda especificación de MPEG-D, Spatial Audio Objects Coding (ISO/IEC 23003-2), se basa en la codificación de objetos audio en lugar de canales. Cada objeto se suele corresponder con cada fuente (instrumentos, objetos físicos, conjunto de fuentes del mismo tipo, o incluso canales en su defecto), de forma que se pueda modificar parámetros de dichos objetos tras su decodificación, esto es, en la parte de usuario, por ejemplo, en el set-top box. Una vez que se han decodificado los distintos objetos audio se renderizan en base a la configuración de altavoces particular de cada usuario siguiendo la especificación MPEG Surround, por lo que la compatibilidad con el formato predecesor (Spatial Audio Coding) se mantiene.. Figura 4 - Esquema de Spatial Audio Object Coding. La codificación de los distintos objetos se realiza mediante la mezcla de todos ellos en un solo canal, junto con un previo análisis de cada uno relativo a todos ellos para extraer parámetros que permitan la descomposición de la mezcla de nuevo en cada uno de los objetos. A continuación, se describen los parámetros más importantes.. Object level differences (OLD). Diferencia de nivel del objeto respecto al objeto que tiene mayor nivel para un cierto tiempo y banda de frecuencia. Inter-object cross correlations (IOC). Correlación entre dos objetos para un cierto tiempo y banda de frecuencia. Downmix gains (DMG). Ganancia de los objetos aplicada por el codificador en el downmix. Object energies (NRG). Nivel de energía absoluta del objeto más ruidoso en un cierto tiempo y banda de frecuencia. Tabla 3 – Parámetros de codificación SAOC. 14.
(15) Andrés González Fornell. 1.2. MÓDULO DE EFECTOS La segunda especificación de MPEG-D, esto es, Spatial Audio Object Coding incluye un módulo para poder aplicar efectos al audio codificado. Este módulo se encuentra al principio del decodificador, formando parte del downmix processor. El diagrama siguiente describe el proceso de aplicar efectos a seleccionados canales del downmix, incluyéndose la aplicación del efecto en el elemento Insert effects.. Figura 5 – Diagrama del módulo de efectos de SAOC. Existen dos tipos de interfaces, mostradas en la figura anterior: . . Insert effects interface separa los objetos a los cuales se desea aplicar el efecto del resto de objetos del downmix y los vuelve a añadir al downmix tras su procesado, de forma que permite aplicar los efectos a los objetos de forma individual. Los objetos son seleccionados en el elemento Object splitter mediante el vector de separación (object split vector) y, tras el efecto, son recombinados en el elemento Object combiner. Send effects interface extrae el conjunto de objetos deseados para su procesado y los envía directamente a la salida decodificador para su suma con los objetos una vez decodificados, de forma que permite aplicar los efectos tanto de forma individual como a combinaciones lineales de ellos. En este caso, los objetos son extraídos en el elemento Object extractor a través de la matriz de extracción (object extract matrix).. Sin embargo, el proceso corre a cuenta del software del decodificador, por lo que el desarrollador de efectos no debe preocuparse de estas dos distinciones.. 15.
(16) Desarrollo de una plataforma de efectos sobre un decodificador SAC Al aplicar efectos, el parámetro Object level differences que indica la diferencia de nivel con el objeto con más nivel normalmente se ve afectado. Es por esto por lo que deberá modificarse tras el efecto, como se puede comprobar en el diagrama del elemento Insert effects que se muestra a continuación:. Figura 6 – Procesado de Insert effects del módulo de efectos de SAOC. Siendo 𝑥𝑐 (𝑛, 𝑓) la muestra de señal del objeto 𝑖, y en el instante 𝑛 y subbanda de frecuencia 𝑓, se puede calcular los siguientes parámetros, referidos a la banda 𝑚 e intervalo temporal 𝑙, como: 𝑁𝑅𝐺𝑖 (𝑙, 𝑚) =. 1 · ∑ ∑ 𝑥𝑖2 (𝑛, 𝑓) + 𝜀 𝐿·𝑀 𝑓∈𝑚 𝑛∈𝑙. Expresión 1 – Nivel de energía de un objeto en un intervalo y banda de SAOC. 𝑁𝑅𝐺𝑚𝑎𝑥 (𝑙, 𝑚) = max(𝑁𝑅𝐺𝑖 (𝑙, 𝑚)) 𝑖. Expresión 2 – Nivel de energía máximo en un intervalo y banda de SAOC. 𝑂𝐿𝐷𝑖 (𝑙, 𝑚) =. 𝑁𝑅𝐺𝑖 (𝑙, 𝑚) 𝑁𝑅𝐺𝑚𝑎𝑥 (𝑙, 𝑚). Expresión 3 – Diferencia de nivel de un objeto en un intervalo y banda de SAOC. La constante 𝜀 = 10−9 cumple únicamente la función de evitar divisiones entre 0 añadiendo un pequeño valor cualitativamente despreciable.. 16.
(17) Andrés González Fornell. 1.3. MOTIVACIÓN Todas las codificaciones explicadas anteriormente están principalmente dirigidas al entretenimiento audiovisual de alta calidad, que es donde la reproducción de más de 2 canales tiene más sentido. Aunque los codificadores de audio se han desarrollado con bastante fuerza en las últimas décadas, no existe aún un codificador establecido para más allá de los dos canales del estéreo, por lo que existe una necesidad a cubrir para este nicho de mercado. Cabe decir que se intenta mejorar en eficiencia de reproducción, por tanto, se busca que el empleo de información adicional ayude a reducir los recursos de transmisión del audio, esto es, tiempo y capacidad de transmisión. Por tanto, resultaría inútil el trabajo del desarrollo de la codificación si en el resultado final el decodificador no es capaz de realizar su trabajo en un tiempo factible. Por otro lado, la estandarización de este tipo de formatos es totalmente imprescindible, de forma que no se produzca tal variedad de formatos que ninguno de ellos ayude a extender un formato común entre todos los reproductores. Además, la codificación debe ser adaptable a una multitud de entornos y situaciones de reproducción con distintos recursos disponibles, para obtener buenos resultados en todos ellos. Dentro de los entornos a los que se dirige el proyecto, entretenimiento audiovisual de alta calidad, hay una serie de efectos de audio que resultan muy útiles en ciertas situaciones para mejorar la experiencia del espectador. Además, es interesante que el propio usuario pueda configurar a su antojo los parámetros de estos efectos, por lo que deberán ser aplicados en la decodificación del audio en lugar de la codificación, de forma que se produzca una auténtica personalización y adaptación del audio al entorno de reproducción o a la situación o gustos del propio oyente. Todo esto lo que se pretende conseguir con el codificador de Spatial Audio Object Coding. De hecho, esta personalización mencionada podría llegar incluso a la interacción con el usuario mediante la codificación de objetos audio en lugar de canales, de forma que el usuario pueda modificar directamente parámetros y/o efectos determinados en un sonido proveniente de una fuente específica, variando totalmente el audio fuente a su antojo, revolucionando la experiencia de usuario.. 17.
(18) Desarrollo de una plataforma de efectos sobre un decodificador SAC. 2. OBJETIVOS En la siguiente lista se proponen una serie de objetivos para cumplir las expectativas del proyecto y justificar el desarrollo del mismo. Finalmente, la resolución de los objetivos será estimada en el apartado Resolución de los objetivos del documento. Identificador. Descripción. Objetivo de proyecto 1. Como objetivo principal del proyecto se determina el desarrollo de un módulo software de efectos de audio de señales multicanal.. Objetivo de proyecto 2. Los parámetros del módulo de efectos deben coincidir con parámetros del módulo de efectos de Spatial Audio Objects Coding (SAOC) (véase Módulo de efectos) incluidos en el estándar ISO/IEC 23003-Part 2, pero cuyo software de referencia no está disponible en el momento de la realización del proyecto. El objetivo de forma amplia es compatibilizar todo el sistema para poder ser insertado en la interfaz de efectos de SAOC.. Objetivo de proyecto 3. La plataforma de efectos debe ser lo más abierta posible a futuras versiones y nuevos efectos, por lo que deberá permitir la implementación de nuevos efectos por cualquier desarrollador de la forma más sencilla posible.. Objetivo de proyecto 4. La interfaz de usuario debe ser clara y dirigida a un usuario de conocimiento medio, esto es, el usuario es capaz de entender algunos conceptos de procesado de audio, pero sin necesidad de comprender el proceso que se realiza.. Objetivo de proyecto 5. El sistema debe funcionar en tiempo real con suficiente precisión temporal. Dicho de otro modo, la latencia del sistema no deberá alterar en ningún caso la codificación del audio resultante.. Objetivo de proyecto 6. La interfaz de usuario debe quedar aislada del resto de código, de forma que sea posible la implementación de una aplicación sin interfaz de usuario o incluso su inserción en otro programa. Además, el código restante a la interfaz de usuario no debe depender de ninguna librería usada para crear la propia interfaz, de manera que sea posible su ejecución en cualquier sistema sin necesidad de instalar ninguna librería especial. Tabla 4 – Planteamiento de los objetivos del proyecto. 18.
(19) Andrés González Fornell. 3. DESARROLLO En este apartado se detalla el desarrollo del módulo de efectos compatible con MPEG-Surround (Objetivo de proyecto 1). Se han desarrollado dos programas simultáneamente, conforme al Objetivo de proyecto 6. Uno de ellos es ejecutado mediante la línea de comandos, formado únicamente por el núcleo de la aplicación, siendo el programa más sencillo y ligero de los dos. El otro programa incluye una interfaz de usuario para ser controlado por el usuario con más facilidad y comprobar analíticamente el procesado de señal. A lo largo del desarrollo del software del proyecto se han distinguido cuatro partes claramente diferenciadas: . . El gestor del proceso orquesta el resto de las partes. Es el encargado de llamar a las distintas funciones para llevar a cabo el proceso de la aplicación. Sus dos funciones principales, decode() y applyEffect(), dirigen la decodificación y la aplicación de efectos, respectivamente. Además, incluye algunas clases para llevar a cabo funciones durante la propia gestión del proceso (la gestión de ficheros, por ejemplo). El codificador de audio contiene las funciones de codificación y decodificación Spatial Audio Coding. El conjunto de efectos describe el procesado de efectos que se aplica a las señales. La parte de interfaz de usuario (sólo para el programa con interfaz de usuario) se corresponde con la implementación de la interfaz gráfica de usuario de la aplicación.. Figura 7 – Diagrama de módulos de la aplicación. Se ha intentado que todas ellas queden lo más aisladas posible entre ellas, de forma que en un hipotético caso en el que se desee ampliar, sustituir o realizar cualquier cambio en alguna de ellas se produzca el menor impacto posible sobre los otros dos módulos.. 19.
(20) Desarrollo de una plataforma de efectos sobre un decodificador SAC. 3.1. GESTOR DEL PROCESO Con el fin de aislar la interfaz de usuario del resto de la aplicación (Objetivo de proyecto 6) se requiere de una clase que gestione todo el proceso de tratamiento de las señales. Esta clase, definida como ProcessManager, llama a las funciones de procesado correspondientes y contiene información en forma de miembros de la clase para ser presentada al usuario, todo ello en cada una de las etapas del proceso. Las dos funciones principales que contiene esta clase son la función para decodificar el audio de entrada codificado (ProcessManager::decode()) y la función que aplica el efecto al audio decodificado (ProcessManager::applyEffect()).. Figura 8 – Diagrama del gestor del proceso. Cuando se decodifica, las clases main o SACEffects según el caso entrega al gestor del proceso la ruta del archivo de entrada y recibe la señal decodificada, entrada del efecto. Posteriormente, main/SACEffects envía los parámetros del efecto al gestor para que éste le devuelva la señal de salida del efecto. Tanto la señal de entrada como la de salida del efecto son obtenidas por main/SACEffects como un atributo de la clase ProcessManager. Las muestras de estas señales son almacenadas en un buffer en forma de array de dos dimensiones (índice de canal y de muestra). La extracción de una muestra de un canal específico se realiza de la siguiente forma sample = buffer[channel][n]; Fragmento de código 1 – Extracción de una muestra de los buffers de entrada y salida. Resulta conveniente que se agrupen con la dimensión de los canales jerárquicamente superior. Esto significa que se pueden obtener todas las muestras de un canal específico con el índice del canal únicamente, como se muestra en la siguiente línea: channelsamples = buffer[channel]; Fragmento de código 2 – Extracción de todas las muestras de un canal de los buffers de entrada y salida. 20.
(21) Andrés González Fornell A continuación, se muestra un diagrama explicativo de lo comentado anteriormente:. Figura 9 – Buffers de entrada y salida. La inicialización de los buffers debe inicializarse a través de la función std::malloc(), la cual reserva un espacio de memoria especificado. Puesto que las muestras se van a sobrescribir posteriormente, no es necesario inicializarlas con valor 0. float **buffer = (float **)std::malloc(channels * sizeof(float *)); for (int channel = 0; channel < channels; channel++) { buffer[channel] = (float *)std::malloc(samples * sizeof(float)); } Fragmento de código 3 – Inicialización de los buffers de entrada y salida. Tras el procesado de las señales o cuando se desee volver a realizar uno nuevo, hay que liberar el espacio de memoria reservado de la siguiente forma: for (int channel = 0; channel < channels; channel++) { std::free(buffer[channel]); } std::free(buffer); Fragmento de código 4 – Liberación de los buffers de entrada y salida. El espacio de memoria total utilizado viene dado por la siguiente expresión, donde 𝐶 es el número de canales, 𝑁 es el número de muestras, 𝐿𝑓𝑙𝑜𝑎𝑡 es el espacio que ocupa en memoria una variable float (depende de la arquitectura del sistema), 𝑇𝑆 es la duración de la señal y 𝑓𝑠 es la frecuencia de muestreo: 𝑀[B] = 2 · 𝐶 · 𝑁 · 𝐿𝑓𝑙𝑜𝑎𝑡 [B] = 2 · 𝐶 · 𝑇𝑆 · 𝑓𝑠 · 𝐿𝑓𝑙𝑜𝑎𝑡 [B] Expresión 4 – Memoria total usada por los buffers de entrada y salida. Dando unos valores comunes como ejemplo, da el siguiente resultado: 𝐶=6. 𝑇𝑆 = 60s. 𝑓𝑠 = 44100Hz. 𝑀 = 121.1MB. 21. 𝐿𝑓𝑙𝑜𝑎𝑡 = 32b = 4B.
(22) Desarrollo de una plataforma de efectos sobre un decodificador SAC. 3.1.1. GESTOR DE FICHEROS La entrada y salida de audio de las librerías de codificación y decodificación SAC dispensados por la ISO son ofrecidas a través de archivos de audio wave. Debido a esto, de cara a obtener los datos de entrada el gestor del proceso (véase Gestor del proceso), es necesario que éste se encargue de obtener dichos datos a partir del archivo de audio obtenido del decodificador SAC. Para ello se deberá gestionar adecuadamente la creación, reemplazo, lectura y escritura de archivos de audio. Hay que tener en cuenta que la inclusión de cualquiera de los siguientes caracteres en rutas de archivos está prohibida en sistemas operativos Unix: /. >. <. |. :. &. Tabla 5 – Caracteres reservados en nombres de ficheros de Unix. La clase que gestiona ficheros de audio wave es WAVFile, que es a su vez una subclase heredada de la clase File, diseñada para gestionar ficheros de cualquier tipo (usados en otras funcionalidades, como la gestión del fichero bitstream). La clase WAVFile, a diferencia de File, es capaz de obtener y escribir muestras de audio en un archivo wave. El contenedor de audio wave fue desarrollado por Microsoft e IBM en 1991, y es un archivo de audio que puede contener señales de audio comprimidas o sin comprimir. En este caso, los archivos decodificados están en formato Pulse-Code Modulation (sin compresión) y las muestras se cuantifican en 16 o 32 bits (en complemento a 2) tras una cabecera. La cabecera wave se describe en la siguiente tabla [7]. Posición2. Tamaño3. Endian. Campo. 0. 4. Big. ChunkID. 4. 4. Little. ChunkSize. 8. 4. Big. Format. 12. 4. Big. SubChunk1ID. 16. 4. Little. SubChunk1Size. 20. 2. Little. AudioFormat. 22. 2. Little. NumChannels. 24. 4. Little. SampleRate. 28. 4. Little. ByteRate. 32. 2. Little. BlockAlign. 34. 2. Little. BitsPerSample. 36. 4. Big. SubChunk2ID. 40. 4. Little. SubChunk2Size. 44. -. Little. Data. Datos audio. -. -. -. -. Información adicional. Descripción Cabecera de formato de archivo Formato de archivo Cabecera de formato de audio. Formato de audio (AudioFormat = 1 para el caso de Pulse-Code Modulation). Cabecera de datos. Tabla 6 – Formato de archivos wave. 2 3. En bytes. En bytes.. 22.
(23) Andrés González Fornell Los campos ordenados de forma que su primer número es el menos significativo (little endian), orden contrario al orden natural de notación numérica, se corresponden con campos numéricos, mientras que los que se encuentran en el orden natural de notación numérica de las personas (big endian) se corresponden con campos alfanuméricos. El orden de los campos no está a nivel de bit, sino de byte, es decir, para convertir de little endian a big endian simplemente hay que cambiar el orden de los bytes, aunque los mismos bytes ya están ordenados como big endian internamente a nivel de bit.. Figura 10 – Ejemplo de conversión de campo de cabecera little endian a big endian. Algunos campos se pueden calcular a partir de otros, por lo que se ha utilizado esta redundancia para comprobar que el formato del archivo cumple con estos cálculos y, por tanto, es correcto. 𝐶ℎ𝑘 ≥ 𝐶ℎ𝑘1 + 𝐶ℎ𝑘2 + 20B. ChunkSize >= Subchunk1Size + Subchunk2Size + 20. 𝑅 = 𝑓𝑠 · 𝑛𝑐 · 𝑅𝑠. ByteRate==SampleRate*NumChannels*BitsPerSample/8. 𝐵𝐴 = 𝑛𝑐 · 𝑅𝑠. BlockAlign == NumChannels*BitsPerSample/8. Tabla 7 – Expresión 5 – Fragmento de código 5 – Comprobación de cabecera de archivos wave. A la hora de localizar un instante temporal específico de señal dentro del archivo hay que tener en cuenta que la cabecera de datos ocupa el siguiente tamaño, valor el cual comienza el campo de datos. 𝐿ℎ𝑒𝑎𝑑𝑒𝑟 = 𝐿𝑐ℎ𝑘 + 𝐿𝑐ℎ𝑘1 + 𝐿𝑐ℎ𝑘2 = (12B) + (8B + 𝐶ℎ𝑘1 ) + (8B) = 𝐶ℎ𝑘1 + 28B Expresión 6 – Tamaño de cabecera de archivos wave. Por último, en caso de que el archivo de audio contenga más de un canal, las muestras de cada canal se encuentran entrelazadas a nivel de muestras, es decir, el campo de datos contiene la primera muestra del primer canal, luego la primera muestra del segundo canal, etc. Normalmente un archivo de audio contiene información adicional, como título o artista. Esta información se incluye tras todos los datos de muestra, al final del archivo. No se considera incluido en el campo de datos, por lo que no aumenta el valor de SubChunk2Size, aunque sí aumenta ChunkSize, ya que se encuentra en el propio archivo de audio. Esta es la razón por la que la primera de las expresiones de comprobación anteriores sea una desigualdad.. 23.
(24) Desarrollo de una plataforma de efectos sobre un decodificador SAC. 3.2. CODIFICADOR DE AUDIO Esta parte de la aplicación contiene el software de referencia de MPEG desarrollado por ISO/IEC que realizará la codificación y decodificación del audio según el estándar ISO/IEC 23003-1. El código del codificador y decodificador ha sido implementado como un programa final aislado. Por ello, es necesario modificar ligeramente el código para incrustarlo en la plataforma de efectos, según se irá explicando en los siguientes subapartados. Existen ambigüedades entre las funciones de los códigos de referencia del codificador y decodificador. Para evitar esto, se han renombrado las funciones incluidas en los archivos anteriores de la siguiente forma: Función original. Función nueva decodificador. Función nueva codificador. sacHybFilterCoef8. sacEncHybFilterCoef8. sacDecHybFilterCoef8. sacHybFilterCoef2. sacEncHybFilterCoef2. sacDecHybFilterCoef2. SacGetHybridSubbands. SacDecGetHybridSubban ds. SacGetQmfSubband. SacDecGetQmfSubband. SacGetParameterPhase. SacDecGetParameterPha se. SacInitAnaHybFilterb ank. SacEncInitAnaHybFilte rbank. SacDecInitAnaHybFilte rbank. SacInitSynHybFilterb ank. SacEncInitSynHybFilte rbank. SacDecInitSynHybFilte rbank. SacApplyAnaHybFilter bank. SacEncApplyAnaHybFilt erbank. SacDecApplyAnaHybFilt erbank. SacApplySynHybFilter bank. SacEncApplySynHybFilt erbank. SacDecApplySynHybFilt erbank. SacCloseAnaHybFilter bank. SacEncCloseAnaHybFilt erbank. SacDecCloseAnaHybFilt erbank. SacCloseSynHybFilter bank. SacEncCloseSynHybFilt erbank. SacDecCloseSynHybFilt erbank. Tabla 8 – Cambios de nombre de función en sac_hybfilter. 24.
(25) Andrés González Fornell. Función original. Función nueva codificador. SacInitSbrSynFilterb ank. SacEncInitSbrSynFilte rbank. SacCalculateSbrSynFi lterbank. SacEncCalculateSbrSyn Filterbank. Función nueva decodificador. SacInitSynFilterbank. SacDecInitSynFilterba nk. SacOpenSynFilterbank. SacDecOpenSynFilterba nk. SacCloseSynFilterban k. SacDecCloseSynFilterb ank. SacCalculateSynFilte rbank. SacDecCalculateSynFil terbank. SacInitAnaFilterbank. SacEncInitAnaFilterba nk. SacDecInitAnaFilterba nk. SacOpenAnaFilterbank. SacDecOpenAnaFilterba nk. SacCloseAnaFilterban k. SacDecCloseAnaFilterb ank. SacCalculateAnaFilte rbank. SacEncCalculateAnaFil terbank. SacGetFilterbankProt otype. SacDecCalculateAnaFil terbank SacDecGetFilterbankPr ototype. Tabla 9 – Cambios de nombre de función en sac_polyphase. 3.2.1. DECODIFICADOR SAC Para incrustar el decodificador de SAC se ha creado una librería estática a partir del código de referencia. Para compilar la librería se han utilizado todos los archivos de código fuente y cabeceras, exceptuando el archivo de código fuente spatial_frontend.c que contiene la función: int main(int argc, char *argv[]). Esta función sirve para ejecutar SAC como un programa aislado desde la línea de comandos, una vez que se ha compilado. En lugar de esta función, se ha creado un archivo de cabecera spatial_frontend.h para incluir únicamente las definiciones de variables globales utilizadas en spatial_frontend.c, pero sin incluir las funciones del archivo de código fuente. Para poder incluir código en lenguaje C en la interfaz, escrita en C++, es necesario aislar completamente ambas partes. Debido a esto, se ha creado un par-directorio (cabecera y código fuente) llamado sac_decoder.h y sac_decoder.c en lenguaje C, que contiene exclusivamente la función para llevar a cabo la decodificación, en otras palabras, que equivalga a la función main anterior. Además, sac_decoder.h incluye la referencia a spatial_frontend.h. De esta forma, se podría decir que este par de archivos intermedian entre la interfaz y el decodificador.. 25.
(26) Desarrollo de una plataforma de efectos sobre un decodificador SAC Una vez creado lo anterior, sólo falta incluir sac_decoder.h en la interfaz. Es aquí donde se realiza la conversión de lenguajes mediante la sentencia extern. Incluyendo las líneas siguientes en la cabecera del gestor de procesos (ProcessManager.h) se puede llamar sin problemas a la función contenida en sac_decoder.h para realizar la decodificación. extern “C” { #include sac_decoder.h } Fragmento de código 6 – Inclusión de la decodificación SAC en el gestor de procesos. Figura 11 – Inclusión de la decodificación SAC. 3.2.2. CODIFICADOR SAC La incrustación del codificador es similar a la del decodificador, salvo que se gestiona por la interfaz de usuario en vez del gestor de procesos debido a que únicamente se codifica audio cuando se utiliza la aplicación de interfaz de usuario. En este caso, no es necesario crear un archivo de cabecera en la librería SAC porque no se han definido tipos ni variables globales en sac_encoder.c de la librería, archivo que incluye la función main del codificador. Simplemente, las inclusiones de sac_encoder.c de la librería se han copiado al archivo creado sac_encoder.c del módulo SAC de la plataforma. extern “C” { #include sac_encoder.h } Fragmento de código 7 – Inclusión de la codificación SAC en la interfaz de usuario. Figura 12 – Inclusión de la codificación SAC. 26.
(27) Andrés González Fornell. 3.2.3. BITSTREAM El flujo bitstream es un flujo de datos adicional al flujo de audio mezclado que contiene los parámetros para la decodificación del audio, o lo que es lo mismo la extracción de los canales de la mezcla. A la hora de aplicar los efectos es conveniente tener en cuenta los siguientes datos provenientes de la configuración de la decodificación del audio: . . . . El campo de frecuencia de muestreo comprueba que la frecuencia de muestreo del archivo fuente a decodificar coincide con la frecuencia de muestreo del bitstream, señalada en la codificación del propio archivo, por lo que, siempre que los dos archivos (bitstream y archivo fuente de audio) hayan sido creados de la misma codificación, deben ser iguales. La configuración de los canales en la salida decodificación es ofrecida en la función applyEffect() para dar la posibilidad de aplicar los efectos de forma diferente según el tipo de canal. La ganancia de los canales surround indica la ganancia aplicada en la codificación para los canales LS, RS, LSR y RSR. Se usará para aplicar la misma ganancia justo antes del efecto, para luego volver a aplicar la ganancia inversa tras a la salida del efecto, restaurando el nivel de señal. De esta forma, el efecto será más prominente para estos canales de acuerdo con este parámetro. La ganancia de los canales LFE indica la ganancia aplicada en la codificación para los canales LFE. Se usará para aplicar la misma ganancia justo antes del efecto, para luego volver a aplicar la ganancia inversa tras a la salida del efecto, restaurando el nivel de señal. De esta forma, el efecto será más prominente para estos canales de acuerdo con este parámetro. La ganancia del downmix indica la ganancia aplicada en la codificación para todos los canales. En la versión actual de la aplicación este parámetro no es usado, pero se da la posibilidad de un uso posterior.. Estos parámetros son extraídos en las siguientes posiciones dentro del archivo bitstream: Posición4 8 125. Variable. Tamaño. fs_index. 4 bits. fs. 24 bits. Descripción Índice de frecuencia de muestreo [8] (véase Tabla 11) Frecuencia de muestreo. 22. treeconfig_index. 4 bits. Índice de la configuración del árbol (véase Tabla 12). 30. gain_surround_index. 3 bits. Índice de la ganancia de los canales surround. 33. gain_LFE_index. 3 bits. Índice de la ganancia de los canales LFE. 36. gain_downmix_index. 3 bits. Índice de la ganancia del downmix. Tabla 10 – Variables del bitstream. 4 5. Posición en bits de la variable dentro del bitstream. Variable adicional. Si es requerida se deberá sumar su longitud a las posiciones de las variables posteriores.. 27.
(28) Desarrollo de una plataforma de efectos sobre un decodificador SAC Puesto que los valores de los parámetros no se indican directamente, sino a través de valores indexados, la correspondencia de valor de todos los parámetros queda recogida en las siguientes tablas: . fs_index [8]. Valor. Correspondencia 0x0. fs = 96000. 0x1. fs = 88200. 0x2. fs = 64000. 0x3. fs = 48000. 0x4. fs = 44100. 0x5. fs = 32000. 0x6. fs = 24000. 0x7. fs = 22050. 0x8. fs = 16000. 0x9. fs = 12000. 0xA. fs = 11025. 0xB. fs = 8000. 0xC. fs = 7350. 0xD. Reservado. 0XE. Reservado. 0xF. La frecuencia de muestreo se indica directamente en fs Tabla 11 – Valores del índice de la frecuencia de muestreo. . treeconfig_index [3]. Valor. Correspondencia 0x0. treeconfig = 5151. 0x1. treeconfig = 5152. 0x2. treeconfig = 525. 0x3. treeconfig = 7271. 0x4. treeconfig = 7272. 0x5. treeconfig = 7571. 0x6. treeconfig = 7572. >= 0X7. Reservado Tabla 12 – Valores del índice de la configuración del árbol. 28.
(29) Andrés González Fornell Este parámetro indica parámetros relacionados con la configuración funcional de la codificación del audio. Entre otros muchos, uno de estos parámetros es la configuración de los canales del audio, que viene dada según se muestra en la tabla: treeconfig. LS. L. 5151. 4. 0. 5152. 1. 525 7271 7272. LSR. 1. 7571 7572. 1. LC. C. R. RS. 2. 1. 5. 3. 0. 4. 2. 3. 5. 1. 0. 4. 2. 3. 5. 2. 0. 3. 5. 7. 2. 0. 3. 5. 2. 0. 3. 5. 2. 0. 3. 5. 1. 6. RC. 4. 6 1. 6 6. 4. RSR. Tabla 13 – Configuración de los canales de audio según la configuración del árbol. . gain_surround_index [3]. Valor. Correspondencia 0x0. gain_surround = pow(2, 0). 0x1. gain_surround = pow(2, 0.5). 0x2. gain_surround = pow(2, 1). 0x3. gain_surround = pow(2, 1.5). 0x4. gain_surround = pow(2, 2). >= 0X7. Reservado Tabla 14 – Valores del índice de la ganancia de los canales surround. . gain_LFE_index [3]. Valor. Correspondencia 0x0. gain_LFE = pow(10, 0). 0x1. gain_LFE = pow(10, 0.5). 0x2. gain_LFE = pow(10, 1). 0x3. gain_LFE = pow(10, 1.5). 0x4. gain_LFE = pow(10, 2). >= 0X7. Reservado Tabla 15 – Valores del índice de la ganancia de los canales LFE. 29. 4. LFE. 7 7. 4. 7.
Documento similar
“Las comunicaciones de masas no constituyen normalmente causa necesaria y suficiente de efectos sobre el público, sino que actúan dentro y a través de un conjunto de factores
Entre nosotros anda un escritor de cosas de filología, paisano de Costa, que no deja de tener ingenio y garbo; pero cuyas obras tienen de todo menos de ciencia, y aun
Autores: Yaíma Nodarse Valdés y Lien Muguercia Torres 3 Como resultado de este trabajo se pretende obtener un módulo que contenga los efectos de iluminación y
En conclusión, respetando las limitaciones del método de evaluación de grasa corporal y el tamaño muestral, se observa que para mujeres de edad avanzada posmenopáusicas, sin
In conclusion, despite the limitations of the method used to evaluate fat and the sample size, this study shows that in elderly postmenopausal women without hormone
Esta es la etapa principal de este módulo, ya que es la que lleva a cabo el paso de la señal en lógica TTL procedente de los módulos de cuenta de cada cilindro, a la señal de
El dispositivo emisor requiere de un controlador NodeMCU y un controlador Arduino Nano, la interfaz de audio y, aunque es opcional para su funcionamiento, un módulo sensorial, en
IMPLICAC~N M LA Na,K-ATPasa DEL -BULO PROXlMAL. EN LA NEFROTOXIClDAD