Nombre del proyecto Port Interface For Analog Sound. (PIFAS) Participantes Miriam Pastrana Brito Víctor Manuel Rodríguez Bahena Erendira Victoria Sánchez Montes de Oca 376401 378087 377891 ITE IMT ITE 5to semestre 5to semestre 4to semestre Objetivo general del proyecto Digitalizar voz haciendo interfaz con el micrófono y la tarjeta de sonido. Objetivos específicos del proyecto - - Capturar la voz del usuario a través del micrófono de la computadora: obtener las señales analógicas que serán digitalizadas. Digitalizar la voz a través de la tarjeta de sonido: usar la tarjeta de sonido como medio para digitalizar las señales analógicas introducidas por el usuario. Generar un archivo de sonido: crear un archivo .wav para reproducir el sonido. Tema Digitalización de voz. Investigación del tema Antes de que la computadora pueda grabar, manipular y reproducir sonido, debe transformarse el sonido de una forma analógica audible a una forma digital aceptable por la computadora, mediante un proceso denominado conversión analógica - digital (ADC). Cuando se quiere escuchar el resultado, el proceso de conversión digital-analógica (DAC) transforma de nuevo los bytes de sonido a una señal eléctrica analógica que emiten las bocinas. El proceso comienza con la captura de la voz haciendo uso del micrófono. Cuando las ondas de sonido llegan al micrófono, el movimiento mecánico se traduce en una señal eléctrica. Esta señal se denomina señal analógica porque es una señal continua en el tiempo, análoga al sonido original. Una vez capturadas las señales analógicas, empieza el proceso de conversión analógica digital. Es decir, dada una señal analógica, se van tomando valores discretos de su amplitud a intervalos de tiempo pequeños. A estos valores obtenidos se les asigna un valor digital que la computadora puede entender y procesar. La conversión analógica digital es llevada a cabo por la tarjeta de sonido, que será explicada brevemente en párrafos posteriores. Por último, para reproducir el sonido digitalizado, se hace uso del proceso de conversión digital-analógica. Este proceso pone los valores de las muestras en el mismo orden que fueron tomados y unos filtros electrónicos se encargan de convertir esa señal resultante de valores discretos en una señal analógica. Una tarjeta de sonido es una tarjeta de expansión para computadoras que permite la entrada y salida de audio bajo el control de un programa. La mayoría de tarjetas de sonido implementan cuatro funciones básicas: reproducción, captura, síntesis y procesamiento de sonido. En primer lugar, la tarjeta debe ser capaz de reproducir audio, ya sea desde lectores de CD o DVD, o desde ficheros almacenados en el disco duro, usando formatos estándares como WAV, MP3 y MIDI. Además, la tarjeta debe ser capaz de realizar el proceso inverso, es decir, almacenar audio procedente de una fuente externa. Esto incluye capturar sonidos mediante un micrófono, o introducir sonido desde cualquier otra fuente (instrumentos musicales, reproductores de cintas, etc.). La información queda almacenada, generalmente, en el disco duro del PC en forma de ficheros. La tercera función básica se centra en la síntesis de audio, o lo que es lo mismo, la creación de sonido. La síntesis de audio exige capacidad de procesamiento a la tarjeta. Finalmente, otra importante función es el procesamiento de sonidos existentes (generalmente almacenados en el disco duro como archivos). De nuevo, la tarjeta de sonido aplica su capacidad de procesamiento, ahorrando todo ese trabajo a la CPU. Las tarjetas de sonido se dividen en dos tipos: half duplex y full duplex. Las tarjetas full duplex son capaces de producir (operación de salida) y capturar (operación de entrada) señales de audio de forma simultánea. En cambio, las tarjetas half duplex sólo pueden realizar una de estas operaciones cada vez. La tarjeta de sonido está formada por tres subsistemas: el convertidor analógico/digital (CAD), el procesador digital de señales (DSP, Digital Signal Processor) y el convertidor digital/analógico (CDA). El CAD actúa como interfaz con el mundo exterior del PC para la entrada de audio. En el exterior del PC, el sonido se encuentra en forma de ondas de presión (variaciones de presión en el espacio y en el tiempo). Gracias a un transductor primario, que suele ser un micrófono, dichas ondas de presión se convierten en señales eléctricas (variaciones de tensión en el tiempo). El CAD es capaz de tomar muestras de tensión sobre dichas señales, y asignar valores digitales (números binarios) a cada muestra. Con ello, se consigue una representación del sonido en formato digital que, ahora sí, puede ser tratado por un procesador. El uso de un micrófono no es imprescindible, ya que cualquier fuente de audio como un reproductor de cintas o un receptor de radio entrega el sonido -directamente- en forma de señales eléctricas. El CDA realiza el proceso inverso, implementando la interfaz entre el PC y el mundo exterior para la salida de audio. El CDA toma una secuencia de datos digitales, y transforma dichos datos en niveles de tensión, creando una señal eléctrica analógica. Empleando después un transductor (típicamente unas bocinas), las señales eléctricas se convierten en ondas de presión, audibles por el ser humano. Entre el CAD y el CDA se encuentra el DSP, que dota a la tarjeta de capacidad de procesamiento. El DSP es un procesador especializado en el tratamiento de señales digitales, para lo cual es necesaria una elevada capacidad de cálculo, que no es posible obtener mediante procesadores convencionales. Sus características son similares a las de un procesador de propósito general pero, en cambio, su arquitectura es diferente (típicamente Hardvard). Además, la organización de la memoria es también diferente. La principal diferencia se centra en la unidad aritmética, que ofrece procesamiento paralelo e incluye unidades especializadas (multiplicadores, etc.). El resultado general es una velocidad de trabajo de 2 a 3 veces mayor (los DSP son capaces de realizar millones de operaciones en coma flotante cada segundo). En conclusión, el DSP de la tarjeta de sonido es el centro de tratamiento de audio del PC (por ejemplo, la aplicación de efectos como los ecos se deben a dicho componente). La tarjeta de sonido tiene adjudicados un rango de puertos sobre los que puede funcionar, teniendo en cuenta no interaccionar con otros elementos. De todos los puertos de la tarjeta de sonido el más importante es el puerto BASE. Este es el que sirve como referencia a los demás y el que se puede configurar. Así se tiene el siguiente rango de posibles puertos a elegir: 210h, 220h, 234h, 240h, 250h, y 260h. Desde este puerto parten los otros puertos de entrada y salida de la tarjeta, los cuales están siempre a la misma distancia numérica del puerto base. Con ello, y sólo cambiando el BASE, cambian los demás. Por ejemplo, los puertos del DSP (Digital Sound Procesor) están siempre a la misma distancia del puerto base de entrada y salida (I/O port, base address). En la siguiente tabla de puertos del DSP podemos ver esto último: 02x6h DSP Reset Port Sólo escritura 02xAh DSP Read Data Port Sólo lectura 02xCh DSP Write Data, Command Escritura 02xCh DSP Write Buffer Status (bit 7) Lectura 02xEh DSP Data Available Status (bit Sólo lectura 7) Hay dos modos de funcionamiento que podemos darle a la tarjeta de sonido: Temporizador del PC (Timer) Acceso directo a memoria (DMA) Generación de Sonido por el Temporizador Toda computadora dispone de un temporizador (timer), el cual está ubicado en una interrupción de usuario. Esta interrupción es llamada por la computadora 18,2 veces por segundo y sirve para mantener la fecha, la hora del sistema y otros servicios internos. La generación de sonido vía temporizador se basa en los siguientes pasos: - Crear una rutina que envíe un byte de un puntero al puerto de escritura de la tarjeta de sonido, de esta manera cada vez que se llame al timer (18,2 veces por segundo) se enviará sólo un byte del puntero que contiene el sonido digitalizado (un número de 8 bits). - Reprogramar el temporizador para que se ejecute más de 18,2 veces, por ejemplo: 22000 veces. Este valor representa el número de bytes que queremos mandar en un segundo. A este número lo llamamos frecuencia de muestreo, expresado en Hertz. Por lo tanto, si mandamos bytes a una frecuencia de 22000 bytes por segundo, nuestro sonido sonará a 22000Hz (22 Khz). - Repetir la rutina en la interrupción 8h, de esta manera se ejecutará la rutina 22000 veces. Si se repite una rutina del temporizador, tantas veces por segundo, el temporizador interrumpe a la CPU para realizar una operación extremadamente lenta como es enviar un byte al puerto de la tarjeta de sonido. Generación de Sonido a través del DMA Como se ha visto, la técnica anterior es válida si, por ejemplo, se tiene una pantalla fija y se quiere que a la vez suene un programa de muestra. Pero en el momento en que se quieren hacer dos cosas que necesiten al procesador al mismo tiempo, la técnica del timer no vale, sencillamente porque no es óptima. Por esto, se necesita un sistema por el cual se libere a la CPU de todo el trabajo, permitiendo una generación de sonido totalmente independiente de la computadora. Las transferencias por DMA (Direct Memory Access) permiten liberar a la CPU de todo el trabajo. Esto es posible porque la tarjeta de sonido incorpora un chip DSP que trabaja por sí solo. Para transmitir un bloque de memoria de una dirección a otra mediante DMA, se debe decir al DMA la "página" de memoria y el "desplazamiento" de memoria donde se encuentra el bloque a mover. Se debe configurar el DSP para que vaya leyendo los bytes que le llegan por DMA y los vaya interpretando por su DAC. De esta manera se escuchará el sonido. Pero antes de hacer esto, se debe decir al DSP la frecuencia de muestreo a la que debe reproducir el sonido. No basta con decirle la frecuencia en Hertz, sino que se debe usar la fórmula: FrecuenciaDSP = 256- (1000000-FrecuenciaHertzios) Luego, se le envía este valor resultante al DSP. Para escribir cualquier tipo de valor en el DSP se usan los puertos de la tarjeta de sonido. Creación de un archivo de sonido Los archivos VOC fueron creados por Creative Labs como un medio para almacenar los sonidos digitalizados y posteriormente poder interpretarlos cómodamente, independientemente del método escogido. La calidad de la digitalización dependerá del número de muestras por segundo que tomemos. A mayor calidad, mayor número de muestras, por lo tanto mayor número de puntos (valores) y espacio necesario para almacenarlo. Los archivos .VOC se hallan divididos en 2 bloques principales: cabecera y datos. El bloque de cabecera es pequeño, y su contenido es básicamente informativo. El bloque de datos, por el contrario, incluye el sonido digitalizado y otros datos de interés. Los primeros 20 bytes del archivo contienen la descripción del tipo de archivo; su contenido deber ser la cadena "Creative Voice File", 1Ah. Los dos siguientes bytes contienen la posición de comienzo, dentro del archivo, del bloque de datos: su valor suele ser 001Ah. Dos bytes más nos proporcionan el número de versión del formato VOC. Los dos últimos bytes contienen el código de identificación del archivo. El bloque de datos se divide a su vez en múltiples sub-bloques. El primer byte de cada sub-bloque indica el tipo de datos contenido en dicho bloque, y los siguientes tres bytes informan de la longitud del sub-bloque actual. Tipos de sub- bloques: Tipo 0: Terminador. Indica que no existen más bloques después de él, y por tanto la reproducción del archivo acaba. Tipo 1: Datos de voz. Contiene los datos de la digitalización en sí, e incorpora una pequeña cabecera que informa al driver de la frecuencia de muestreo y del método de compresión usado en este bloque (aquí se usan los que están sin comprimir). Tipo 2: Continuación de voz. Continúa con los datos de voz del último subbloque. Tipo 3: Silencio. Define un período de silencio en la digitalización. La longitud del período se incluye en los dos bytes siguientes a la longitud del bloque, y viene dada en unidades de ciclos de muestreo. Tipo 4: Marca. Se trata de un bloque especial que define una marca en el fichero. Dicha marca puede ser usada para informar a nuestro programa de eventos especiales en el archivo de voz; los valores 0 y FFFFh están reservados para el driver de la SB. Tipo 5: Texto ASCII. En este bloque se puede incluir cualquier texto que pueda ser de ayuda o información, como nombre del creador, o comentarios sobre el fichero. Tipo 6: Bucle de repetición. Se informa al driver, del comienzo de un bucle que repite el sonido contenido entre el siguiente bloque de datos y el siguiente bloque de final de bucle. Tipo 7: Fin de bucle de repetición. Indica el fin, del bucle de repetición, explicado en el tipo anterior. Tipo 8: Bloque extendido. Incluye atributos del siguiente sub-bloque de datos, como frecuencia de muestreo, compresión, entre otros Identificar necesidades de ensamblador Las interrupciones son directas sobre el DSP, los datos son cargados a través del puerto de la tarjeta de sonido, por acceso directo a memoria, las instrucciones nuevas a utilizar son: in registro,registro out registro,registro mov registro,byte ptr valor El set de instrucciones del DSP se puede consultar en las referencias. Cronograma de trabajo 7-13 de Octubre INVESTIGAR MODO DE OPERACIÓN 14-20 de Octubre 21-27 de Octubre PRUEBA DEL MODO DE OPERACIÓN 28 de Octubre 3 de Noviembre ADQUISICIÓN DE SONIDO CREACIÓN DE UN ARCHIVO .WAV 4-10 de Noviembre IMPLEMENTACIÓN Referencias Creative Technology Ltd. (1993-1996) Sound Blaster Series Hardware Programming Guide. Recuperado el 9 de octubre de 2007. Desde: http://www.stud.fh-hannover.de/~heineman/extern/ctsbhwpg.pdf Suárez José Antonio. Macedonia Magazine. Programación de la Sound Blaster (I).Recuperado el 9 de octubre de 2007. Desde: http://macedoniamagazine.frodrig.com/multi9.htm Terra. Audio en el PC. (2007) Recuperado el 9 de octubre de 2007. Desde: http://www.terra.es/tecnologia/articulo/html/tec3721.htm