FichaProyecto

Anuncio
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
Descargar