Está en la página 1de 97

Universidad Tecnolgica Nacional Facultad Regional San Nicols

Tcnicas Digitales III Proyecto Integrador

Analizador de espectros

Integrantes: Benitez Pablo A. Carranza Rodrigo Curaratti Nazareno J. Docentes: Ing. Poblete, Felipe. Sr. Gonzlez, Mariano.

Julio de 2006

ndice General
Captulo 1 Introduccin general >Introduccin........................................................................................................... >Obtencin de datos y anlisis................................................................................ >Etapas para el anlisis............................................................................................ > Etapa de entrada..................................................................................... > Adaptador de nivel................................................................................. > Adquisicin............................................................................................. > Medicin................................................................................................. >Memoria.................................................................................................. >Presentacin............................................................................................ >Diagrama en bloques............................................................................................. >Procesamiento de seales...................................................................................... >Aplicaciones comerciales...................................................................................... >Consultas................................................................................................................ >Materias Integradas ............................................................................................. Captulo 2 Sonido >Introduccin........................................................................................................... >Caractersticas fsicas............................................................................................ >Frecuencia................................................................................................ >Amplitud y volumen................................................................................ >Decibelio dB............................................................................................ >Medicin del nivel sonoro....................................................................... >El dBA o la ponderacin -A-................................................................... >Suma de niveles de sonido. .................... .................... .................... ..... >Presin Acstica y el Nivel de Presin Acstica. .................... .............. >Intensidad fisiolgica de un sonido. .................... .................... ............. >Intensidad Acstica y el Nivel de Intensidad Acstica. .................... .... >Potencia Acstica y Nivel de Potencia Acstica. .................... .............. >Tiempo de Reverberacin. .................... .................... .................... ....... >Coeficiente de Absorcin de un material. .................... .................... .... >Timbre. .................... .................... .................... .................... ............... >Velocidad del sonido. .................... .................... .................... .............. >Refraccin, reflexin e interferencia. .................... .................... ........... >Eco, Reverberacin y Resonancia. .................... .................... ............... >Altura (tono) de un sonido. .................... .................... .................... ...... >Sensacin de tono. .................... .................... .................... ................... >El efecto Doppler. .................... .................... .................... .................... >Tres tipos de sonido importantes. .................... .................... ................. >Octava, media octava y tercio de octava. .................... .................... ..... >Filtro de ancho de banda constante. .................... .................... ............. >Filtro de ancho de banda proporcional. .................... .................... ........ >Disminucin espacial del nivel sonoro. .................... .................... ........ >Micrfono. .................... .................... .................... .................... .................... ... >Bibliografa. ..........................................................................................................

I 1. I 1. I 1. I 1. I 1. I 1. I 1. I 1. I 1. I 2. I 2. I 3. I 3. I 3.

II 1. II 2. II 2. II 2. II 3. II 3. II 4. II 4. II 4. II 4. II 5. II 5. II 5. II 5. II 6. II 6. II 6. II 7. II 7. II 8. II 8. II 8. II 9. II 9. II 10. II 11. II 11. II 12.

Captulo 3 Ruido >Introduccin. ........ ........ ........ ........ ........ ........ ........ ........ ........ ........ ........ ...... III 1. >Ruido rosa. ........ ........ ........ ........ ........ ........ ........ ........ ........ ........ ........ ........ III 1.

>Ruido blanco. ........ ........ ........ ........ ........ ........ ........ ........ ........ ........ ........ ..... >Contaminacin acstica. ........ ........ ........ ........ ........ ........ ........ ........ ........ ...... >Clasificacin. ........ ........ ........ ........ ........ ........ ........ ........ ........ ........ ........ ..... >Bibliografa. ......................................................................................................... Captulo 4 Muestreo de seales >Introduccin. ........ ........ ........ ........ ........ ........ ........ ........ ........ ........ ........ ...... >Representacin de una seal de tiempo continuo mediante sus muestras. ........ .. >Muestreo con tren de impulsos. ........ ........ ........ ........ ........ ........ ........ ........ .... >Muestreo con retenedor de orden cero. ........ ........ ........ ........ ........ ........ ........ . >Bibliografa. ......................................................................................................... >Materia Integrada.................................................................................................. Captulo 5 Conversin de seales analgicas a digitales. >Introduccin. .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... >Digitalizacin del sonido: Velocidad de Muestreo y Cuantizacin. .... .... .... .... >Ventajas del audio digital. .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .. >Pasaje de una seal elctrica a una seal digital. .... .... .... .... .... .... .... .... .... .... >Cantidad de sub intervalos en que se divide el rango til de la seal. .... .... .... .. >Resolucin de un sistema de audio digital.... .... .... .... .... .... .... .... .... .... .... .... . >Frecuencia de muestreo. .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .. >Reconstruccin de la seal digitalizada. .... .... .... .... .... .... .... .... .... .... .... .... ... >Relacin entre el ruido de digitalizacin y la resolucin. .... .... .... .... .... .... .... .. >Dither. .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... ..... >Dither digital. .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... >Reproduccin....... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .. >Procesamiento digital. .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... ..... >Bibliografa. ......................................................................................................... >Materia Integrada.................................................................................................. Captulo6 Sntesis del sonido >Introduccin. .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... >Sintetizadores. .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... ... >Osciladores. .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .. >Filtros. .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... . >Amplificadores. .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... . >Procesamiento del sonido digitalizado. .... .... .... .... .... .... .... .... .... .... .... .... .... >Aumento o disminucin de volumen. .... .... .... .... .... .... .... .... .... .... ... >Filtrado. .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... ... >Mezcla. .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... >Cortado y pegado. .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... ... >Procesamiento digital de seales. .... .... .... .... .... .... .... .... .... .... .... .... .... .... ... >Filtro pasa altos. .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... . >Filtro pasa bajos. .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... >Eco. .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... >Software de Edicin y reproduccin.... .... .... .... .... .... .... .... .... .... .... .... .... .... >Bibliografa. .........................................................................................................

III 1. III 1. III 2. III 2.

IV 1. IV 1. IV 2. IV 4. IV 4. IV 4.

V 1. V 1. V 2. V 2. V 2. V 2. V 3. V 3. V 3. V 4. V 4. V 4. V 4. V 5. V 5.

VI 1. VI 1. VI 1. VI 1. VI 1. VI 1. VI 1. VI 1. VI 1. VI 2 . VI 2. VI 2. VI 2. VI 2. VI 2. VI 2.

Captulo7 Tarjeta de sonido >Introduccin. .................. .................. .................. .................. .................. .......... VII 1. >Componentes fundamentales de una placa de sonido.................. .................. ..... VII 1.

>El muestreo.................. .................. .................. .................. .................. >El tamao de la muestra.................. .................. .................. ................. >MIDI.................. .................. .................. .................. .................. ......... >Procesadores multi-propsito de seales digitales.................. ............... >Efectos de sonido 3D.................. .................. .................. .................. ... >Entrada y salida digital.................. .................. .................. ................... >Nmero de Bits.................. .................. .................. .................. ............ >Nmero de voces.................. .................. .................. .................. ......... >Calidad del sonido KHz.................. .................. .................. ............... >Tipo de sntesis MIDI.................. .................. .................. .................. .. >Los parlantes.................. .................. .................. .................. ................ >Otras Utilidades.................. .................. .................. .................. ........... >Entradas salidas. Tipos de conectores.................. .................. .................. .......... >Caractersticas tcnicas e Informacin de la placa de sonido utilizada............... >Bibliografa, Materia integrada.............................................................................. Captulo8 DSP (Digital Signal Procesor) >Introduccin. ............. >Procesador de sonido digital (DSP). ......... >El Chip sintetizador de FM. .......... >Programacin del puerto MIDI para I/O. ......... >El modo SB-MIDI. ......... >El modo MPU-401. ............ >Bibliografa, Materia Integrada............................................................................. Captulo9 Formatos digitales >Introduccin. . >Almacenamiento. .. >Sonido Audio Digital. . >Formato de archivo: WAVE................................................................................. >Introduccin. . >Especificacin RIFF. ..................... >Ficheros de sonido WAVE. ... >Tipo de compresin utilizado por WAVE. >Formato de los ficheros de Sonido WAV. . >Lectura y grabacin de archivos WAVE bajo Windows. .. >Anlisis de frecuencia. ................... Captulo 10 MCI de Windows >Introduccin. . >Comandos MCI Strings y Messages. . >Comandos Strings. .. >Comandos Messages. .. >Posibilidades de audio de las cadenas de comandos. . >Clasificacin de los comandos MCI. >Comandos del sistema . .. >Los Comandos requeridos. . >Los Comandos bsicos. .. >Los Comandos extendidos. . >Funciones MCI, Macros, y Mensajes. .. >Descripcin de la macro >Espera, Notificacin, y Banderas Prueba

VII 1. VII 1. VII 1. VII 1. VII 2. VII 2. VII 2. VII 2. VII 2. VII 2. VII 2. VII 3. VII 4. VII 5. VII 5.

VIII 1. VIII 1. VIII 2. VIII 4. VIII 4. VIII 4. VIII 5.

IX 1. IX 1. IX 1. IX 3. IX 3. IX 3. IX 3. IX 3. IX 4. IX 4. IX 4.

X 1. X 1. X 1. X 2. X 2. X 3. X 3. X 3. X 3. X 4. X 4. X 4. X 5.

>Bandera de la Espera .. >Bandera de informacin. ... >Bandera de Prueba .. >Comandos de atajo y Variaciones .. >Dispositivos MCI >Control del dispositivo .. >Reproduccin y Posicionamiento .. >Tipos de dispositivos . >Nombres de los dispositivos .. >Driver de soporte para los Comandos de MCI .. >Trabajando con dispositivos MCI.. >Abriendo un dispositivo. >Usando un seudnimo. . >Especificando un tipo de dispositivo......................................... >Los dispositivos simples y compuestos. ... >Abriendo un dispositivo usando la extensin. .. >Archivo nuevo de dato. >Informacin recuperada de un Dispositivo . >Obtencin de la informacin del sistema de MCI . >Ejecutando un Dispositivo . >Grabacin ... >Guardando un Archivo Grabado . >Detener, y hacer una pausa. >Cerrando un Dispositivo >La interfaz de mensajes de comandos desde el lenguaje C... >Resumen del manejo de un dispositivo MCI. .. >Limitaciones de los comandos MCI..

X 5. X 5. X 5. X 5. X 6. X 6. X 6. X 7. X 7. X 8. X 8. X 8. X 8. X 8. X 8. X 9. X 9. X 9. X 9. X 9. X 10. X 10. X 10. X 10. X 11. X 11. X 12.

Captulo 11 Programa de adquisicin >Introduccin. .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... ... >Programas bajo Windows.... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... >Independencia de la mquina.... .... .... .... .... .... .... .... .... .... .... .... .... .... >Recursos.... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .. >Ventanas.... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .. >Eventos.... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... >Proyectos.... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... ................ >Controles.... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... . >Descripcin del Programa. .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .. >Ficheros de cabecera.... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... ... >Declaracin del prototipo de las funciones. .... .... .... .... .... .... .... .... .... .. >Declaracin de variables globales.... .... .... .... .... .... .... .... .... .... .... .... ... >Funcin Win main.... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .. >Declaracin.... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... ... >Inicializacin.... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... . >Bucle de mensajes.... .... .... .... .... .... .... .... .... .... .... .... .... .... ... >El procedimiento de ventana.... .... .... .... .... .... .... .... .... .... .... .... .... .... . >Manipulador de mensajes.... .... .... .... .... .... .... .... .... .... .... .... . >Mens.... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... . >Funciones de grabacin y reproduccin.... .... .... .... .... .... .... .... .... .... .... >Funcin Grabar.... .... .... .... .... .... .... .... .... .... .... .... ... >Funcin Reproducir.... .... .... .... .... .... .... .... .... .... .... . >Funciones de dilogo.... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .. >Funcin dilogo Nombre de archivo .... .... .... .... ...... >Funcin dilogo Tiempo de adquisicin .... .... .... .... >Fichero cabecera ids.h .... .... .... .... .... .... .... .... .... .... .... .... .... .... ......

XI XI XI XI XI XI XI XI XI XI XI XI XI XI XI XI XI XI XI XI XI XI XI XI XI XI

1. 1. 1. 1. 1. 1. 2. 2. 2. 2. 3. 3. 4. 4. 4. 5. 5. 5. 6. 7. 7. 10. 11. 11. 12. 13.

>Ficheros de recursos.... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... >Men.... .... .... .... .... .... .... .... .... .... .... .... .... .... ......... >Dilogos. .... .... .... .... .... .... .... .... .... .... .... .... .... ....... >Estructura del proyecto......... .... .... .... .... .... .... .... .... .... .... .... .... .... .... >Cabecera ids.h.... .... .... .... .... .... .... .... .... .... .... .... .... >winMenu.c.... .... .... .... .... .... .... .... .... .... .... .... .... .... >Recurso win003.rc.... .... .... .... .... .... .... .... .... .... .... ... >Manejo de la aplicacin.. .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... Captulo 12 Transformadas de Fourier y la DFT. >Introduccin......................................................................................................... >Clases CT y DT de mtodos de Fourier............................................................... >Transformada clsica de Fourier para seales de tiempo continuo...................... >Definicin (CTFT)................................................................... >El espectro de Fourier del modelo de muestreo de tiempo contino. .................. >La transformada de Fourier de tiempo discreto.................................................... >Relacin entre el espectro de tiempo continuo y discreto........ >La transformada discreta de Fourier (DFT)..........................................................

XI XI XI XI XI XI XI XI

13. 14. 14. 14. 15. 15. 15. 17.

XII 1. XII 1. XII 2. XII 2. XII 2. XII 2. XII 3. XII 3.

Captulo 13 Anlisis de espectro con MATLAB. >Introduccin......................................................................................................... ... >Procesamiento.m............................................................... ..................................... >En tiempo continuo...................... .......................................................................... >En tiempo Discreto. .................. ............................................................................. >Espectro continuo.................................................... ............................................... >Espectro discreto..................................................................................................... >Bibliografa.......................................................... ................................................... Apndice A Cdigo fuente del programa. >winmenu.c......................................................................................................... ... >Recurso win003.rc........................................................... ....................................

XIII 1. XIII 2. XIII 3. XIII 3. XIII 4. XIII 5. XIII 5.

A 1. A 15.

Captulo 1 Introduccin general


Introduccin.
En este apartado se presentaran los componentes fundamentales del proyecto los cuales sern tratados con profundidad en los siguientes captulos. El analizador de espectros aqu tratado consiste en tomar una seal cualquiera y obtener su contenido frecuencial. Dicho de otro modo se representaran grficamente las amplitudes de cada una de las armnicas que componen la seal, utilizando para ello una PC.

Obtencin de datos y anlisis.


Existen varias formas de realizar el anlisis de espectro, una de las mas sencillas es adquiriendo los datos de forma digital y luego procesarlos. Para ello utilizaremos la placa de sonido como adquisidor, una vez que obtenemos los datos los almacenamos en disco con un formato de tipo de onda o sea lo almacenamos como un archivo cuya extensin es .wav. para el anlisis de espectro se toma este archivo se elimina la cabecera y se lo procesa en el programa MATLAB.

Etapas para el anlisis


Para poder realizar el anlisis frecuencial se tienen las siguientes etapas: Etapa de entrada. Adaptador de nivel. Adquisicin. Medicin. Memoria. Presentacin.

Etapa de entrada:
Es la encargada de impedir el paso de seales indeseables y proteger al dispositivo en caso de sobre tensin o algn otra anomala.

Adaptador de nivel:
Consiste en variar la ganancia de un amplificador con el objetivo de obtener una seal con un nivel constante de amplitud para que los datos obtenidos en la adquisicin no se modifiquen constantemente con cualquier variacin de la amplitud de la seal de entrada.

Adquisicin:
Consiste en tomar los datos que luego sern procesados.

Medicin:
Para realizar la medicin o sea interpretar los datos obtenidos es importante conocer el rango de frecuencias en el cual se est realizando la adquisicin de estos datos, es decir la frecuencia mnima y mxima de muestreo, que en este caso se encuentra en 50Hz y 50kHz, rango que comprende el espectro de audicin humana.

Memoria:
Es la encargada de almacenar los datos obtenidos de la adquisicin, para ello se usa la memoria RAM de la PC.

Presentacin:
Por medio de un programa poder visualizar los datos obtenidos y procesados.

I - 1

Diagrama en bloques.

La etapa de adquisicin y filtrado es realizada por medio de una placa de sonido la cual posee un DSP y un filtro pasa bajos. La adquisicin se realiza despus de que la seal fue filtrada por el filtro pasa bajos, el cual evita el paso de seales de alta frecuencia que no estn en el rango de medicin. La seal debe ser muestreada a una razn de muestreo determinada. Estas acciones la ejecuta la placa de sonido ya que posee el filtro pasa bajos y realiza el muestreo de la seal a una frecuencia de muestreo de hasta 44,1 Khz a 16 bits. Los datos obtenidos del muestreo se almacenan en la memoria RAM de la PC, luego, estos datos, son usados por el software para realizar el procesamiento de dichos datos. El procesamiento consiste en obtener las componentes frecuenciales de la seal muestreada.

Procesamiento de seales
El procesamiento de la seal se puede realizar de dos formas: Anlisis mediante Transformada Rpida de Fourier. Es un anlisis de banda angosta que se aplica sobre cada seal muestreada. Para ello se debe segmentar los datos muestreados en varias ventanas, luego ponderar cada ventana definida, una ves realizado este proceso se aplica el algoritmo de la Transformada Rpida de Fourier a cada ventana previamente ponderada y se obtienen los espectros de todas las ventanas y finalmente la promediacin del los espectros hallado con uno anteriormente calculado. Anlisis mediante Filtros Digitales. Para hacer el anlisis de banda ancha por octavas tercio de octavas la cual es mayormente usado en Audio y Acstica. Consiste en pasar el segmento de datos muestreados a travs de un banco de filtros pasabanda con frecuencia centrales y ancho de banda estandarizados ( 37.5 Hz, 63 Hz, 125 Hz, 250 Hz, ... frecuencias centrales de los filtros por octava ). A la salida de cada filtro se obtendr una seal filtrada, a la cual se le halla su potencia elctrica, agrupando todas las potencias de las seales obtenidas a la salida de cada filtro, se consigue un espectro de potencia que refleja la distribucin espectral de la seal muestreada. Para hacer el anlisis de una seal en la banda de audio se requiere 10 filtros pasabanda analgicos por octavas 30 filtros pasa banda analgicos por 1/3 de octava, pero usando tcnicas de procesamiento se consigue realizar el anlisis por octava con slo un filtro digital pasabanda slo 3 filtros por 1/3 de octava.

I - 2

Aplicaciones comerciales:
El analizador de espectros puede ser usado para variadas aplicaciones tanto en ambientes industriales como tambin aplicaciones didcticas, algunas de estas aplicaciones son las siguientes: Encontrar las respuestas de los filtros. Medicin de equipos de Audio. Medicin de parmetros acsticos. Ecualizacin de salas acsticas. Anlisis modal de estructuras. Anlisis de ruidos.

Consultas
Al comienzo de nuestro proyecto fue de mucha importancia obtener informacin de los distintos mtodos para el anlisis de espectros, para ello se realizaron consultas al Ing. Franzini Hugo profesor de la ctedra Comunicaciones I, ya que dicha materia trata el tema de transformada de Fourier; y al Ing. Culasso Vctor profesor de la ctedra Medidas electrnica II, en dicha materia se trata el tema anlisis de espectros. La consulta a los profesores antes mencionados nos llevo a realizar el proyecto tomando como fundamento un anlisis de espectro digital. En los captulos posteriores se nombran las consultas realizadas y la bibliografa utilizada para cada tema.

Materias Integradas.
Informtica II, Anlisis de seales y sistemas, Comunicaciones I, Tcnicas digitales III, Medidas electrnicas II.

I - 3

Captulo 2 Sonido
Introduccin
El Sonido es un fenmeno fsico que percibimos al producirse una perturbacin en el medio en el cual estamos, son ondas que en este caso, se propagan por aire, slidos o lquidos. El cuerpo humano percibe el sonido como un cambio en la presin del aire en el tmpano. De este modo, por ejemplo: si alguien aplaude, ese aplauso desplaza aire que hace vibrar a las sensibles membranas de nuestros odos, esa vibracin es decodificada por el cerebro como sonido. Es una forma de energa mecnica que se representa por una onda sinusoidal que muestra vibraciones a lo largo del tiempo. En los seres humanos, esto ocurre siempre que una vibracin con frecuencia comprendida entre unos 15 y 20.000 hercios llega al odo interno. El hercio (Hz) es una unidad de frecuencia que corresponde a un ciclo por segundo. Estas vibraciones llegan al odo interno transmitidas a travs del aire, y a veces se restringe el trmino sonido a la transmisin en este medio. Sin embargo, en la fsica moderna se suele extender el trmino a vibraciones similares en medios lquidos o slidos. Los sonidos con frecuencias superiores a unos 20.000 Hz se denominan ultrasonidos.

En general, las ondas pueden propagarse de forma transversal o longitudinal. En ambos casos, slo la energa y la cantidad de movimiento del movimiento ondulatorio se propagan en el medio; ninguna parte del propio medio se mueve fsicamente a una gran distancia. Por ejemplo, imaginemos que atamos firmemente una cuerda a un poste por un extremo, la estiramos sin tensarla del todo y sacudimos el otro extremo. Una onda se desplazar por la cuerda hacia el poste, donde se reflejar y volver hacia la mano. En realidad, ninguna parte de la cuerda se mueve longitudinalmente hacia el poste, pero todas las partes de la cuerda se mueven transversalmente. Este tipo de movimiento ondulatorio se denomina onda transversal. Del mismo modo, si tiramos una piedra a un estanque, una serie de ondas transversales se propaga desde el punto de impacto. Un corcho que flote cerca de dicho punto se mover hacia arriba y hacia abajo, es decir, de forma transversal a la direccin del movimiento ondulatorio, pero apenas mostrar movimiento longitudinal. En cambio, una onda de sonido es una onda longitudinal. A medida que la energa del movimiento ondulatorio se propaga alejndose del centro de la perturbacin, las molculas de aire individuales que transmiten el sonido se mueven hacia delante y hacia atrs, de forma paralela a la direccin del movimiento ondulatorio. Por tanto, una onda de sonido es una serie de compresiones y enrarecimientos sucesivos del aire. Cada molcula individual transmite la energa a las molculas vecinas, pero una vez que pasa la onda de sonido, las molculas permanecen ms o menos en la misma posicin.

Caractersticas fsicas
Cualquier sonido sencillo, como una nota musical, puede describirse en su totalidad especificando tres caractersticas de su percepcin: el tono, la intensidad y el timbre. Estas caractersticas corresponden exactamente a tres caractersticas fsicas: la frecuencia, la amplitud y la composicin armnica o forma de onda. El ruido es un sonido complejo, una mezcla de diferentes frecuencias o notas sin relacin armnica.

II - 1

Frecuencia
Percibimos la frecuencia de los sonidos como tonos ms graves o ms agudos. La frecuencia es el nmero de ciclos (oscilaciones) que una onda sonora efecta en un tiempo dado; se mide en hercios (ciclos por segundo). Existen distintos mtodos para producir sonido de una frecuencia deseada. Por ejemplo, un sonido de 440 Hz puede crearse alimentando un altavoz con un oscilador sintonizado a esa frecuencia. Tambin puede interrumpirse un chorro de aire mediante una rueda dentada con 44 dientes que gire a 10 revoluciones por segundo; este mtodo se emplea en las sirenas. Los sonidos de un altavoz y una sirena de la misma frecuencia tendrn un timbre muy diferente, pero su tono ser el mismo, equivalente al la situado sobre el do central en un piano. El siguiente la del piano, la nota situada una octava por encima, tiene una frecuencia de 880 Hz. Las notas situadas una y dos octavas por debajo tienen frecuencias de 220 y 110 Hz respectivamente. Por definicin, una octava es el intervalo entre dos notas cuyas frecuencias tienen una relacin de uno a dos. Una ley fundamental de la armona afirma que dos notas separadas por una octava producen una combinacin eufnica cuando suenan simultneamente. Cuando el intervalo es de una quinta o de una tercera mayor, la combinacin es progresivamente menos eufnica. En fsica, un intervalo de una quinta implica que la relacin de las frecuencias de ambas notas es de tres a dos; en una tercera mayor, la relacin es de cinco a cuatro. La ley de la armona afirma que dos o ms notas producen un sonido eufnico al sonar de forma simultnea si la relacin entre sus frecuencias corresponde a nmeros enteros pequeos; si las frecuencias no presentan dichas relaciones, se produce una disonancia.

Amplitud y Volumen.
La amplitud de una onda de sonido es el grado de movimiento de las molculas de aire en la onda, que corresponde a la intensidad del enrarecimiento y compresin que la acompaan. Cuanto mayor es la amplitud de la onda, ms intensamente golpean las molculas el tmpano y ms fuerte es el sonido percibido. La amplitud de una onda de sonido puede expresarse en unidades absolutas midiendo la distancia de desplazamiento de las molculas del aire, o la diferencia de presiones entre la compresin y el enrarecimiento, o la energa transportada. Por ejemplo, la voz normal presenta una potencia de sonido de aproximadamente una cienmilsima de vatio. Sin embargo, todas esas medidas son muy difciles de realizar, y la intensidad de los sonidos suele expresarse comparndolos con un sonido patrn; en ese caso, la intensidad se expresa en decibelios.

II - 2

Decibelio dB
El decibelio es una unidad logartmica de medida utilizada en diferentes disciplinas de la ciencia. En todos los casos se usa para comparar una cantidad con otra llamada de referencia. Normalmente el valor tomado como referencia es siempre el menor valor de la cantidad. En algunos casos puede ser un valor promediado aproximado. En Acstica la mayora de las veces el decibelio se utiliza para comparar la presin sonora, en el aire, con una presin de referencia. Este nivel de referencia tomado en Acstica, es una aproximacin al nivel de presin mnimo que hace que nuestro odo sea capaz de percibirlo. El nivel de referencia varia lgicamente segn el tipo de medida que estemos realizando. No es el mismo nivel de referencia para la presin acstica, que para la intensidad acstica o para la potencia acstica. A continuacin se dan los valores de referencia. Nivel de Referencia para la Presin Sonora (en el aire) = 0.00002 = 2E-5 Pa (rms) Nivel de Referencia para la Intensidad Sonora ( en el aire) = 0.000000000001 = 1E-12 w/m^2 Nivel de Referencia para la Potencia Sonora (en el aire) = 0.00000000001 = 1E-12 w Como su nombre indica el decibelio es la dcima parte del Bel. El Bel es el logaritmo en base 10 de la relacin de dos potencias o intensidades. No obstante esta unidad resulta demasiado grande por lo que se ha normalizado el uso de la dcima parte del Bel, siendo el decibel o decibelio. La formula para su aplicacin es la siguiente, partiendo que la intensidad acstica en el campo lejano es proporcional al cuadrado de la presin acstica, se define el nivel de presin sonora como:

LP = 10 log

P2 P = 20 log PR PR
0,00002 = 20 log 1 = 0dB 0,00002

Siendo Lp = Nivel de Presin sonora; p la presin medida; pr la presin de referencia (2E-5 Pa). Como es fcil ver el nivel de referencia siempre se corresponde con el nivel de 0 dB:

LP = 20 log

Por la tanto en 0 dB tenemos el umbral de audicin del odo humano, se supone que no es posible or por debajo de este nivel, o sea variaciones de nivel en la presin del aire inferiores a 0,00002 pascal. La razn por la que se utiliza el decibelio es que si no, tendramos que estar manejando nmeros o muy pequeos o excesivamente grandes, con lo que la posibilidad de error seria muy grande al hacer clculos. Adems tambin hay que tener en cuenta que el comportamiento del odo humano esta ms cerca de una funcin logartmica que de una lineal, ya que no percibe la misma variacin de nivel en las diferentes escalas de nivel, ni en las diferentes bandas de frecuencias.

Medicin del Nivel Sonoro


Para medir el nivel sonoro disponemos de los Sonmetros. Estos aparatos nos permiten conocer el Nivel de Presin sonora o SPL (Sound Presure Level). Normalmente suelen ser sistemas digitales y presentan en una pantalla de cristal liquido los valores medidos. Estos siempre se dan como decibelios dB y en referencia al valor antes sealado de (2E-5 Pa). Con el sonmetro es posible adems del hallar el valor rms de la presin, tambin ver los picos mximos y niveles mnimos de la medida. Los sonmetros normalmente no dan la medida en dB lineales si no que dan ya con la ponderacin y son dBA/dBC etc.. Una funcin muy utilizada a la hora de medir niveles de presin acstica y que ofrecen los sonmetros es la medicin en modo Leq. Normalmente se utiliza el Leq 1' (leq a un minuto). El sonmetro mide las diferentes

II - 3

presiones que se generan durante un tiempo determinado (Leq X) siendo X = 1 minuto en nuestro caso, el valor que nos da al finalizar el minuto de medida es un valor en dB que equivaldra al de una seal de valor continuo durante todo el minuto y que utilizara la misma energa que se ha medido durante el minuto. Hay que observar que en una medida de un minuto los valores varan y si se quiere determinar un valor medio de ruido hay que hacerlo con la funcin Leq, de otra forma se obtendrn valores errneos puesto que podemos tener valores de pico durante un instante y no ser representativos del nivel de ruido normal que se esta intentando determinar.

El dBA o la ponderacin -AEn el punto anterior hemos visto que el dB es un valor lineal, quiere decir que los valores medidos son los valores tomados como validos sin que sufran ninguna alteracin. Si los valores de presin acstica los medimos de esta forma, linealmente, aun siendo cierta dicha medida, tendr poco valor en cuanto a la percepcin del odio humano. El odo no se comporta igual para el mismo nivel de presin en diferentes frecuencias. Por ejemplo tomemos un sonido lineal en toda la banda de 20 Hz a 20 kHz tenemos en todas las bandas un nivel de 30 dB, si nuestro odo fuese lineal oiramos los mismo o mejor con la misma intensidad auditiva las frecuencias mas bajas, que las medias y que las agudas. Sin embargo esto no es cierto el odo humano tiene una menor sensibilidad en las frecuencias mas graves, y en las mas agudas frente a las medias. Lo que mas omos por tanto son las frecuencias medias, y las que menos las mas graves seguidas de las ms agudas. Como vemos es necesario encontrar una forma de ajustar los niveles de dB que hemos medido con la percepcin que el odo tiene de los mismos segn cada frecuencia. Esta correccin se realiza ponderando los dB medidos mediante una tabla de ponderacin ya especificada y que se llama tabla "A". Los decibelios ya ponderados en "A" se representan como dBA y los no ponderados, llamados lineales, como dB. Por ejemplo si en una frecuencia de 100 Hz hemos medido 80 dB, al ponderarlo pasaran a ser 60,9 dBA, esto quiere decir que un nivel de presin sonora de 80 dB en una frecuencia de 100 Hz es oda por nuestro sistema de audicin como si realmente tuviese 60,9 dBA y no 80 dB.

Suma de niveles de sonido


Hemos visto que el decibelio es una funcin logartmica y por tanto cuando hablamos de dB de presin sonora no es posible sumarlos sin mas. Por ejemplo 30 dB + 30 dB no es igual a 60 dB si no a 33 dB como vamos a ver a continuacin. Para poder sumar dos decibelios podemos emplear la siguiente ecuacin:

dB1 + dB2 = 10 log(10

dB1

10

+ 10

dB2

10

La suma de dos dB nunca puede ser ms de 3 dB ms que el mayor de los dos. Si la diferencia que hay entre los dos valores a sumar es mayor de 10 dB la suma no tiene valor practico y se toma el valor del mayor de los dos. Por ejemplo si sumamos 20 dB + 10 dB el resultado ser igual a 20 dB (aproximado). Solamente son significativos para la suma los valores que tienen una diferencia menor a 10 dB.

Presin Acstica y el Nivel de Presin Acstica


La presin sonora como hemos visto antes, es la presin que se genera en un punto determinado por una fuente sonora. El nivel de presin sonora SPL se mide en dB(A) SPL y determina el nivel de presin que realiza la onda sonora en relacin a un nivel de referencia que es 2E-5 Pascal en el aire. Es el parmetro ms fcil de medir, se puede medir con un sonmetro. Su valor depende del punto donde midamos, del local etc. Realmente no da mucha informacin sobre las caractersticas acsticas de la fuente, a no ser que se haga un anlisis frecuencia de los nivel de presin, dado que el SPL siempre esta influenciado por la distancia a la fuente, el local etc.

Intensidad fisiolgica de un sonido.


La intensidad fisiolgica o sensacin sonora de un sonido se mide en decibelios (dB). Por ejemplo, el umbral de la audicin est en 0 dB, la intensidad fisiolgica de un susurro corresponde a unos 10 dB y

II - 4

el ruido de las olas en la costa a unos 40 dB. La escala de sensacin sonora es logartmica, lo que significa que un aumento de 10 dB corresponde a una intensidad 10 veces mayor: por ejemplo, el ruido de las olas en la costa es 1.000 veces ms intenso que un susurro, lo que equivale a un aumento de 30 dB. La distancia a la que se puede or un sonido depende de su intensidad, que es el flujo medio de energa por unidad de rea perpendicular a la direccin de propagacin. En el caso de ondas esfricas que se propagan desde una fuente puntual, la intensidad es inversamente proporcional al cuadrado de la distancia, suponiendo que no se produzca ninguna prdida de energa debido a la viscosidad, la conduccin trmica u otros efectos de absorcin. Por ejemplo, en un medio perfectamente homogneo, un sonido ser nueve veces ms intenso a una distancia de 100 metros que a una distancia de 300 metros. En la propagacin real del sonido en la atmsfera, los cambios de propiedades fsicas del aire como la temperatura, presin o humedad producen la amortiguacin y dispersin de las ondas sonoras, por lo que generalmente la ley del inverso del cuadrado no se puede aplicar a las medidas directas de la intensidad del sonido.

Intensidad Acstica y el Nivel de Intensidad Acstica


Se puede definir como la cantidad de energa sonora transmitida en una direccin determinada por unidad de rea. Con buen odo se puede citar dentro de un rango de entre 1x10-12 w por metro cuadrado, hasta 1 w. Para realizar la medida de intensidades se utiliza actualmente analizadores de doble canal con posibilidad de espectro cruzado y una sonda que consiste en dos micrfonos separados a corta distancia. Permite determinar la cantidad de energa sonora que radia una fuente dentro de un ambiente ruidoso. No es posible medirlo con un sonmetro. El nivel de intensidad sonora se mide en w/m2.

Potencia Acstica y Nivel de Potencia Acstica


La potencia acstica es la cantidad de energa radiada por una fuente determinada. El nivel de potencia Acstica es la cantidad de energa total radiada en un segundo y se mide en w. La referencia es 1pw = 1E-12 w. Para determinar la potencia acstica que radia una fuente se utiliza un sistema de medicin alrededor de la fuente sonora a fin de poder determinar la energa total irradiada. La potencia acstica es un valor intrnseco de la fuente y no depende del local donde se halle. La potencia acstica el valor no varia por estar en un local reverberante o en uno seco. Al contrario de la Presin Acstica que si que varia segn vari las caractersticas del local donde se halle la fuente, la distancia etc.

Tiempo de Reverberacin
El Tiempo de Reverberacin RT, es el tiempo que tarda una seal, desde que esta deja de sonar, en atenuarse un nivel de 60 dB. Para realizar la medida se genera un ruido y se mide a partir de que este deja de sonar, entonces se determina el tiempo que tarda en atenuarse 60 dB. El Tiempo de Reverberacin se mide de forma frecuencial, esto es, un local no tiene el mismo RT en 200 Hz que en 4 kHz. Ello es debido a que el RT viene determinado por el Volumen de la sala, y por los coeficientes de absorcin de sus superficies, o si se prefiere por las superficies con un coeficiente de absorcin determinado. Como los coeficientes de absorcin de los diferentes materiales que componen cualquier local no son iguales para todas las frecuencias, las reflexiones generadas en el interior del local sern diferentes para cada frecuencia y por lo tanto el RT del local es diferente segn las frecuencias. Para calcular la RT de un local sin realizar mediciones se puede utilizar la formula de Sabine:

V RT60 = 0,163 A
V = Volumen de la sala en m3 y A = Superficie de Absorcin en m2 Como norma cuanto mayor es el local mayor es el RT. Si los materiales que lo componen internamente son poco absorbentes el RT tambin aumentara.

II - 5

El valor de RT es muy importante si se quiere conseguir buenos niveles de inteligibilidad dentro de los locales.

Coeficiente de Absorcin de un material


El coeficiente de absorcin de un material es la relacin entre la energa absorbida por el material y la energa reflejada por el mismo. Dada esta formulacin su valor siempre esta comprendido entre 0 y 1. El mximo coeficiente de absorcin esta determinado por un valor de 1 donde toda la energa que incide en el material es absorbida por el mismo, y el mnimo es 0 donde toda la energa es reflejada. El coeficiente de absorcin varia con la frecuencia y por tanto los fabricantes de materiales acsticos dan los coeficientes de absorcin por lo menos en resolucin de una octava. Sabiendo los materiales de una sala y sabiendo sus coeficientes de absorcin podemos saber como sonora esa sala en cada frecuencia y podremos tambin saber, mediante la formula de Sabine, Eyring etc, el tiempo de reverberacin tambin por frecuencias.

Timbre.
El timbre es la caracterstica del sonido que nos permite distinguir los tonos producidos por instrumentos distintos aunque las ondas sonoras tengan la misma amplitud y frecuencia. Los armnicos son componentes adicionales de la onda que vibran con mltiplos enteros de la frecuencia principal y dan lugar a diferencias de timbre. El odo distingue por su timbre la misma nota producida por un diapasn, un violn o un piano. Si se toca el la situado sobre el do central en un violn, un piano y un diapasn, con la misma intensidad en los tres casos, los sonidos son idnticos en frecuencia y amplitud, pero muy diferentes en timbre. De las tres fuentes, el diapasn es el que produce el tono ms sencillo, que en este caso est formado casi exclusivamente por vibraciones con frecuencias de 440 Hz. Debido a las propiedades acsticas del odo y las propiedades de resonancia de su membrana vibrante, es dudoso que un tono puro llegue al mecanismo interno del odo sin sufrir cambios. La componente principal de la nota producida por el piano o el violn tambin tiene una frecuencia de 440 Hz. Sin embargo, esas notas tambin contienen componentes con frecuencias que son mltiplos exactos de 440 Hz, los llamados tonos secundarios, como 880, 1.320 o 1.760 Hz. Las intensidades concretas de esas otras componentes, los llamados armnicos, determinan el timbre de la nota.

Velocidad del sonido.


La frecuencia de una onda de sonido es una medida del nmero de vibraciones por segundo de un punto determinado. La distancia entre dos compresiones o dos enrarecimientos sucesivos de la onda se denomina longitud de onda. El producto de la longitud de onda y la frecuencia es igual a la velocidad de propagacin de la onda, que es la misma para sonidos de cualquier frecuencia (cuando el sonido se propaga por el mismo medio a la misma temperatura). Por ejemplo, la longitud de onda del la situado sobre el do central es de unos 78,2 cm, y la del la situado por debajo del do central es de unos 156,4 centmetros. La velocidad de propagacin del sonido en aire seco a una temperatura de 0 C es de 331,6 m/s. Al aumentar la temperatura aumenta la velocidad del sonido; por ejemplo, a 20 C, la velocidad es de 344 m/s. Los cambios de presin a densidad constante no tienen prcticamente ningn efecto sobre la velocidad del sonido. En muchos otros gases, la velocidad slo depende de su densidad. Si las molculas son pesadas, se mueven con ms dificultad, y el sonido avanza ms despacio por el medio. Por ejemplo, el sonido avanza ligeramente ms deprisa en aire hmedo que en aire seco, porque el primero contiene un nmero mayor de molculas ms ligeras. En la mayora de los gases, la velocidad del sonido tambin depende de otro factor, el calor especfico, que afecta a la propagacin de las ondas de sonido. Generalmente, el sonido se mueve a mayor velocidad en lquidos y slidos que en gases. Tanto en los lquidos como en los slidos, la densidad tiene el mismo efecto que en los gases; la velocidad del sonido vara de forma inversamente proporcional a la raz cuadrada de la densidad. La velocidad tambin vara de forma proporcional a la raz cuadrada de la elasticidad. Por ejemplo, la velocidad del sonido en agua es de unos 1.500 m/s a temperaturas ordinarias, pero aumenta mucho cuando sube la temperatura. La velocidad del sonido en el cobre es de unos 3.500 m/s a temperaturas normales y

II - 6

decrece a medida que aumenta la temperatura (debido a la disminucin de la elasticidad). En el acero, ms elstico, el sonido se desplaza a unos 5.000 m/s; su propagacin es muy eficiente.

Refraccin, reflexin e interferencias.


Un eco es una onda sonora reflejada. El intervalo entre la emisin y la repeticin del sonido corresponde al tiempo que tardan las ondas en llegar al obstculo y volver. Con frecuencia, el eco es ms dbil que el sonido original porque no todas las ondas se reflejan. Generalmente, los ecos escuchados en las montaas se producen cuando las ondas sonoras rebotan en grandes superficies alejadas ms de 30 m de la fuente. Dando golpecitos en un tubo metlico pegado al odo tambin pueden escucharse ecos. El sonido avanza en lnea recta cuando se desplaza en un medio de densidad uniforme. Sin embargo, igual que la luz, el sonido est sometido a la refraccin, es decir, la desviacin de las ondas de sonido de su trayectoria original. En las regiones polares, por ejemplo, donde el aire situado cerca del suelo es ms fro que el de las capas ms altas, una onda de sonido ascendente que entra en la regin ms caliente, donde el sonido avanza a ms velocidad, se desva hacia abajo por la refraccin. La excelente recepcin del sonido a favor del viento y la mala recepcin en contra del viento tambin se deben a la refraccin. La velocidad del aire suele ser mayor en las alturas que cerca del suelo; una onda de sonido ascendente que avanza a favor del viento se desva hacia el suelo, mientras que una onda similar que se mueve en contra del viento se desva hacia arriba, por encima de la persona que escucha. El sonido tambin se ve afectado por la reflexin, y cumple la ley fundamental de que el ngulo de incidencia es igual al ngulo de reflexin. Un eco es el resultado de la reflexin del sonido. El sonar se basa en la reflexin de los sonidos propagados en agua. Una bocina es un tubo cnico que forma un haz de ondas de sonido reflejando algunos de los rayos divergentes en los lados del tubo. Un tubo similar puede recoger ondas de sonido si se dirige el extremo ancho hacia la fuente de sonido. El sonido tambin experimenta difraccin e interferencia. Si el sonido de una nica fuente llega a un oyente por dos trayectorias diferentes por ejemplo, una directa y otra reflejada, los dos sonidos pueden reforzarse; sin embargo, si no estn en fase pueden interferir de forma que el sonido resultante sea menos intenso que el sonido directo sin reflexin. Las trayectorias de interferencia son distintas para sonidos de diferentes frecuencias, con lo que la interferencia produce distorsin en sonidos complejos. Dos sonidos de distintas frecuencias pueden combinarse para producir un tercer sonido cuya frecuencia es igual a la suma o diferencia de las dos frecuencias originales.

Eco, Reverberacin y Resonancia


Cuando se genera un sonido en el interior de un local las superficies que componen el mismo ocasionan una serie de diferentes efectos dependiendo del las caractersticas de dichas superficies. Esto ocurre porque las ondas sonoras inciden en las diferentes superficies y estas las reflejan de diferente forma segn su coeficiente de reflexin acstica. Como es lgico, primero siempre se percibe el sonido directo, esto es, el sonido que nos llega a nuestro odo sin que se an se halla reflejado en ninguna superficie. Una vez recibido el sonido directo, llegar a nuestros odos, con un retraso de tiempo con respecto al sonido directo, el sonido reflejado por las superficies del local. Tanto el retraso como el nivel sonoro del sonido reflejado dependen de las caractersticas fsicas del local y sus superficies. Si el retraso entre el sonido directo y el reflejado es mayor de 1/10 de segundo, nuestro sistema de audicin ser capaz de separar las dos seales y percibirlas como tales, primero una y despus la otra, esto es lo que se entiende por eco. Por ejemplo: supongamos que estamos dentro de un local de grandes dimensiones y una persona que esta separada de nosotros a cierta distancia nos dice "HOLA"; primero llegara a nuestros odos el "HOLA" del sonido directo, y en el caso de un Eco este nos llegara como mnimo 1/10 segundo despus, por lo tanto oiremos "HOLA....(1/10 segundo mnimo)...HOLA", y lo interpretaremos efectivamente como dos mensajes diferentes separados por un intervalo de tiempo determinado. Sin embargo nuestro interlocutor nicamente ha articulado un "HOLA". Cuando en la misma situacin que en el caso anterior, el sonido reflejado nos llega con un tiempo inferior a 1/10 de segundo, nuestro sistema de audicin no es capaz de separar ambas seales y las toma como una misma pero con una duracin superior de esta. Normalmente esto se entiende como reverberacin. La reverberacin de un local se mide segn su tiempo de reverberacin (rt) en segundos y varia segn la frecuencia de anlisis que se utilice. Esto es debido a que los diferentes materiales que componen las

II - 7

superficies del local no se comportan por igual en todo el espectro sonoro, y por tanto los coeficientes de absorcin de cada superficie de un mismo material varia segn la frecuencia. Conociendo el tiempo de reverberacin de un local podemos saber como se comportara el mismo en diferentes aplicaciones. Cuando el tiempo de reverberacin alcanza valores muy altos con respecto al sonido directo, puede ocurrir un enmascaramiento de este y se puede perder la capacidad de entender la informacin contenida en el mensaje que se percibe. La resonancia se ocasiona cuando un cuerpo entra en vibracin por simpata con una onda sonora que incide sobre el y coincide su frecuencia con la frecuencia de oscilacin del cuerpo o esta es mltiplo entero de la frecuencia de la onda que le incide.

Altura (tono) de un sonido


Como ya sabemos la frecuencia es una entidad fsica y por tanto puede ser medida de forma objetiva por diferentes medios. Por contra la altura o tono de un sonido es un fenmeno totalmente subjetivo y por tanto no es posible medirlo de forma objetiva. Normalmente cuando se aumenta la frecuencia de un sonido, su altura tambin sube, sin embargo esto no se da de forma lineal, o sea no se corresponde la subida del valor de la frecuencia con la percepcin de la subida de tono. La valoracin subjetiva del tono se ve condicionada no solo por el aumento de la frecuencia si no tambin por la intensidad, y por el valor de dicha frecuencia. Para frecuencias inferiores a 1.000 Hz (incluida esta), si se aumenta la intensidad el tono disminuye, entre 1.000 Hz y 5.000 Hz el tono es prcticamente independiente de la intensidad que tenga, por encima de 5.000 Hz el tono aumenta si aumenta la intensidad. La unidad de altura es el "Mel". (en ocasiones se utiliza el "Bark" equivalente a 100"Mels").

Sensacin de tono
Si se practica una audiometra a una persona joven normal, se comprueba que su odo es sensible a todos los sonidos entre 15-20 hercios y 15.000-20.000 hercios. El odo de las personas mayores es menos agudo, sobre todo en las frecuencias ms elevadas. El odo es especialmente sensible en la gama que va desde el la situado por encima del do central hasta el la que est cuatro octavas por encima; en esa zona, una persona puede percibir un sonido cientos de veces ms dbil que una octava por encima o dos octavas por debajo. El grado en que un odo sensible puede distinguir entre dos notas puras que difieran ligeramente en intensidad o frecuencia vara en los diferentes rangos de intensidad y frecuencia de los tonos. En sonidos de intensidad moderada situados en el rango de frecuencia para el que el odo es ms sensible (entre 1.000 y 2.000 Hz aproximadamente), es posible distinguir una diferencia de intensidad de un 20% (1 decibelio, o dB) y una diferencia en frecuencia de un 0,33% (alrededor de una vigsima de nota). En este mismo rango, la diferencia entre el sonido ms tenue que puede orse y el sonido ms fuerte que puede distinguirse como tal sonido (los sonidos ms fuertes se sienten, o perciben, como estmulos dolorosos) es de unos 120 decibelios: una diferencia de intensidad de aproximadamente un billn de veces. Todas estas pruebas de sensibilidad se refieren a tonos puros, como los producidos por un oscilador electrnico. Incluso para esos tonos puros, el odo es imperfecto. Dos notas con frecuencia idntica pero una gran diferencia de intensidad pueden aparentar una ligera diferencia de tono. Ms importante resulta la diferencia en las intensidades relativas aparentes en las distintas frecuencias. A intensidades altas, el odo es aproximadamente igual de sensible a la mayora de las frecuencias, pero a bajas intensidades el odo es mucho ms sensible a las frecuencias medias que a las extremas. Por tanto, un equipo de reproduccin de sonido que funciona perfectamente parecer no reproducir las notas ms graves y agudas si se reduce mucho la intensidad.

El efecto Doppler
El efecto Doppler se origina cuando hay un movimiento relativo entre la fuente sonora y el oyente cuando cualquiera de los dos se mueven con respecto al medio en el que las ondas se propagan. El resultado es la aparente variacin de la altura del sonido. Existe una variacin en la frecuencia que percibimos con la frecuencia que la fuente origina.

II - 8

Para entenderlo mejor supongamos que estamos parados en el anden de una estacin, a lo lejos un tren viene a gran velocidad con la sirena accionada, mientras el tren este lejos de nosotros oiremos el silbido de la sirena como una frecuencia determinada, cuando el tren pase delante nuestro y siga su camino, el sonido de la sirena cambia con respecto al estbamos oyendo y con respecto al que vamos a or una vez que el tren nos rebasa y sigue su camino. La frecuencia que aparente se puede determinar segn las siguientes frmulas: Fuente mvil fx = (c/(c-u))fs Receptor en movimiento: fx = ((c-v)/c)fs Ambos en movimiento: fx = ((c-v)/(c-u))fs fx = Frecuencia aparente c = Velocidad del sonido v = Velocidad del observador u = Velocidad de la fuente fs = Frecuencia de la fuente

Tres tipos de sonido importantes


En la voz, la msica y el ruido, es raro escuchar un tono puro. Una nota musical contiene, adems de la frecuencia fundamental, tonos ms agudos que son armnicos de la misma. La voz contiene una mezcla compleja de sonidos, de los que algunos (pero no todos) guardan una relacin armnica entre s. El ruido est formado por una mezcla de muchas frecuencias diferentes dentro de un determinado rango; por tanto, puede compararse con la luz blanca, que se compone de una mezcla de luces de los distintos colores. Los distintos ruidos se distinguen por sus diferentes distribuciones de energa en los distintos rangos de frecuencias. Cuando se transmite al odo un tono musical que contiene determinados armnicos del tono fundamental, pero carece de otros armnicos o del propio tono fundamental, el odo forma diferentes batidos o pulsaciones cuya frecuencia es la suma o la diferencia de los sonidos originales, con lo que producen los armnicos que faltan o el tono fundamental que no figura en el sonido original. Estas notas tambin son armnicos de la nota fundamental original. Esta respuesta incorrecta del odo puede resultar til. Por ejemplo, un equipo reproductor de sonido sin un altavoz grande no puede producir sonidos de tono ms grave que el do situado dos octavas por debajo del do central; sin embargo, el odo de una persona que escuche ese equipo puede proporcionar la nota fundamental a partir de las frecuencias de batido de sus armnicos. Otra imperfeccin del odo ante los sonidos ordinarios es la incapacidad de or notas de alta frecuencia cuando existen sonidos de baja frecuencia de intensidad considerable. Este fenmeno se denomina enmascaramiento. En general, para que se entienda el habla y se comprenda satisfactoriamente un tema musical basta reproducir las frecuencias entre 250 y 3.000 Hz (el rango de frecuencias de un telfono normal), aunque algunos sonidos como la zeta requieren frecuencias de hasta 6.000 Hz. Sin embargo, para que el efecto sea natural hay que reproducir el rango que va aproximadamente de 100 a 10.000 Hz. Los sonidos generados por unos pocos instrumentos musicales slo pueden reproducirse con naturalidad con frecuencias algo ms bajas, y algunos ruidos necesitan frecuencias ms altas.

Octava, media octava y tercio de octava


El termino de octava se toma de una escala musical, se considera el intervalo entre dos sonidos que tienen una relacin de frecuencias igual a 2 y que corresponde a ocho notas de dicha escala musical. Por ejemplo: si comenzamos con una nota como DO, la octava completa ser: DO-RE-MI-FA-SOL-LA-SI-DO. Si el primer DO estaba afinado en 440 Hz el segundo estar en 880 Hz, ya que hemos indicado que en la octava hay una relacin de frecuencias igual a 2. En el caso de un ecualizador grfico de una octava, las frecuencias centrales de los filtros podan ser las siguientes: 16 Hz - 31,5 Hz - 63 Hz - 125 Hz - 250 Hz - 500 Hz - 1kHz - 2 kHz - 4 kHz - 8 kHz - 16 kHz. En algunos casos la relacin de 2:1 de la octava no se cumple exactamente.

II - 9

Cuando se necesitan filtros de mayor precisin, de un ancho de banda mas estrecho, se puede dividir la octava en valores mas pequeos, por ejemplo: la media octava divide cada octava en dos, y por tanto tendremos el doble de puntos que en una octava, siguiendo con el ejemplo empleado en una octava tendramos: 16 Hz 22,4 Hz - 31,5 Hz - 45 Hz - 63 Hz - 90 Hz - 125 Hz - 180 Hz - 250 Hz - 355 Hz - 500 Hz - 710 Hz - 1kHz 1,4 kHz - 2 kHz - 2,8 kHz - 4 kHz - 5,6 kHz - 8 kHz - 11,2 kHz - 16 kHz. En el caso de un tercio de octava, cada intervalo de la octava se divide en tres partes con lo que tendremos tres veces mas de filtros para poder ajustar, quedando los cortes como siguen : 16 Hz - 20 Hz - 25 Hz - 31,5 Hz - 40 Hz - 50 Hz - 63 Hz - 80 Hz - 100 Hz - 125 Hz - 160 Hz - 200 Hz - 250 Hz - 315 Hz - 400 Hz - 500 Hz - 630 Hz - 800 Hz - 1 kHz - 1,25 kHz - 1,6 kHz - 2 kHz - 2,5 kHz - 3,15 kHz - 4 kHz - 5 kHz - 6,3 kHz - 8 kHz - 10 kHz - 12,5 kHz - 16 kHz

Filtro de ancho de banda constante


Un filtro de ancho de banda constante consiste bsicamente en un filtro de banda estrecha sintonizable y constante. Esto nos permite seleccionar la frecuencia central que deseamos y tambin el ancho de banda del filtro. El ancho de banda del filtro viene dado por el siguiente valor: w = f2 - f1 Siendo w = ancho de banda del filtro, f2 = frecuencia superior y f1 = frecuencia inferior. Y la frecuencia central del filtro se obtiene normalmente de: fc = Raz Cuadrada(f1*f2) La frecuencia central se puede ajustar a cualquier punto del espectro y mantienen siempre el mismo ancho de banda. Por ejemplo: supongamos que tenemos un filtro de ancho de banda constante con un ancho de banda de 20 Hz, si lo colocamos de forma que la frecuencia inferior sea 100 Hz (f1) la superior ser igual a 120 Hz y su frecuencia central ser 109,54 Hz aproximadamente. Si ahora nos desplazamos a un margen de frecuencias superior, f1 = 4.000 Hz, f2 ser igual a 4020 Hz y la frecuencia central ser 4010 Hz. Como se ve el ancho de banda siempre es constante y no varia al variar el punto de trabajo del filtro.

Filtro de ancho de banda proporcional


Los filtros de ancho de banda proporcional son filtros que cumplen la remisa de f2/f1 =constante, o sea que si dividimos la frecuencia superior por la inferior siempre nos tiene que dar un valor que sea constante, por lo que el ancho de banda es proporcional a la frecuencia central. En el caso de un filtro de octava y de tercio de octava la relacin de proporcin es: Octava f2/f1 = 2 Tercio de Octava f2/f1 = 2^(1/3) Como es fcil deducir el ancho de banda de este tipo de filtros varia al variar la frecuencia, cuanto mas subimos mayor es el ancho de banda, siempre manteniendo la proporcin expresada segn el filtro sea de octava, tercio etc. Cada vez que subimos una octava doblamos el ancho de banda del filtro. Por ejemplo supongamos que estamos trabajando con un filtro de 1/3 de octava y nos situamos en la frecuencia de 100 Hz tenemos que la frecuencia inmediatamente inferior es 80 Hz y la superior 125, podemos obtener la relacin de proporcionalidad del filtro segn: f2/f1 = constante 125/80 = 1,56 Podemos ver que tenemos un valor de 1,56 y que corresponde a un ancho de banda de f2-f1 = 125-80 = 45 Hz.

II - 10

Si ahora con el mismo valor de la proporcin (1,56) colocamos el filtro en la frecuencia central de 200 Hz en lugar de los 100 Hz de antes, veremos que la proporcin se mantiene pero el ancho de banda aumenta justo al doble: f2/f1 = 250/160 = 1,56 f2-f1 = 250 - 160 = 90 Hz Cada vez que subamos la frecuencia central aumentara el ancho de banda del filtro en la proporcin expresada (1 octava =2 y 1/3 octava = 2^(1/3)). Cada vez que doblamos la frecuencia se dobla el ancho de banda del filtro. Por lo tanto este tipo de filtros resultan mas precisos en las frecuencias bajas que en las altas, ya que en frecuencias como 8 kHz el ancho de banda aumenta hasta 3.700 Hz mientras que como hemos visto para el mismo filtro en la frecuencia de 100 Hz tiene un ancho de banda de 45 Hz. Los filtros proporcionales con resoluciones de octava, tercio etc son los mas utilizados tanto en analizadores como en ecualizadores para fines musicales y acsticos.

Disminucin espacial del nivel sonoro


Si tenemos una fuente sonora determinada, y estamos situados a una distancia de ella, al alejarnos o acercarnos el nivel de presin sonora varia segn las caractersticas de la fuente, el lugar donde se encuentre y la distancia entre otros factores. Podemos calcular el nivel de presin acstica dentro de un local en cualquier punto con la siguiente formula: Lp = Lw + 10 log ((Q/4*Pi*r*2)+(4/R)) Lp = Nivel de presin sonora. Lw = Nivel de potencia de la fuente sonora en dB. Q = Directividad de la fuente sonora. r = distancia entre la fuente y el punto de medida en metros. R = constante acstica del local (m2). En espacios al aire libre se considera que cada vez que se dobla la distancia entre la fuente sonora y el oyente, se disminuye el nivel sonoro en 6 dB. Por ejemplo supongamos que estamos escuchando un altavoz a una distancia de 10 metros, si utilizamos un sonmetro y medimos el nivel de presin acstica obtenemos un valor supuesto de 80 dB, si ahora nos distanciamos 10 metros mas, o sea doblamos la distancia del punto inicial, obtendremos una lectura de 74 dB, 6 dB menos que en el primer punto, si por ultimo nos alejamos 20 metros de este ultimo punto, doblando as su distancia, estamos a 40 metros de la fuente, obtendremos tambin un descenso de 6 dB, tendremos por tanto, 68 dB.

Micrfono
El micrfono es dispositivo que se utiliza para transformar la energa del sonido en energa elctrica, durante el proceso de grabacin y reproduccin de sonido. Los micrfonos constituyen un elemento esencial en muchos tipos de sistemas de comunicaciones y de instrumentos de medida de sonido y ruido. El inventor Alexander Graham Bell cre en 1876 el primer micrfono durante la construccin del telfono. La variante ms sencilla de los telfonos modernos es el micrfono de carbn, utilizado en los telfonos. Est compuesto por un disco metlico relleno de grnulos de carbn, recubierto por un diafragma metlico mvil. El disco y el diafragma disponen de unos cables que van conectados a un circuito elctrico, de forma que a travs de los grnulos de carbn pasa una corriente elctrica. Las ondas sonoras hacen vibrar el diafragma, alterando la presin sobre los grnulos de carbn. La resistencia elctrica de los grnulos vara con la presin, haciendo que la corriente se modifique en el circuito con las vibraciones del diafragma. La corriente puede activar un telfono cercano o se puede amplificar y transmitir hasta un receptor remoto. La amplificacin de las variaciones de la corriente se puede utilizar tambin para modular un transmisor de radio. Otra variante muy corriente, el micrfono de cristal, emplea cristales piezoelctricos, en los que se origina un voltaje entre las dos caras del cristal cuando se le aplica una presin. En este tipo de

II - 11

micrfono las ondas sonoras hacen vibrar un diafragma que a su vez modifica la presin sobre un cristal piezoelctrico, lo cual genera un pequeo voltaje que ms tarde se amplifica. Entre los micrfonos dinmicos se encuentran los micrfonos de cinta y los de bobina mvil. Los primeros llevan una fina cinta metlica adherida al diafragma, colocado en el seno de un campo magntico. Cuando la onda sonora incide sobre el diafragma y hace vibrar la cinta, en sta se genera un pequeo voltaje por induccin electromagntica. El funcionamiento del micrfono de bobina mvil se basa prcticamente en el mismo principio, pero posee una bobina de hilo fino en lugar de una cinta. Algunos micrfonos modernos, diseados para captar solamente sonidos unidireccionales, llevan una combinacin de cinta y de bobina. Otro tipo es el micrfono de condensador. Posee dos finas lminas metlicas muy prximas, que actan como un condensador. La lmina posterior va fija, mientras que la anterior hace de diafragma. Las ondas sonoras modifican la distancia entre las lminas, alterando la capacitancia elctrica entre ambas. Si se integra un micrfono de este tipo en el correspondiente circuito, se pueden amplificar las variaciones y producir una seal elctrica. Este tipo de micrfonos suelen ser muy pequeos. En los audfonos se utiliza otro tipo muy habitual, el micrfono de condensador de electretos. Las caractersticas ms importantes de cualquier micrfono son su respuesta en frecuencia, direccionalidad, sensibilidad e inmunidad a las perturbaciones externas como golpes o vibraciones.

Bibliografa
Biblioteca Encarta. Apuntes de Sonido digital por Antonio Sacco. www.antoniosaco.com.ar www.gui.uva.es/login/14/sonido1.html

II - 12

Captulo 3 Ruido
Introduccin
El ruido, en fsica, es una seal acstica, elctrica o electrnica formada por una mezcla aleatoria de longitudes de onda. En teora de la informacin, el trmino ruido designa una seal que no contiene informacin. En acstica, el llamado ruido blanco est formado por todas las frecuencias audibles, igual que la luz blanca est formada por todas las frecuencias visibles. El ruido tambin es una nocin subjetiva aplicada a cualquier sonido no deseado. La contaminacin acstica debida al ruido es un grave problema medioambiental, sobre todo si se considera que los niveles de sonido superiores a una determinada intensidad pueden causar daos fsicos.

Ruido rosa
El ruido rosa es un ruido cuyo nivel sonoro esta caracterizado por un descenso de tres decibelios por octava. Cuando el ruido rosa se visualiza en un analizador con filtros de octava, el ruido se ve como si todas las bandas de octava tuviesen el mismo nivel sonoro, lo cual es cierto, pero el ruido rosa no tiene el mismo nivel en todas las frecuencias. Esto ocurre por que como hemos visto los filtros de octava, tercio etc, son filtros proporcionales y por tanto cada vez que subimos una octava, doblamos el ancho de banda y por ese motivo el ruido rosa decrece 3 dB por octava, justo la proporcin en que aumenta el ancho de banda, el doble. De esta forma visualizamos el ruido rosa como un ruido de nivel constante en todas las bandas de octava. Se utiliza para analizar el comportamiento de salas, altavoces, equipos de sonido etc. Es una seal conocida, mismo nivel en todas las bandas (sonido "plano") , y si lo amplificamos con un altavoz dentro de una sala podemos conocer datos sobre el comportamiento acstico del altavoz, la sala etc. Normalmente se genera entre 20 Hz y 20 kHz. Su sonido es muy parecido al que podemos or cuando se sintoniza entre dos emisoras de FM, en el espacio que se recibe nicamente el ruido, es como un soplido.

Ruido blanco
El ruido blanco es un ruido cuyo nivel es constante en todas las frecuencias. Si lo visualizamos con un analizador con filtros de octava, veremos que el espectro mostrado no es lineal como hemos dicho que es el ruido blanco, si no que aumenta 3 dB por octava. Esto se debe al mismo fenmeno que con el ruido rosa, al doblar la octava se dobla el ancho de banda y si se tenemos el mismo nivel sonoro en todas las frecuencias, el nivel sonoro por octava se doblara y aumentara 3 dB con respecto al anterior.

Contaminacin acstica
Se refiere al ruido cuando ste se convierte en un sonido molesto que puede producir efectos fisiolgicos y psicolgicos nocivos para las personas, llegando tambin a afectar a poblaciones de animales. La causa principal de la contaminacin acstica es la actividad humana: el transporte, la construccin de edificios y obras pblicas y la industria, entre otras. Los efectos producidos por el ruido pueden ser fisiolgicos, como la prdida de audicin o el insomnio, y psicolgicos, como la irritabilidad exagerada. El ruido viene siendo un problema para la humanidad desde muy antiguo, existiendo referencias escritas sobre este problema ya desde la poca de la Roma imperial. Las primeras normas conocidas relativas a la contaminacin acstica datan del siglo XV, cuando en la ciudad de Berna se prohibi la circulacin de carretas que, por su estado, pudieran producir ruidos excesivos que molestasen a los ciudadanos. En el siglo XVI, en Zurich se dict una norma que prohiba hacer ruidos por la noche para no alterar el descanso de los ciudadanos. En la actualidad, cada pas ha desarrollado la legislacin especfica correspondiente para regular el ruido y los problemas que ste conlleva. El ruido se mide en decibelios (dB); los equipos de medida ms utilizados son los sonmetros. Un informe publicado en 1995 por la Universidad de Estocolmo para la Organizacin Mundial de la Salud (OMS), considera los 50 dB como el lmite superior deseable, si bien las molestias generalizadas en la

III - 1

poblacin ocurren a partir de los 85 dB. Entre 0 y 20 dB se considera que el ambiente es silencioso; hasta 60 dB se considera que hay poco ruido; entre los 80 y los 100 dB se considera que el ambiente es muy ruidoso; y sobrepasando este umbral el ruido se hace intolerable. Como ejemplos, valga decir que el sonido ambiente en un bosque sin perturbaciones ajenas a ese medio rara vez alcanza los 20 dB (normalmente se encuentra alrededor de 15 dB), sonido que slo se sobrepasa ligeramente en un dormitorio. En una biblioteca o en la sala de estar de una vivienda el ruido oscila entre 30 y 40 dB, mientras que en una oficina tpica el ambiente soporta un ruido de unos 65 dB. El ruido del trfico de una ciudad est en un nivel de unos 85 dB, el de un camin pesado circulando en 90 dB, el de un martillo neumtico en una obra en 100 dB, y el de un avin despegando entre los 120 y los 130 dB.

Clasificacin.
El ruido puede clasificarse por su duracin, intensidad, regularidad, impacto (rapidez con que se eleva la intensidad) o fluctuacin, entre otros factores. Existe contaminacin acstica natural, como la producida por las erupciones volcnicas, las emanaciones violentas de los giseres, la corriente de un ro o el ruido de una colonia de gaviotas, entre otros ejemplos. Existen medidas destinadas a mitigar o disminuir el nivel de inmisin de ruido (el ruido que recibimos) en zonas donde ste es excesivamente alto, por ejemplo en las viviendas cercanas a un aeropuerto. Es el caso de la instalacin de dobles ventanas o la colocacin de estructuras de hormign o de metacrilato, o de muros de tierra en zonas prximas a vas de comunicacin.

Bibliografa
Biblioteca Encarta. Apuntes de Sonido digital por Antonio Sacco. www.antoniosaco.com.ar www.gui.uva.es/login/14/sonido1.html

III - 2

Captulo 4 Muestreo de seales


Introduccin Bajo ciertas condiciones, una seal se puede representar, y reconstruir completamente, partiendo del conocimiento de sus valores instantneos, o muestras, igualmente espaciados en el tiempo. Esta propiedad deriva de un resultado bsico que se conoce como el teorema del muestreo. El teorema del muestreo hace de nexo entre seales de tiempo continuo con seales de tiempo discreto, ya que una seal de tiempo continuo mediante una secuencia de muestras instantneas proporciona un mecanismo para representar una seal de tiempo continuo mediante una seal de tiempo discreto. En muchos contextos, el procesamiento de seales de tiempo discreto es ms flexible y a menudo preferible al procesamiento de seales de tiempo continuo, en parte debido a la creciente disponibilidad de sistemas digitales y de tiempo discreto de bajo costo, ligeros, programables y fcilmente reproducibles. Esta tecnologa tambin ofrece la posibilidad de explorar el concepto de muestreo para convertir una seal de tiempo continuo a una seal de tiempo discreto. Despus de procesar la seal de tiempo discreto empleando un sistema de tiempo discreto, podemos convertirla de nuevo a tiempo continuo. Representacin de una seal de tiempo continuo mediante sus muestras: el teorema del muestreo. Si a una seal x(t) de banda limitada se modula en amplitud con un tren de pulsos peridicos, lo que corresponde a extraer segmentos de tiempos igualmente espaciados se puede recuperar exactamente mediante un filtrado pasa bajos si la frecuencia fundamental del tren de pulsos modulador es mayor que el doble de la frecuencia mas alta presente en x(t). Adems la habilidad para recuperar x(t) es independiente de la duracin en tiempo de los pulsos individuales. Entonces, conforme esta duracin se hace mas pequea, la modulacin de los pulsos est, en efecto, representando a la seal x(t) mediante muestras instantneas igualmente espaciadas en el tiempo.

IV - 1

Muestreo con tren de impulsos.

El tren de impulsos p(t) se conoce como la funcin de muestreo, el periodo T como el periodo de muestreo y la frecuencia fundamental de p(t), tenemos: donde

ws = 2

, como la frecuencia de muestreo. En el dominio del tiempo

x p = x(t ) p (t )

p (t ) =
T, esto es:

n =

(t nT )

x p (t ) es un tren de impulsos cuya amplitudes son iguales a las muestras de x(t) en intervalos espaciados por

X p (t ) =
de la propiedad de modulacin:

n =

x(nT )(t nT )
1 [X ( ) * P( )] 2

X p (t ) =
y sabiendo que:

P( ) =
de manera que:

2 T

n =

( k )
s

X p ( ) =
Esto es, de X(w) desplazadas y escaladas por 1/T.

1 + X ( k s ) T n =

x p ( ) es una funcin peridica en el dominio de la frecuencia que consiste de una suma de replicas

IV - 2

Si la frecuencia de muestreo es menor a la frecuencia de la seal muestreada se produce un efecto llamado traslape en donde los espectros de la seal muestreada se superponen entre si .

Por lo tanto si Ws>2Wm x(t) se puede recuperar exactamente a partir de

x p (t ) por medio de un filtro pasa

bajos con ganancia T y una frecuencia de corte mayor a Wm y menor que Ws Wm. Este resultado bsico, conocido como teorema del muestreo se puede expresar como sigue: Teorema del muestreo: Sea x(t) una seal de banda limitada con X(w)=0 para unvocamente por sus muestras x(nT), n = 0,1,2,3,... si

> m .

Entonces x(t) esta determinada

> 2 m
donde:

s =

Dadas estas muestras, podemos reconstruir x(t) generando un tren de impulsos peridicos en el que los impulsos sucesivos tienen amplitudes que corresponden a valores de muestras sucesivas. Este tren de impulsos es entonces procesado a travs de un filtro pasa bajos ideal con ganancia T y cuya frecuencia de corte es mayor que Wm y menor que (Ws-Wm). La salida resultante ser exactamente igual a x(t). La frecuencia de muestreo tambin se conoce como la frecuencia de Nyquist. La frecuencia 2Wm que, bajo el teorema del muestreo, debe ser excedida por la frecuencia de muestreo, se denomina por lo comn como la velocidad de Nyquist.

2 T

IV - 3

Muestreo con retenedor de orden cero. El teorema del muestreo establece el hecho de que una seal de banda limitada est representada de manera univoca por sus muestras y su motivacin reside en el muestreo por un tren de impulsos. En la practica, los pulsos angostos de gran amplitud, que se aproximan a impulsos, son relativamente difciles de lograr, y con frecuencia es mas conveniente generar la seal muestreada mediante el dispositivo conocido como retenedor de orden cero. Tal sistema muestrea la seal x(t) en determinados instantes de muestreo subsecuentes.

La reconstruccin de x(t) a partir de la salida de un retenedor de orden cero puede d nuevo llevarse a cabo mediante filtrado pasa bajos. Sin embargo, en este caso, el filtro requerido ya no tiene ganancia constante en la banda de paso.

Bibliografa
Seales y sistemas (Alan V. Oppenheim; Alan S. Willsky).

Materia Integrada
Anlisis de seales y sistemas. Tema Muestreo de seales.

IV - 4

Captulo 5 Conversin de seales analgicas a digitales.


Introduccin
Una seal de audio es captada por un micrfono como una seal elctrica analgica. Se dice que una seal es analgica, cuando la misma est formada por valores continuos, tanto en el tiempo como en amplitud.

Si bien esta seal puede ser procesada en forma analgica por medios electrnicos, para su procesamiento en una computadora es necesario digitalizarla. Este proceso de digitalizacin se realiza con un dispositivo conocido como conversor analgico digital o (ADC por sus siglas en ingls), y se lleva a cabo en dos pasos: muestreo y discretizacin. El primer paso se conoce con el nombre de muestreo, y consiste en tomar muestras de la seal en forma peridica.

El segundo paso se conoce como discretizacin, y consiste en aproximar el valor continuo a una escala discreta.

El resultado es una secuencia finita de valores enteros, que pueden ser procesados digitalmente:

La precisin con la cual de lleve a cabo la digitalizacin determinar la calidad de la onda, y est gobernada principalmente por dos parmetros: frecuencia de muestreo y precisin de discretizacin. Digitalizacin del sonido: Velocidad de Muestreo y Cuantizacin Digitalizar un sonido abarca dos procesos: Muestreo y Cuantizacin. El Muestreo consiste en tomar informacin a cerca de la variacin de la frecuencia de un sonido, tomando una cierta cantidad de muestras por segundo, de modo que luego uniendo las muestras tomadas, sea posible reproducir o volver a "armar" el sonido original. Al proceso de toma de muestras antes mencionado se lo denomina tambin "SAMPLEO" y cuanto ms muestras se tomen por segundo, mayor ser la aproximacin al sonido original. Ahora bien para samplear sonidos audibles, que se encuentran en el rango de frecuencias de 20Hz a 20Khz sin prdida de informacin, est comprobado que hay que samplearlos al doble de la frecuencia ms alta, es decir a 44Khz. Hacer un muestreo a 44 Khz significa tomar 44.000 muestras por segundo (a esta frecuencia se samplea el sonido que escuchamos en los CD de audio comerciales). El proceso de Cuantizacin apunta a determinar cuantos valores posibles pueden tener las muestras tomadas. Esto tiene una relacin directa con la con la cantidad de bits asignados a cada muestra. Resulta claro que se lograr ms fidelidad al sonido original tomando muestras de 16 bit que de 8.

V- 1

Cuanto ms grande es la velocidad de muestreo y la cantidad de bits por muestra mayor ser el archivo de sonido que se genere. Tambin ser mayor un archivo Estreo que uno Mono. Es por esto que en la actualidad se han creado formatos de archivo comprimidos como el PCM y el ADPCM.

Ventajas del audio digital Las ventajas sobre el audio analgico que lo hacen insustituible son: En primer lugar permite ser almacenado en forma inalterable. Dado que lo que se almacenan son nmeros, es decir smbolos, es mucho ms difcil alterar la informacin guardada que en el caso en que se guarda un campo magntico proporcional a la seal, como en un cassette. Otra ventaja es que permite aprovechar la tecnologa de procesamiento digital de seales para introducir efectos, modificaciones o mejoras imposibles o muy difciles de lograr analgicamente. Por ejemplo, es posible conseguir retardos, efectos de reverberacin, supresin de ruido, etc. Pasaje de una seal elctrica a una seal digital Se utiliza un proceso de muestreo (discretizacin en el tiempo) y digitalizacin (discretizacin en amplitud). El muestreo consiste en tomar valores de la seal a intervalos regulares de tiempo. La digitalizacin consiste en subdividir el rango til total de la seal en cierta cantidad de "casilleros" o subintervalos numerados, y asignar a cada muestra el nmero de subintervalo en el cual se encuentra. Por ejemplo, si el rango de una seal que vara entre 0 y 10 V se subdivide en 16 subintervalos, a una muestra de 7,3 V se le asignar un nmero igual a la parte entera de 7,3*16/10 = 11,68, es decir 11. Este proceso es llevado a cabo por un conversor analgico/digital.

Cantidad de subintervalos en que se divide el rango til de la seal Normalmente se elige como una potencia de 2, de manera que los valores asignados a las muestras estn entre 0 y 2n - 1, donde n corresponde a la cantidad de bits, es decir de dgitos binarios. Resolucin de un sistema de audio digital Es la cantidad de bits que se utiliza para representar las muestras de audio, es decir la cantidad de bits que conforman cada palabra. Cuanto mayor sea la resolucin, ms precisa ser la representacin. Por ejemplo, con una resolucin de 8 bits, el rango de variacin de la seal se divide en 256 subintervalos, mientras que con una resolucin de 16 bits lo hace en 65536 subintervalos, cuya amplitud ser, por consiguiente, mucho menor. El audio digital para el consumo masivo (por ejemplo el CD o las placas de sonido de las computadoras) tiene una resolucin de 16 bits. En sistemas de audio profesional se utilizan 20 bits y an 24 bits

V- 2

Frecuencia de muestreo Tambin llamada tasa de muestreo, es la cantidad de muestras por unidad de tiempo. Cuanto mayor sea, mayor es la respuesta en frecuencia del sistema. El estndar para los discos compactos (CD) es de 44,1 kHz. La frecuencia de muestreo debe ser mayor que el doble de la mxima frecuencia fmx presente en la seal. Esta condicin se denomina condicin de Nyquist. Obsrvese que no es suficiente que sea mayor que el doble de la mxima frecuencia til, ya que si hay ruido por encima de sta, podra producirse un tipo de distorsin denominado aliasing. Segn el denominado teorema del muestreo, si se muestrea con una frecuencia que no cumple la condicin de Nyquist al intentar reconstruir la seal se generan frecuencias espurias que no estaban presentes originalmente. Supongamos, por ejemplo, que queremos muestrear una seal audible que contiene adems un ruido de 35 kHz. Si utilizamos la frecuencia normalizada de 44,1 kHz, a pesar de que ese ruido es originalmente inaudible (por ser mayor que el lmite superior de 20 kHz del odo humano), al intentar recuperar la seal aparecer un ruido de 9,1 kHz (= 44,1 kHz - 35 kHz), que es perfectamente audible. Este tipo de frecuencias que aparecen dentro del espectro til se denominan frecuencias "alias". En ese caso hay que actuar sobre la seal. Se utiliza un filtro antialias, que suprime todas las frecuencias por encima de la frecuencia de Nyquist, es decir la mitad de la frecuencia de muestreo fM. En el caso del CD, que utiliza una frecuencia de muestreo de 44,1 kHz, el filtro antialias debe conservar todas las frecuencias por debajo de 20 kHz y eliminar todas las que estn por encima de 22,05 kHz (= 44,1 kHz / 2 ). Reconstruccin de la seal digitalizada Se utiliza un conversor digital/analgico. Este dispositivo recibe las sucesivas muestras digitalizadas y las transforma en valores de tensin elctrica mediante un factor de escala. Por ejemplo, si el factor de escala es de 10/16 V, una muestra igual a 11 se transformar en un valor de tensin de 11*10/16 = 6,875 V. El valor de tensin que corresponde a cada muestra se mantiene constante hasta que llega la prxima muestra. Resulta as una onda escalonada formada por tramos constantes. Estas seales no presentan un efecto importante al momento de escuchar el sonido, ya que genera frecuencias por encima del espectro audible. Sin embargo, es conveniente agregar un filtro de suavizado que limite el contenido de frecuencias a lo estrictamente necesario, para evitar la presencia de frecuencias que podran interferir con otros procesos, produciendo batidos audibles, por ejemplo. A su vez la seal reconstruida no coincide exactamente con la original por que si comparamos la seal original con la seal reconstruida vemos, por ejemplo, que un valor de seal de 7,3 V se "reconstruy" como 6,875 V, introducindose un error de -0,425 V. El error ser tanto menor cuanto ms pequeos sean los subintervalos en que se divide el rango til de la seal, es decir, cuanto mayor sea la resolucin en bits. La evolucin en el tiempo de este error se denomina ruido de digitalizacin. Relacin entre el ruido de digitalizacin y la resolucin La mejor manera de evaluar el ruido de cualquier sistema (incluidos los de audio digital) es a travs de la relacin seal / ruido (S/R) en decibeles. Para el audio digital, la mxima S/R que puede obtenerse es, aproximadamente, igual a 6*n, donde n es la resolucin en bits. Por ejemplo, un sistema de 16 bits, como el disco compacto (CD), admite una S/R de 6*16 = 96 dB. Nota: Debido a limitaciones en la parte analgica, la S/R suele ser menor que ese valor, por ejemplo 90 dB. Una resolucin de 24 bits implica una relacin seal / ruido de 144 dB. Ello significa que si la seal es de 4 V (un valor considerado muy alto para una seal de nivel de lnea), entonces el ruido de digitalizacin estar 144 dB por debajo, que son 0,25 microvolts (esto significa que el salto que se produce entre el escaln correspondiente a un valor digital y el escaln que le sigue es de 0,25 microvolt). Ahora bien, casi todas las salidas de lnea tienen una resistencia (impedancia) de salida del orden de 100 ohms. Toda resistencia tiene un ruido elctrico (de origen trmico) que, calculado para este valor de resistencia, da 0,18 microvolt. Esto significa que con 24 bits estamos prcticamente al lmite de lo que puede lograrse con la electrnica analgica. La mayor relacin S/R que idealmente podra lograrse con una resolucin mayor sera inaprovechable a causa del ruido trmico. Por otra parte, el ruido circuital no es slo trmico. Los semiconductores en general producen bastante ruido, siendo muy raros (y costosos) los circuitos con relaciones seal / ruido mayores de 120 dB. La relacin seal / ruido necesaria para una buena calidad de reproduccin debera ser comparable con el rango dinmico del odo, que es la diferencia entre el umbral de dolor y el umbral de audicin. En el caso ms extremo, es decir el de personas jvenes con excelente audicin, estos umbrales estn cerca de 120 dB y 0 dB

V- 3

respectivamente, por lo cual una relacin seal / ruido de 120 dB debera ser suficiente para las mayores exigencias. Sin embargo, en general las condiciones de escucha normales no permiten llevar a la prctica esta relacin seal / ruido, ya que es muy difcil lograr ambientes con ruido de fondo inferior a 20 dB. Por lo tanto una relacin seal / ruido de 100 dB debera resultar suficiente en la mayor parte de los casos. El trabajar con 20 bits y 24 bits, obteniendo relaciones S/R de 120 dB y 144 dB respectivamente, permite una mejor calidad en la conversin. Un conversor de 20 bits es mucho ms lineal y tiene menor ruido que uno de slo 16 y a su vez aportan formatos directamente compatibles con las nuevas tecnologas (por ejemplo el DVD). Dither Cuando se est digitalizando una seal de muy poca amplitud, los saltos discretos entre escalones sucesivos adquieren una dimensin comparable con la amplitud de la propia seal. Esto implica que la forma de onda sufre una distorsin que resulta ser perfectamente audible y molesta. Esto es porque adems del espectro del sonido propiamente dicho se agregan sus armnicos, que contienen energa concentrada en el espectro en frecuencias discretas. En otras palabras, la energa del ruido de digitalizacin est concentrada. Se ha encontrado que si, antes del muestreo, se agrega una pequea cantidad de ruido aleatorio (de espectro continuo y no discreto), al cabo del proceso de digitalizacin la seal resultante tambin tiene la energa correspondiente al ruido de digitalizacin distribuida, en lugar de concentrada. Desde el punto de vista de la relacin seal / ruido, hubo un ligero empeoramiento, pero desde el punto de vista perceptivo, el ruido se ha vuelto mucho ms tolerable e imperceptible. Hasta se puede trabajar con la forma de su espectro para hacerlo menos notorio. El ruido agregado se denomina dither. Dither digital Esto sucede en los procesos de recuantizacin para pasar, por ejemplo, de 24 bits a 16 bits. Si simplemente se truncaran los 8 bits menos significativos, estaramos en presencia de algo equivalente a un muestreo y digitalizacin sin dither. En este caso, podra agregarse un dither generado analgicamente, pero tambin es posible agregar uno producido digitalmente en la forma de una sucesin de nmeros pseudo aleatorios (es decir, obtenidos por un algoritmo de cmputo que si bien es determinstico aparenta ser aleatorio). Este dither se genera con la resolucin original (ms alta), y luego simplemente se redondea. Reproduccin La reproduccin de la seal se realiza en forma inversa, utilizando un conversor digital analgico (o DAC por sus siglas en ingls). Procesamiento digital El procesamiento digital de seales de audio presenta numerosas ventajas frente al analgico: Es posible cuantificar la distorsin que sufrir la seal por los procesos de conversin A/D y D/A La seal digital no sufre distorsin Puede hardware genrico y de bajo costo para el procesamiento de la seal, el cual puede ser fcilmente modificado Permite un aprovechamiento de canales de transmisin en forma ms eficiente Pueden utilizarse algoritmos de compresin de datos para optimizar canales de transmisin y almacenamiento El proceso completo se muestra en el siguiente diagrama:

Bibliografa
Entrada/Salida de sonido en Windows Gabriel Agustn Praino, Facultad de Ingeniera, Universidad de Bs. As. SONIDO DIGITAL Universidad de Concepcin, Departamento de Ingeniera Industrial

V- 4

Apuntes de Sonido digital por Antonio Sacco. www.antoniosaco.com.ar Universidad de Concepcin /Departamento de Ingeniera Industrial. Apuntes de Sistemas de Computacin www.udec.com

Materia Integrada
Anlisis de seales y sistemas. Tema: Muestreo de seales. Tcnicas Digitales II, Tema: Conversores A/D, D/A. Medidas electrnicas II, Tema: Conversores A/D, D/A.

V- 5

Captulo 6 Sntesis del sonido


Introduccin. Como ya sabemos la onda sonora es bastante compleja si consideramos que adems de intensidad, tono y timbre se debe tener en cuenta la envolvente de sta. Pero an as, los hallazgos de Fourier demostraron que cualquier onda, por compleja que sea, puede reconstruirse a partir de la suma de ondas simples, a veces infinitas; y que bastan slo unos pocos componentes para aproximarse al sonido real con un grado de precisin aceptable. La aplicacin de este principio nos introduce directamente en la produccin electrnica del sonido a partir de unos sonidos simples. Es lo que se llama sntesis digital del sonido. Sintetizadores Se les llama sintetizadores a los instrumentos musicales electrnicos capaces de generar sonido. Esto lo hacen manipulando en tiempo real diversos parmetros como: intensidad, tono, timbre y componentes de la envolvente. Los sintetizadores son polifnicos, es decir, producen varias notas (instrumentos, sonidos o voces) a la vez; y por otro lado pueden ser politmbricos (para cada voz), con lo que se parecen a los instrumentos tradicionales. La sntesis del sonido es producto de unin de tres componentes: oscilador, filtro y amplificador. Los osciladores: generan el tono fundamental del sonido. Son los mdulos VCO (Voltage Controlled Oscillator) u osciladores por control de tensin, que producen una serie de fluctuaciones de tensin que son la representacin elctrica de la frecuencia de las vibraciones. Los filtros: modelan el sonido y generan aproximadamente el timbre. Son los mdulos VCF (Voltage Controlled Filter) o filtros por control de tensin los que filtran ciertas frecuencias en beneficio de otras. Los VCF ms importantes son los lowpass o filtros de paso bajo que filtran las frecuencias altas dejando pasar las bajas y los highpass o filtros de paso alto que filtran las frecuencias bajas dejando pasar las altas. Los filtros estn caracterizados por el punto de corte (Cut Off) que cortar las frecuencias que sean inferiores o superiores a este valor. Los amplificadores: regulan el volumen y por tanto intervienen sobre la intensidad del sonido. Generalmente se le llaman mdulos VCA (Voltage Controlled Amplifier) o amplificadores por control de tensin. Existen mdulos adicionales controladores que perfilan an ms la onda producida: el generador de envolvente (EG: Envelope Generator) y el oscilador de baja frecuencia (LFO: Low Frequency Oscillator). El generador de envolvente permite controlar los cuatro parmetros de la envolvente ataque (A), cada (C), parte sostenida (S) y extincin (R) o incluso combinaciones selectivas hablndose de AR, ADR, DADSR. La arquitectura clsica de los sintetizadores est basada en la sntesis sustractiva, cuyo nombre procede del hecho de que los timbres de las notas se conforman eliminado o filtrando armnicos. Existen otras tecnologas de sntesis como la sntesis aditiva, que recompone las formas sonoras desde cero controlando la amplitud de cada armnico de los 16 o 32 existentes por tono lo que demanda clculo intensivo y la sntesis FM que modula las frecuencias de uno o varios osciladores con las de otros, etc.

Procesamiento del sonido digitalizado


Una vez que tenemos el sonido digitalizado, los valores numricos pueden ser sometidos a diversas operaciones de transformacin. Esto es lo que se conoce como Procesamiento de Sonido; aunque existen mltiples formas de procesar sonido, con mltiples propsitos (efectos especiales, eliminacin de ruido, etc.), las operaciones ms elementales son: Aumento o disminucin de volumen: Consiste en incrementar o disminuir los valores de amplitud de una onda. Esta variacin suele hacerse en una tasa fija para toda la onda (se suele expresar en %). Una variante es el Fade, que consiste en la atenuacin gradual y progresiva del volumen en una parte determinada de la onda, o la inversa (el aumento gradual y progresivo de volumen). Filtrado: Consiste en seleccionar determinadas bandas de frecuencias en un sonido y someterlas a alguna operacin (por ejemplo, silenciarlas o atenuarlas, o las operaciones inversas) Mezcla: Consiste en juntar o superponer dos sonidos diferentes, digitalizados de antemano. Juntos formarn una sola onda; generalmente, es posible especificar valores de volumen diferentes para cada sonido

VI - 1

individual. Una variante es la produccin de un sonido estreo, de forma que cada una de las ondas originales ocupe un canal Cortado y pegado: Consiste en la posibilidad de eliminar o insertar partes de un sonido en determinados lugares de una onda. Con programas Windows, esto suele hacerse a travs del Portapapeles. Procesamiento digital de seales: Filtro pasa altos s[n] = s[n] - s[n-1] Filtro pasa bajos s[n] = (s[n] + s[n-1] + s[n-2]) / 3 Eco s[n] = s[n] + a * s[n-r] donde: s[n] es la n-esima muestra de la seal a es un factor de atenuacin (entre 0 y 1) r es un retardo (mayor a 0)

Software de Edicin y reproduccin


Los programas que permiten editar msica y sonido se diferencian segn el tipo de archivos que manejan, ya sea basados en partitura (MIDI, MOD...) o en muestreo (WAV, MP3...). Actualmente, casi todas las tarjetas de sonido incluyen software propietario tanto para la edicin como para la reproduccin de sonidos. Algunos permiten agregar instrumentos basados en nuevos muestreos, para las tarjetas de sonido que soportan tablas de voces por software. Otra caracterstica comn para este tipo de programas es que si se dispone de un instrumento digital, ste puede conectarse al puerto MIDI/Joystick para grabar sesiones en vivo. De esta forma se pueden registrar las notas que han sido interpretadas durante la ejecucin; sin embargo los instrumentos musicales (voces) sern reemplazados por aquellos que estn disponibles en la tarjeta de sonido. Por otro lado, los editores de sonidos digitales, se caracterizan por su capacidad para soportar mltiples tipos de archivos, de manera de incluir la mayor cantidad de estndares de la industria. Como el tamao de un archivo de sonido es un tema a tener en consideracin, la calidad del software estar en relacin a la capacidad que tenga de aprovechar los diferentes algoritmos de compresin de audio. Tambin es posible encontrar editores de sonido en tiempo real. Los programas reproductores de audio generalmente soportan todo tipo de formato incluyendo audio digital y MIDI. El Windows Media Player de Microsoft, puede manejar una extensa variedad de archivos de sonido y video, o bien reproducir pistas de CD. Bibliografa: SONIDO DIGITAL Universidad de Concepcin, Departamento de Ingeniera Industrial

VI - 2

Captulo7 Tarjetas de sonido


Introduccin
Una tarjeta de sonido es el dispositivo de hardware encargado de la reproduccin de sonido. Es el nexo entre una seal de sonido analgica y una digital, es decir, es la unidad que permite el traspaso de las seales a dispositivos multimedia externos (parlantes, grabador o reproductor de CD, etc). Es una tarjeta de expansin que permite que el computador genere, manipule y enve sonidos. De su calidad depender directamente el sonido reproducido por nuestro equipo, pero en general, las tarjetas de sonido permiten al computador: _Enviar sonidos a los parlantes o a un equipo conectado a la tarjeta. _Grabar sonido desde un micrfono conectado al computador. _Manipular sonido almacenado en el disco duro. Sus principales funciones son: _Capturar las seales procedentes del exterior, ya sea a travs de dispositivos capaces de generar una seal de onda, como por ejemplo un equipo de msica . _Reproducir sonidos de naturaleza digital. Los componentes principales, que pertenecen a la mayora de las tarjetas de sonido son los Jacks y los Conectores. Un Jack es la interfaz de conexin de un solo orificio, que permiten conectar otros dispositivos a la tarjeta de sonido, uno por orificio. Se encuentra en el panel posterior de la tarjeta. Los conectores son interfaces de la tarjeta de sonido que le permiten conectar otros dispositivos a la tarjeta. Componentes fundamentales de una placa de sonido La tarjeta de sonido es la encargada de convertir la informacin digital procesada por nuestro equipo en datos analgicos , o sonidos, para que sean reproducidos por unos parlantes conectados a la propia tarjeta de sonido. Igualmente, los sonidos analgicos introducidos por medio de un micrfono, un equipo de msica conectado a LINE-IN, o un instrumento musical conectado al puerto MIDI, son transformados en informacin digital para que sea reconocida y procesada por el equipo. Por ltimo, la tarjeta de sonido es la encargada de reproducir por medio de los parlantes conectados a ella las pistas musicales de un COMPACT DISC de msica insertado en nuestra unidad de CD-ROM. Para ello, el CD-ROM y la TARJETA DE SONIDO deben estar conectados por un cable que normalmente viene incluido con las unidades de CD-ROM. El muestreo La capacidad de muestreo es uno de los factores ms importantes en la calidad de una tarjeta de sonido. Es la velocidad a la cual la tarjeta de sonido toma muestras (medida en KHz), las velocidades de muestreo normalmente son de 11.025 KHz, 22.050 KHz, y 44.1 KHz. El tamao de la muestra Determina la calidad del sonido, los tamaos de muestra ms comunes son de 8, 12, 16, 20 y 32 bits. MIDI (musical instrument digital interfase) Casi todas las tarjetas de sonido soportan MIDI, un estndar adoptado por la industria de la msica electrnica para controlar dispositivos como sintetizadores y tarjetas de sonido que emiten msica. Procesadores multi-propsito de seales digitales Las tarjetas de sonido tienen un procesador de seales digitales (DSP). Hacen que la tarjeta de sonido sea inteligente, liberando a la computadora del trabajo en tareas intensivas como filtrar ruidos de grabaciones o compresin de sonido.

VII - 1

Efectos de sonido 3D Algunas tarjetas incluyen efectos de sonido de 3D. Estos trabajan retardando el tiempo de ciertas posiciones de la seal de sonido tal que las frecuencias diferentes llegan al odo a diferentes tiempos, de modo que se crea un sonido ambiental Entrada y salida digital Extensiones para las tarjetas de sonido que son encontrados solo en sistemas de sonido profesionales. Proveen entrada y salida digital S/PDIF y una mejora a la entrada y salida de MIDI. La conectividad S/PDIF permite a los productores de multimedia e ingenieros de sonido conectar dispositivos compatibles con S/PDIF como un reproductor DAT (Digital Audio Tape) para producciones finales de muy alta calidad. Nmero de Bits Las primeras tarjetas de sonido eran de 8 bits (AdLib) y no eran capaces de reproducir sonido digital. Luego aparecieron las tarjetas de sonido con capacidad de reproduccin digital (Sound Blaster y Sound Blaster Pro, esta ltima con capacidad de reproducir sonido estreo) y ms tarde las tarjetas de sonido de 16 bits (Sound Blaster 16). Nmero de voces Las tarjetas de sonido actuales llevan al final un nmero 16, 32 64. Este nmero no se refiere al nmero de bits, sino al nmero de voces o instrumentos que son capaces de reproducir simultneamente. Es decir, una tarjeta 16 (Sound Blaster 16 o compatibles, Gravis Ultrasound, etc.) es capaz de reproducir 16 voces o instrumentos simultneamente, una tarjeta 32 (Sound Blaster 32, Guillemot Maxi Sound 32, etc.) es capaz de reproducir 32 voces simultneamente y una tarjeta 64, lo mismo. Debemos tener en cuenta que algunas tarjetas de sonido pueden reproducir 64 voces simultneamente, pero 32 de ellas por software, al no estar soportadas por la tarjeta (Sound Blaster 64), con lo que el procesador del equipo tiene que dedicar parte de sus recursos a este proceso. A mayor nmero de voces o instrumentos, mayor ser la calidad del sonido reproducido. Calidad del sonido - KHz La relacin entre la cantidad de muestras por segundo de un sonido y la calidad es directa. Por tanto a mayor nmero de KHz mayor calidad de sonido. Las primeras tarjetas de sonido de 8 bits eran capaces de reproducir a una frecuencia de 22KHz, la mitad de la calidad de msica de un reproductor de Compact Disc. Con la aparicin de las tarjetas de 16 bits, esta frecuencia se elev a 44,1KHz (la frecuencia de los reproductores de Compact Disc) Desde ese momento, la frecuencia de muestreo no ha variado, pues la calidad obtenida es ms que suficiente para garantizar una gran calidad. Sin embargo, estn en el mercado tarjetas de sonido con una capacidad de muestreo superior, 48KHZ y hasta 55,2KHz. Tipo de sntesis MIDI MIDI (Musical Instrument Digital Interface - Interfaz digital para instrumentos musicales) es una serie de instrucciones enviadas por una aplicacin que le indican a la tarjeta de sonido qu instrumento suena, en qu nota y con qu duracin. Las tarjetas de sonido con SINTESIS FM usan una combinacin de ondas que imitan los sonidos de los distintos instrumentos, dando lugar a una sensacin de sonido tipo sintetizador. Este tipo de sntesis la podemos encontrar en la mayora de las tarjetas (Sound Blaster 16 y compatibles). Las tarjetas de sonido con SINTESIS POR TABLA DE ONDAS (WAVETABLE) usan muestras digitalizadas de sonidos de instrumentos reales que se almacenan en la TABLA DE ONDAS (memoria ROM) de la tarjeta de sonido. La mayora de las tarjetas con sntesis por tabla de ondas incluyen adems cierta cantidad de memoria RAM en la propia tarjeta, o la posibilidad de aadir memoria mediante unos zcalos similares a los de memoria RAM de la placa base, para que podamos grabar muestras y as mejorar la calidad del sonido. Los parlantes La gran mayora de las tarjetas de sonido incluyen un amplificador interno de 4 Watts por canal, lo que nos permite conectar a la salida de la tarjeta unos parlantes que no superen esta capacidad.

VII - 2

Otras Utilidades Muchas de las tarjetas con sntesis por tabla de ondas incluyen DSP (procesador de sonido digital avanzado), que descarga de trabajo al procesador cuando se realizan ciertos procesos. Ya que por medio de una conexin a Internet podemos realizar video conferencias o simplemente comunicacin telefnica, se ha empezado a implementar el soporte FULL-DUPLEX en las tarjetas de sonido. La tecnologa FULL-DUPLEX consiste en que la tarjeta es capaz de recibir o grabar la voz que llega a travs del micrfono u otro dispositivo conectado a la entrada LINE-IN, al mismo tiempo que est reproduciendo por la salida SPEAKER o LINE-OUT la voz o los sonidos que le llegan a travs de la conexin a Internet. El SONIDO 3D nos brinda un efecto tridimensional se puede conseguir por medio de software o por medio de hardware, de modo que se crea un efecto de sonido envolvente. La nica manera de conseguir sonido envolvente es mediante el uso de 4 parlantes.

Las entradas de una tarjeta de audio son conectores elctricos u pticos que pueden ser de tipo digital o analgico. Los ms bsicos son: Line IN: entrada analgica, normalmente estreo, que recoge el sonido procedente de la salida (Line OUT) de otro dispositivo de audio, por ejemplo un reproductor de CD, una radio, otro ordenador, etc. Line OUT: salida que proporciona una seal del mismo tipo que la que puede entrar por la Line IN. Por tanto sta salida no es apta, en general, para la conexin directa de altavoces, sino para enviar una seal a otro dispositivo de procesado o amplificacin de sonido (por ejemplo: una cadena hi-fi) MIC IN : sta entrada se usa para captar seales ms dbiles, procedentes de micrfonos o instrumentos musicales que disponen de transductores acstico-elctricos (por ejemplo: guitarras elctricas). La seal que entra por MIC IN se amplifica en la tarjeta de sonido hasta alcanzar un nivel adecuado para su proceso. Speaker OUT: a sta salida se suelen conectar unos pequeos altavoces o unos tarjetas se puede regular mediante un control de volumen hardware externo. S/PDIF (InterFaz Digital Sonny/Philips): es un tipo de conector de E/S ptico, desarrollado por Sony y Philips para poder transmitir seales de audio digital entre dos dispositivos sin tener que convertirlas primero a formato analgico. Al tratar al sonido digitalmente, en ningn momento se producen prdidas de calidad al pasar de soporte digital al ordenador o viceversa.

Entradas salidas. Tipos de conectores

auriculares. Suele incorporar a su vez una pequea amplificacin que en algunas

VII - 3

MIDI (Musical Instruments Digital Interface). Se trata de una interfaz serie asncrona para la conexin de dispositivos controladores (por ejemplo: un teclado MIDI, un mdulo de sonidos,...) al PC. Por lo general las tarjetas de sonido utilizan el mismo puerto para el joystick, por lo que se requiere un cable MIDI adaptador de un conector DB15 a dos conectores DIN de 5 pines de los que se utilizan 3: In(4), Out(5) y masa(2). La longitud mxima del cable es de 15 metros y tiene que ser trenzado y apantallado con la pantalla conectada al pin 2 en ambos extremos. Las patillas 1 y 3 se dejan sin conectar.

Tradicionalmente, para las E/S anteriores se han utilizado conectores mini-jack como los que usamos en un walkman, por ejemplo. stos siguen siendo los ms comunes en las soluciones de nivel bajo y medio. Se trata de conexiones analgicas de media calidad. Algunas tarjetas incorporan tambin conectores tipo RCA. Normalmente cada RCA es un canal independiente (mientras que en el jack van dos canales juntos). Por ello siempre van de dos en dos (clsicamente el rojo es el canal derecho y el blanco el izquierdo). Ofrecen mayor calidad que los conectores jack tradicionales pero son ms caros y menos compactos. Adems de las anteriores conexiones, que son externas, las hay tambin internas, siendo la ms importante la del CD-ROM a la tarjeta de sonido, para poder escuchar los CDs de msica. Puede ser digital o analgica, de la cual hace tiempo haba varios formatos (para CD-ROMs Sony, Mitsumi, IDE...). Incluso en algunas tarjetas antiguas se inclua un conector IDE de 40 pines para el CD-ROM.

Caractersticas tcnicas e Informacin de la placa de sonido utilizada La placa de sonido utilizada es una placa Onboard modelo CMI8338/C3DX PCI audio. Las caractersticas se muestran en la siguiente tabla: Especificaciones de Hardware Respuesta en frecuencia 100Hz - 10KHz Razn seal ruido 120 db Frecuencia de muestreo mono 5kHz to 44.1 kHz Frecuencia de muestreo estereo 5kHz to 44.1 kHz Fuente de tensin "+5, +12, -12 Volt" Consumo de corriente 50, 500, 30 mA Impedancia del micrfono 600 Ohms Impedancia de Line-In 39 KOhms Impedancia de CD Audio-In No posee Sensibilidad del micrfono 10 - 200 mVpp Sensibilidad de Line-In 0 - 2 Vpp Sensibilidad CD Audio-In No posee Resolucin de A/D, D/A 16 bits Potencia de salida 4 Watts, 4 Ohms Mezclador D/A Stereo

VII - 4

3D Audio

Direct Soun 3D Configuracin del Hardware Interrupcin IRQ 10 Canal DMA (8 bit) 1 Canal DMA (16 bit) 1, 5 (compartido con el de 8bit) Joystick I/O Address 200 Hex Audio I/O Address 220 Hex FM Synthesizer I/O Address 388 Hex Sintetizador Wave, I/O Address No documentado MPU-401 I/O Address 0300Hex Conectores Line-In Si Mic-In Si Line-Out No posee Speaker-Out Si PC Speaker-In No posee Game/Joystick Port Si CD-ROM Audio-In No posee CD-ROM Audio-In (MPC2) No posee External CD-ROM No posee CSP Chip Socket No posee Requisitos del sistema Sistema Operativo Win. 3.1, 95, 98, NT Espacio en disco 44.2kb Slot Onboard PCI Placa madre PC 100 RAM No documentado Bibliografa. TARJETAS DE AUDIO HARDWARE, http://www.lpi.tel.uva.es Support KnowledgeBase Sound Blaster Product Information Sound Blaster Audio Technologies www.guillemot.com www.soundblaster.com www.duiops.net/hardware.tarjson/tarjson.html SONIDO DIGITAL Universidad de Concepcin, Departamento de Ingeniera Industrial LA TARJETA DE SONIDO, J&P "El Rincn del Hardware" 1998-99 Materia Integrada Tcnicas Digitales III. Tema: Pc. Compatibles. (En los apunes de clase no se encuentra el tema placas de sonido pero se explican el sistema de interrupciones y buses).

VII - 5

Captulo 8 DSP (Digital Signal Procesor)


Introduccin Este Procesador de Sonido Digital libera de trabajo al procesador central del equipo. Para estudiarlo con algo ms de profundidad, conviene primero de todo distinguir tres conceptos parecidos que usan prcticamente las mismas siglas y que son por tanto susceptibles de confusin. En primer lugar tenemos la tecnologa general de los DSP (en su acepcin de Procesadores Digitales de Seal), que ha revolucionado el panorama del procesamiento de seales digitales. Estos DSP son poderosos microprocesadores capaces de procesar mucha informacin en tiempo real como seales de radio, sonido o vdeo. En el contexto de los anteriores es en el que se enmarcan los DSP (Procesadores de Sonido Digital) que se aplican sobre una seal sonora. Pero tambin tenemos el DSP como Procesamiento Digital de Campos Sonoros, que se trata de una tecnologa creada por Yamaha en 1986 para recrear las mismas caractersticas acsticas de una sala de conciertos, un club de jazz o de una sala cinematogrfica en nuestro propio hogar. El DSP que nos interesa ahora es el que se refiere al sonido. Cuando tratamos con una pista de sonido que tenemos grabada, por ejemplo, podemos tener la posibilidad de aplicarle efectos (eco, coro, reverberacin,...) o tambin simular sintetizadores de sonido, realizar fades, ... Por supuesto, este proceso de modificacin de una seal digital requiere potencia de clculo, y adems existen multitud de aplicaciones en la que se hace necesario el procesado de un efecto en tiempo real. Es por ello que actualmente, tanto las tarjetas de gama baja como las de gama alta incorporan un DSP, diseado especficamente para ste tipo de tareas con lo cul se consigue, adems de liberar de carga al procesador del PC, un mayor rendimiento, ya que ste ltimo no deja de ser una mquina de propsito general, y puede resultar menos capaz para estos procesos. Con el continuo desarrollo de los avances en tecnologa digital, el DSP se ha convertido en la parte principal de cualquier tarjeta de sonido, y entre las especificaciones de cualquier tarjeta comercial, incluso de gama ms baja podemos encontrar funciones como: Efectos digitales en tiempo real y en cualquier fuente de sonido como reverberacin, coro, flanger, variador de fase o distorsin. Capacidad de proceso, mezcla y posicionamiento de hasta 131 canales por Hardware. Control de agudos, graves y efectos aplicados en cualquier seal de sonido. Configuracin de salida optimizada para auriculares, dos o cuatro altavoces. Tecnologa capaz de ubicar un sonido mono o estreo en un espacio de 360. Entornos creados por el DSP como sala, teatro, club, etc. En cualquier fuente de sonido y modificable por el usuario.

Procesador de sonido digital (DSP) Este chip es el encargado de procesar todas la rdenes enviadas por las aplicaciones y organiza a los dems chips de sonido de la tarjeta para que reproduzcan los sonidos que se solicitan. Se ocupa de enviar y recibir los datos MIDI de los teclados electrnicos y los sintetizadores; as como descomprimir los archivos al ir llegando a la computadora. A continuacin se muestran los comandos utilizados para programar el DSP en las versiones 2.00, 2.01+, 3.xx y 4.xx.

Categora 8 bit direct mode digitezed Sound I/O Transfer time constant 8 bit single cycle DMA

Comando 10h 20h 40h 14h

Descripcin output input Set digitezed sound transfer time constant output

VIII - 1

Mode digitezed sound I/O

24h 74h 75h 76h 77h 16h 17h

input 8 bit to 4 bit ADPCM output 8 bit to 4 bit ADPCM output with ref. byte 8 bit to 3 bit ADPCM output 8 bit to 3 bit ADPCM output with ref. byte 8 bit to 2 bit ADPCM output 8 bit to 2 bit ADPCM output output with ref. byte Pause DMA mode Continue DMA mode Turn on speaker Turn off speaker Polling mode input Interrupt mode input otput Pquse digitezed sound output for a duration Get DSP number version

8 bit DMA mode digitezed sound I/O control Digitezed sound output Speaker control MIDI I/O

D0h D4h D1h D3h 30h 31h 38 80h E1h

Fuente "Developer Kit for Sound Blaster Series". El Chip sintetizador de FM Sintetizar significa "poner junto". As pues, la funcin de un sintetizador es la de integrar todos los elementos que intervienen para reproducir un determinado sonido. En las tarjetas de sonido el chip sintetizador de FM es el OPL2 u OPL3 de Yamaha. El chip reproduce hasta 11 instrumentos simultneamente. La simulacin de los sonidos se efecta aproximando las ondas sinusoidales producidas por l, a las formas de onda generadas por los instrumentos reales. Para la programacin de la tarjeta es necesario enviar los datos hacia los registros internos por medio de sus dos puertos de entrada y salida: 0388h Direccin/Puerto de Status (R/W) 0389h Puerto de datos (W/O) Para la reproduccin de msica FM estereo se usan las direcciones 0220h y 0221h para la bocina izquierda, y las direcciones 0222h y 0223h para la bocina derecha. Los puertos 0388h y 0389h provocan la salida a travs de ambas bocinas. Las tarjetas poseen un arreglo de doscientos cuarenta y cuatro registros; para escribir en un registro particular se enva el nmero de registro (01-F5) al puerto de direcciones, y el valor del dato a su respectivo puerto. Despus de escribir en el puerto de registros se esperan 3.3 microsegundos antes de enviar la direccin, y 23 microsegundos ms para el dato. Los registros son nicamente de escritura. El puerto de direcciones funciona como byte de status de la tarjeta, en la direccin 388h. En la siguiente tabla se muestra la funcin de cada registro:

Direccin

Funcin

VIII - 2

01 02 03 04 08 20-35 40-55 60-75 80-95 A0-A8 B0-B8 BD C0-C8 E0-F5

Test LSI / Enable waveform control Timer 1 data Timer 2 data Timer control flags Speech synthesis mode / Keyboard split note select Amp Mod / Vibrato / EG type / Key Scaling / Multiple Key scaling level / Operator output level Attack Rate / Decay Rate Sustain Level / Release Rate Frecuency (low 8 bits) Key On / Octave / Frecuency (high 2 bits) AM depth / Vibrato depth / Rhythm control Feedback strength / Connetion type Wave Select Fuente "Programming the AdLib/Sound Blaster"

Los grupos de 22 registros se utilizan por pares para la utilizacin de cada voz FM. La tarjeta sintetiza sonidos de hasta 8 octavas de un instrumento. Los valores para la escala cromtica son:

Numero 16B 181 198 1B0 1CA 1E5 202

Frecuencia 277.2 293.7 311.1 329.6 349.2 370.0 392.0

Nota C sostenido D D sostenido E F F sostenido G

VIII - 3

220 241 263 287 2AE

415.3 440.0 466.2 493.9 523.3

G sostenido A A sostenido B C

El UART MPU-401

Programacin del puerto MIDI para I/O


La interfase entre la tarjeta de sonido y los dispositivos MIDI, se realiza a travs del chip MPU-401. Este dispositivo tiene dos modos de operacin, el SB-MIDI y el modo UART. El puerto SB-MIDI est disponible en todas las tarjetas de sonido. El modo UART se incluye nicamente en las tarjetas de 16 bits. Se usa cualquiera de las dos interfaces MIDI, es mejor usar el modo de 16 bits, tiene sus propios puertos e interrupciones independientes.

El modo SB-MIDI
Este modo proporciona una interfase para I/O en modo normal como el modo UART. El dato MIDI entrante se detecta al usar el mtodo de poleo, o el de interrupcin.

El modo MPU-401
En este modo la interfase no presenta servicios, literalmente relee todo lo que recibe sin modificar o interpretar, entre la PC y el dispositivo MIDI. Una vez activado el modo UART, el nico comando que reconoce es el Reset. Estos puntos son bsicos para iniciar la programacin de la tarjeta de sonido. Slo tienen que enviarse los datos a la direccin correcta.

BASE ADDRESS 220h 240h 260h 280h

I/O ADDRESSES USED 220h to 233h 240h to 253h 260h to 273h 280h to 293h

SB16 I/O PORTS

VIII - 4

I/O ADDRESS Base + 0h Base + 0h Base + 1h Base + 2h Base + 2h Base + 3h Base + 4h Base + 5h Base + 6h Base + 8h Base + 8h Base + 9h Base + Ah Base + Ch Base + Ch Base + Eh Base + 10h Base + 11h Base + 12h Base + 13h

DESCRIPTION

ACCESS

FM Music Status Port FM Music Register Address Port FM Music Data Port Advanced FM Music Status Port Advanced FM Music Register Port Advanced FM Music Data Port Mixer chip Register Address Port Mixer chip Data Port DSP Reset FM Music Status Port FM Music Register Port FM Music Data Port DSP Read Data Port DSP Write Command/Data DSP Write-Buffer Status (bit 7) DSP Read-Buffer Status (bit 7) CD-ROM Command or Data Register CD-ROM Status Register CD-ROM Reset Register CD-ROM Enable Register

Read Write Write Only Read Write Write Only Write Only Read/Write Write Only Read Write Write Only Read Only Write Read Read Only Read/Write Read Only Write Only Write Only

SB16 I/O PORT FUNCTIONS Bibliografia: Developer Kit For Sound Blaster Series. PROCESADOR DE SONIDO DIGITAL (DSP) Stephan M_ Bernsee's Audio DSP Materia Integrada Tcnicas Digitales 3. Tema: DSP

VIII - 5

Captulo 9 Formatos digitales


Introduccin:
La digitalizacin consiste en cuantificar la amplitud de onda. Como antes visto quedan definidos dos conceptos que son claves en la digitalizacin, como son: Tasa de muestreo y resolucin. La tasa de muestreo es el nmero de lecturas que se hacen por unidad de tiempo. La resolucin es el nmero de estados diferentes que se pueden distinguir en una seal. A mayor resolucin y mayor tasa de muestreo se obtendr mayor fidelidad en la seal muestreada.

Almacenamiento
Existen dos posibilidades de almacenamiento los archivos de audio digital y los archivos MIDI.

Sonido Audio Digital


Este mtodo de almacenamiento de audio digital presenta el grave problema de la cantidad de disco duro que se necesita para su almacenamiento y, sobre todo, memoria que se necesita para trabajar con el audio digital. Es por ello que se han estado desarrollando formatos de archivos que buscan comprimir cada vez ms los archivos para realizar grabaciones de alta calidad sin necesidad de tanto espacio. Estas tcnicas suelen incluir un mtodo para codificar secuencias largas de bytes repetidos.
Por ejemplo: Si queremos digitalizar 3 minutos de msica, y muestreamos 44100 veces por segundo, como en cada muestra almacenamos dos bytes (16 bits o un word) obtenemos: 3min x 60 seg/min x 44100 muestras/seg x 2 bytes/muestra = 15.876.000 bytes. Luego, para poder almacenar una cancin de tres minutos, necesitamos casi 16 Mb.

Ahora bien, una vez obtenido el audio en forma digital, el cual esta almacenado en la memoria RAM, se le debe dar un tipo de formato para crear el archivo que se almacenara en disco, este tipo de formato es utilizado luego para la reproduccin del sonido. A continuacin haremos referencia a los formatos mas utilizados por los distintos paquetes de software del mercado y que muestran a su vez la evolucin de estos formatos: Formato AU IFF WAV Caracterstica Son el formato audio estndar en los computadores Sun. Por lo general son de 8 bits y poseen menor calidad que otros formatos de sonido. Es comn en computadores Macintosth. Pueden ser de 8 o 16 bits, soportan frecuencias de muestreo de hasta 44.1 KHz y tamaos de muestra de hasta 32 bits por muestra. Tambin est el IFF-C que es un formato de archivo IFF comprimido. Es el formato utilizado por defecto por Windows. Posee compresin propia, y, aunque ha sido sobrepasado tcnicamente por otros formatos, es uno de los ms conocidos y popularizados. Puede ser de 8 o 16 bits con ndices de muestreo de 11.025, 22.05 44.1 KHz, gestiona los datos en mono o en estreo y por lo general tienen buena calidad de sonido. Admite muestras de 8 y 16 bits, admite frecuencias de muestreo de 11.025 kHz, 22.05 kHz, y 44.1 kHz, y los datos pueden guardarse comprimidos o sin comprimir (solo para Sound Blaster ). El formato de archivo VOC usa el concepto de bloques de silencio, es decir, un periodo extenso de silencio se reemplaza en el archivo de audio con una marca y un valor de su duracin temporal, con lo que se consigue un pequeo ahorro de espacio en disco. Posee un sistema potente de descompresin, que puede funcionar sin necesidad de operar con el archivo entero, lo cual permite que los programas de reproduccin puedan ir decodificando y reproduciendo el sonido a medida que la informacin les va llegando, sin esperar a recibir el archivo completo. Este mecanismo es utilizable tambin para video. Permite almacenar sonido de gran calidad con altas tasas de compresin. Es un formato que se

VOC

Real Audio

MP3

IX- 1

VQF

est utilizando bastante para transmitir msica de alta calidad por la red, as como en otro tipo de medios informticos. MPEG Audio File (Transform-domain Weighted Interleave Vector Quantization): es un nuevo formato de compresin de audio desarrollado por Yamaha, similar al MP3, pero con una mejor compresin y calidad de sonido. Los archivos VQF son entre 30-35% ms pequeos que un archivo MP3. Audible Audio File FAAC File Audio File Audio File Audio File Monkey's Audio File Windows Media File Windows Media Playlist Video File Video CD File MusicEx File Learnkey's Real CBT File Liquid Audio File MPEG Video File MP3 Playlist MIDI File MIDI File Quicktime Video File MPEGPlus File MPEG Audio File MPEG Audio File MPEG Video File MPEG Video File MPEG Video File MPEG Video File Ogg Vorbis File MP3 Playlist Real Audio File Real Media File Real Media File MIDI File MIDI File Real Media File Real Media File Scalable Multicast File SMIL Document File SMIL Document File Audio File (Mac) Shockwave File TAC File Windows Media Playlist Windows Media File Windows Media File Windows Media File

aa aac aif aifc aiff ape asf asx avi dat jmx lks lqt m1v m3u mid midi mov mp+ Mp2 mpa mpe mpeg mpg mpv ogg pls ra ram rm rmi rmid rmm rmx sdp smi smil snd swf tac wax wm wma wmv

Los archivos de audio digital son recomendables cuando: No se tenga control completo acerca del hardware de reproduccin. Se disponga de suficientes recursos para manejar los archivos digitales.

IX- 2

Se necesite reproducir dilogos.

Formato de archivo: WAVE Introduccin


Uno de los formatos de fichero ms utilizados para almacenar sonidos es el formato WAV. Se trata de almacenar las muestras una tras otra (a continuacin de la cabecera del fichero, que entre otras cosas indica la frecuencia de muestreo), sin ningn tipo de compresin de datos, con cuantificacin uniforme. La sencillez de este formato lo hace ideal para el tratamiento digital del sonido. El formato de archivo de WAVE es un subconjunto de la especificacin RIFF de Microsoft que puede incluir muchos tipos diferentes de datos.

Especificacin RIFF (Resource Interchange File Format)


RIFF define un formato de archivo para guardar varios tipos de datos, principalmente datos multimedia tales como audio y video. La estructura de la etiquetar del archivo es til porque ayuda a prevenir problemas de compatibilidad que pueden ocurrir ya que la definicin del archivo cambia con el tiempo. Cada tramo de datos en el archivo se identifica por un ttulo normal, una aplicacin que no reconoce un elemento del datos dado puede saltearse la informacin desconocida. Un archivo RIFF es construido para un bloque de estructura bsico llamado chunk en la sintaxis C. Existen dos tipos de chunk, el RIFF y LIST, los chunk pueden contener otros chunk llamados sub-chunk. Un archivo RIFF compatible contiene tres partes: Un chunk INFO-LIST que contiene un nmero de requerimientos y sub-chunk opcionales que describen el archivo, su historia y su uso. Un sdta-list chunk que contiene un solo sub-chunk que hace la articulacin con los samples del audio digitales. Un pdta-list chunk contiene nueve sub-chunk que definen la articulacin de los datos de audio digitales. Los tres chunk pueden aparecer en distinto orden, pero el orden de los diferentes sub-chunk es fijo. La primer chunk de una estructura RIFF es el tipo del formulario (form type) que describe el tipo global de los volmenes del archivo. As que la estructura de un archivo RIFF tiene la siguiente forma: Direccin (hex) 0000 0004 0008 000C 0010 0014 Contenido 'R', 'I', 'F', 'F' Longitud del archivo-8 (32-bit usando enteros) Tipo del formulario (4 caracteres) Primer tipo de chunk (4 carcter) Tamao del primer chunk (32-bit usando enteros) Datos del primer chunk

Ficheros de sonido WAVE


El formato WAVE es un subconjunto de RIFF usado para almacenar audio digital. Su tipo de formulario es el WAVE y requiere dos chunk: fmt chunk que describe el sample rate, sample width, etc. data chunk que contiene el sample date. El formato WAVE tambin puede contener cualquier otro tipo de chunk permitido por RIFF, incluso chunk LISTA que se usan para contener tipos optativos de datos como la fecha, el derechos de propiedad literaria el nombre de autor, etc. Los chunk pueden aparecer en cualquier orden. El archivo WAVE es muy poderoso, este tipo de formato se promulgo al aparecer la API WIN32.

IX- 3

Tipo de compresin utilizado por WAVE.


Las especificaciones del archivo WAVE soporta varios tipos de algoritmos de compresin. En el formato dela cabecera se indica que tipo de compresin usa, esto es indicado en fmt chunk: Un valor de 1 indica la Modulacin de Cdigo de Pulso (PCM) que es una "recta" o no compresin del cdigo de las muestras. Los valores distintos de 1 indican algn forma de compresin.

Formato de los ficheros de Sonido WAV


El formato de los ficheros .WAV es el siguiente: Bytes Contenido Usual Propsito/Descripcin Bloque de identificacin (sin comillas). Entero largo. Tamao del fichero en bytes, incluyendo cabecera. Otro identificador. Otro identificador Tamao de la cabecera hasta este punto. Etiqueta de formato. (La versin del tipo de formato utilizado). Nmero de canales (2 si es estreo). Frecuencia de muestreo (muestras/segundo). Nmero medio de bytes/segundo. Alineamiento de bloque. Nmero de Bits por muestra (normalmente 8, 16 32). Marcador que indica el comienzo de los datos de las muestras. Nmero de bytes muestreados. Muestras (cuantificacin uniforme)

00 - 03 "RIFF" 04 - 07 ??? 08 - 11 "WAVE" 12 - 15 "fmt " 16 -19 16, 0, 0, 0 20 - 21 1, 0 22 - 23 1, 0 24 - 27 ??? 28 - 31 ??? 32 - 33 1, 0 34 - 35 8, 0 36 - 39 "data" 40 - 43 ??? resto ???

Los datos numricos que ocupan ms de un byte se representan de la siguiente forma: Primero estn los bytes menos significativos, y a continuacin los ms significativos (convenio "little endian", tambin conocido como "formato Intel").

Lectura y grabacin de archivos WAVE bajo Windows


Para la lectura de un archivo WAVE su usa las funciones de Win32, para ello se utiliza la funcin PlaySound (). Si se utiliza un sistema operativo de 16-bit como Windows, se usa la funcin sndPlaySound(). Se puede usar ambas funciones sin conocer sobre el formato interior del archivo. Para obtener un mejor manejo se puede utilizar las funciones MCI de Windows que proporcionan un mejor manejo de los archivos WAVE.

Anlisis de frecuencia
Para realizar un anlisis de frecuencia se utiliza Fast Fourier Transform (FFT), directamente a los datos obtenidos descartando de antemano la cabecera del archivo.

Bibliografa:
SONIDO DIGITAL Universidad de Concepcin, Departamento de Ingeniera Industrial www.unitec.edu.co/biblioteca/multimedia/tm8 Developer Kit For Sound Blaster Series, Segunda Edicin

IX- 4

The WAVE File Format, http://www.lightlink.com/tjweber/StripWav/WAVE.html SoundFont 2.01 Technical Specification Microsoft Windows SDK Multimedia Programmers Reference.

IX- 5

Captulo 10 MCI de Windows


Introduccin:
La programacin de sonido bajo Windows se puede llevar a cabo con dos herramientas diferentes, los comandos MCI y las funciones de bajo nivel del API de Windows. La programacin de sonido (tanto de audio digital como de MIDI) es un caso particular de la programacin multimedia. La programacin en Windows puede abordar el multimedia a travs de dos enfoques diferentes: el MCI y las funciones de bajo nivel. El MCI es el mtodo ms sencillo. MCI proporciona aplicaciones con compatibilidad a dispositivos independientes para controlar perifricos de audio y video. Las aplicaciones pueden usar MCI para controlar y soportar cualquier dispositivo multimedia, incluyendo los dispositivos de audio basados en forma de onda, secuencias MIDI, dispositivos de CD de audio y video digital (cintas de video). Las siglas MCI corresponden a Media Control Interface, un conjunto de herramientas de programacin con las que se logra una funcionalidad muy similar a la del reproductor de medios de Windows (de hecho, esta aplicacin las utiliza casi exclusivamente). Uno de los puntos ms relevantes del MCI, es que trata del mismo modo todos los dispositivos multimedia (reproductor de CD, vdeo analgico y digital, videodisco, audio digital y MIDI). Existen dos interfaces de uso de los comandos MCI, el interfaz de cadenas de comandos (command-string interface) y el interfaz de mensajes de comandos (command-message interface).

Comandos MCI Strings y Messages


MCI soporta comandos Strings y Messages. Se puede usar cualquiera de los dos mtodos , o ambos, en su aplicacin de MCI. La interfase de comando Messages consiste de constantes y estructuras. Se utiliza la funcin mciSendCommand para enviar los mensajes a un dispositivo de MCI. La interfase de comando Strings provee una versin textual del mensaje de comando. Se utiliza la funcin mciSendString parra enviar los Strings a un dispositivo de MCI. Los comandos Strings duplican la funcionalidad de los mensajes de comando. El sistema operativo convierte los comandos Strings a comandos de mensaje para enviarlos a el dispositivo MCI para que lo procese. Los comandos Messages agrupan la informacin en forma de estructuras, que son fciles de interpretar en aplicaciones C. Estas estructuras pueden contener informacin sobre muchos aspectos diferentes de un dispositivo. Los comandos Strings agrupa la informacin en forma de Strings, y se puede recuperar slo un Strings por vez. La aplicacin debe analizar o debe probar cada Strings para interpretarlo. Algunas aplicaciones MCI usan los Strings cuando el valor del retorno no importa (solo para verificar el xito) y comandos de mensajes para recuperar la informacin del dispositivo.

Comandos Strings
Para enviar un comando Strings a un dispositivo MCI, se usa la funcin mciSendString que incluye los parmetros para el comando Strings y un buffer para cualquier retorno de informacin. la funcin mciSendString retorna cero si la operacin fue exitosa. Si la funcin falla, la palabra de bajo-orden del valor del retorno contiene un cdigo del error. Se puede pasar este cdigo del error a la funcin mciGetErrorString para conseguir una descripcin del error. Sintaxis del comando Strings Los comandos string MCI usan una sintaxis de tipo verbo-objeto-modificador. Cada comando string incluye un comando, un identificador del dispositivo, y un comando del argumento. Los argumentos son optativos para algunos comandos y requeridos por otros. Un comando string tiene el siguiente informacin: _Argumentos del comando device_id Este componente contiene la siguiente informacin:

X- 1

El comando especifica un comando de MCI, como "open", "close", o "play". El "device_id" identifica una peticin a un dispositivo MCI. El device_id se crea cuando el dispositivo se abre. Los argumentos especifican las banderas y variables usadas por el comando. Las banderas son palabras claves reconocidas por el comando MCI. Las variables son nmeros o strings que aplican al comando MCI o a la bandera. Por ejemplo, el comando play usa los argumentos "de la posicin" a la posicin" para indicar las posiciones para empezar y parar. Cuando se usa una bandera que tiene una variable asociada, se debe proporcionar un valor para la variable. si no esta especificado (es optativo) los argumentos del comando asumen un valor predefinido.

La funcin del ejemplo siguiente enva el comando con las banderas "desde" y "hasta": DWORD PlayFromTo(LPSTR lpstrAlias, DWORD dwFrom, DWORD dwTo) { char achCommandBuff[128]; // Form the command string. wsprintf(achCommandBuff, "play %s from %u to %u", lpstrAlias, dwFrom, dwTo); // Send the command string. return mciSendString(achCommandBuff, NULL, 0, NULL); }

Comandos Messages
La interfase de comando "menssage" se disea para ser usada por aplicaciones que exigen a una interfaz del lenguaje C para controlar los dispositivos multimedia. Usa un paradigma "mensaje de paso" para comunicarse con los dispositivos MCI. Se puede enviar una orden usando la funcin mciSendCommand. La funcin mciSendCommand retorna cero si es exitoso. Si la funcin falla, la palabra de retorno contiene un cdigo del error. Se puede pasar este cdigo de error a la funcin mciGetErrorString para conseguir una descripcin textual del error. La sintaxis de comando "Messages" Los comandos MCI "menssages" consisten en los siguientes elementos : Un valor constante del mensaje Una estructura que contiene los parmetros para la orden Un juego de banderas especificando las opciones para el comando y validando los campos en el bloque del parmetro. El ejemplo siguiente usa el mciSendCommand la funcin para enviar el comando MCI_PLAY al dispositivo identificado por un identificador del dispositivo. mciSendCommand(wDeviceID, MCI_PLAY, 0, (DWORD)(LPVOID) &mciPlayParms); // // // // device identifier command message flags parameter block

El identificador de dispositivo da en el primer parmetro que es recupera cuando el dispositivo se abre usando el comando MCI_OPEN. El ltimo parmetro es la direccin de una estructura MCI_PLAY_PARMS sobre la cual se podra contener la informacin dnde empezar y acabar la reproduccin. Muchos comandos MCI "menssages" usan una estructura para contener parmetros de este tipo. El primer miembro de cada uno de estas estructuras identifica la ventana que recibe un mensaje MM_MCINOTIFY cuando termina la operacin.

Posibilidades de audio de las cadenas de comandos


Bsicamente, las acciones realizables en el campo del sonido son las siguientes:

X- 2

_Acceder a cualquier punto de un CD audio _Reproducir total o parcialmente un CD audio _Reproducir total o parcialmente ficheros de forma de onda _Grabar ficheros de forma de onda _Obtener informacin sobre el dispositivo de forma de onda _Reproducir total o parcialmente ficheros MIDI _Obtener informacin sobre el dispositivo de MIDI _Obtener informacin de retorno sobre el xito de las operaciones

Clasificacin de los comandos MCI.


MCI define cuatro clasificaciones de los comandos: sistema, requerimiento, bsico, y extendido. La lista siguiente describe la clasificacin de estos comandos: Comandos de Sistema se que ocupa directamente MCI, en lugar del dispositivo. Comandos de Requerimiento se ocupa el dispositivo. Todos los dispositivos MCI deben soportar las rdenes y banderas requeridas. Comandos bsicos (o comandos optativos) es usado por algunos drivers. Si un driver soporta comandos bsicos, debe soportar un conjunto definido de banderas para ese comando. Comandos extendidos son especficos a un tipo del dispositivo o driver. Mientras que los comandos de sistema y los requeridos son el juego de comandos mnimos para cualquier driver MCI, los comandos esenciales y los extendidos no son soportados por todos los drivers. Su aplicacin siempre puede usarse en el sistema y puede requerir rdenes y banderas, pero si necesita usar un comando esencial o extendido o banderas, debe preguntar al driver si es compatible, ello se hace con la funcin (MCI_GETDEVCAPS).

Comandos del sistema


Son los procesos MCI que el sistema ordena directamente, en lugar de pasarlos a los dispositivos de MCI. Descripcin del mensaje string: Comando "break" "sysinfo" Constante Descripcin MCI_BREAK Pone una llave de descanso para un dispositivo de MCI. MCI_SYSINFO devuelve la informacin sobre los dispositivos de MCI.

Los Comandos requeridos


Todos los dispositivos de MCI soportan los siguiente comandos requeridos. La Descripcin de Mensaje "string" Comando "capability " "close" "info" "open" "status" Constante MCI_GETDEVCAPS MCI_CLOSE MCI_INFO MCI_OPEN MCI_STATUS Descripcin Se obtiene las capacidades de un dispositivo. Cierra el dispositivo. Se obtiene la informacin textual de un dispositivo. Inicializa o abre un dispositivo. Se obtiene la informacin de estado del dispositivo.

Algunas de las banderas de este comando no se requieren, porque es un comando bsico. Los dispositivos tambin deben soportar un juego comandos bandera para los comandos requeridos.

Los Comandos bsicos


La lista siguiente resume los comandos bsicos. El uso de estos comandos por un dispositivo de MCI es optativo.

X- 3

La Descripcin de Mensaje "sting": Comando "load" "pause" "play" "record" "resume" "Save" "Seek" "Set" "status" "stop" Constante MCI_LOAD MCI_PAUSE MCI_PLAY MCI_RECORD MCI_RESUME MCI_SAVE MCI_SEEK MCI_SET MCI_STATUS MCI_STOP Descripcin Lee los datos de un archivo. Para la ejecucin. La grabacin pueden reanudarse en la posicin actual. Pone a trasmitir los datos a la salida. Comienza la grabacin de datos de la entrada. Resume la ejecucin o grabando en una pausa el dispositivo. Guarda los datos a un archivo del disco. Busca adelante o hacia atrs. el estado en que opera del dispositivo. Obtiene la informacin de estado del dispositivo. Para la ejecucin.

Los Comandos extendidos


Algunos dispositivos de MCI tienen rdenes adicionales, o ellos se le agregan banderas a las rdenes existentes. Mientras algunos comandos extendidos se le aplican a un driver del dispositivo especfico, la mayora de ellos se aplican a todos los driver de un tipo del dispositivo particular. Este tipo de comando son utilizados para video digital y secuencias MIDI.

Funciones MCI, Macros, y Mensajes.


Muchas aplicaciones de MCI usan la funcin mciSendString y mciSendCommand. El identificador del dispositivo requerido por la mayora de los comandos MCI se obtiene llamando al comando "open" (MCI_OPEN). Por ejemplo si se necesita un identificador pero no quiere abrir el dispositivo, o consultar las capacidades del dispositivo antes de tomar alguna otra accin se puede llamar la funcin del mciGetDeviceID. La funcin mciGetCreatorTask permite a la aplicacin usar un identificador del dispositivo para obtener una referencia de la tarea que cre ese identificador. La funcin mciGetYieldProc y mciSetYieldProc asignan y recuperan la direccin de la funcin callback que asoci con la bandera "wait" (MCI_WAIT). La funcin mciGetErrorString devuelve un cordn que describe un valor de error MCI. Cada cordn que MCI devuelve, que puede ser un datos o una descripcin del error, posee un mximo de 128 caracteres. Los campos de caja de dilogo (Dialog box ) que son ms pequeo que 128 caracteres truncarn los cordones ms largos que retorna MCI. Los macros de MCI son las herramientas que se pueden usar para crear y desmontar valores que especifican los formatos de tiempo. stos formatos de tiempo se usan en muchos comandos MCI. Los formatos representados por las macros es: hours/minutes/seconds (HMS), minutes/seconds/frames (MSF), y tracks/minutes/seconds/frames (TMSF).

Descripcin de la macro
Constante MCI_HMS_HOUR MCI_HMS_MINUTE MCI_HMS_SECOND MCI_MAKE_HMS MCI_MAKE_MSF MCI_MAKE_TMSF MCI_MSF_FRAME MCI_MSF_MINUTE Descripcin Retorna la horas compuesto de un valor de HMS. Retorna la horas compuesto de un valor de HMS. Retorna la horas compuesto de un valor de HMS. Crea un valor de HMS. Crea un valor de MSF. Crea un valor de TMSF. Retorna el componente de los frames con un valor de MSF. Retorna el componente de los minutos con un valor de MSF.

X- 4

MCI_MSF_SECOND MCI_TMSF_FRAMe MCI_TMSF_MINUTE MCI_TMSF_SECOND MCI_TMSF_TRACK

Retorna el componente de los segundos con un valor de MSF. Retorna el componente de los frames con un valor de TMSF. Retorna el componente de los minutos con un valor de TMSF. Retorna el componente de los segundos con un valor de TMSF. Retorna el componente de los track con un valor de TMSF.

MCI tambin proporciona dos mensajes: MM_MCINOTIFY y MM_MCISIGNAL. El mensaje MM_MCINOTIFY informa a una aplicacin del resultado de un comando MCI siempre que ese comando especifique la bandera "notifique" (MCI_NOTIFY). El mensaje MM_MCISIGNAL es especfico de los dispositivos del video digital; informa a la aplicacin cuando se alcanza una posicin especificada .

Espera, Notificacin, y Banderas Prueba


Muchas rdenes de MCI incluyen banderas que modifican el comando. Las banderas "Wait" (MCI_WAIT) y "Notify" (MCI_NOTIFY) son comunes en cada comando. La bandera "Test" (MCI_TEST) est disponible para digital-video y dispositivos de VCR.

Bandera de la Espera
Los comandos de MCI retornan inmediatamente al usuario, aun cuando toma varios minutos para completar la accin. Se puede usar la bandera "wait" (MCI_WAIT) para dirigir el dispositivo que espere hasta que la accin pedida se complete antes de devolver el mando a la aplicacin. Por ejemplo, el comando no devolver el mando a la aplicacin hasta que se complete: mciSendString("play mydevice from 0 to 100 wait", lpszReturnString, lstrlen(lpszReturnString), NULL); Nota : Se puede cancelar la espera apretando CTRL+BREAK. Las aplicaciones pueden redefinir usando el comando "break" (MCI_BREAK). (MCI_BREAK usa la estructura MCI_BREAK_PARMS ) Cuando una espera se cancela, MCI intenta devolver el mando a la aplicacin sin interrumpir el comando asociado con la bandera de espera.

Bandera de informacin.
La bandera "notify" (MCI_NOTIFY) dirige al dispositivo para anunciar un mensaje MM_MCINOTIFY cuando el dispositivo completa una accin. Su aplicacin debe tener un procedimiento de ventana para procesar el mensaje de MM_MCINOTIFY. Un mensaje de MM_MCINOTIFY indica que el proceso de un comando se ha completado, pero no indica si el comando fue completado con xito, si fall, o se reemplaz o abort. En la interfaz de comando "string", se usa en el parmetro de la funcin mciSendString . En la interfaz del comando "message", se especifica en la palabra dwCallBack de la estructura enviada con el comando "menssage". (Cada estructura asociada con un comando "menssage" contiene este miembro.)

Bandera de Prueba
la bandera "test" (MCI_TEST) pregunta al dispositivo para determinar si puede ejecutar el comando. El dispositivo devuelve un error si no puede ejecutar el comando. No devuelve ningn error si puede ocuparse del comando. Cuando se especifica esta bandera, MCI devuelve el mando a la aplicacin sin ejecutar el comando. Esta bandera es soportada por video digital y dispositivos VCR para todos los comandos excepto "open"(MCI_OPEN) y "close" (MCI_CLOSE).

X- 5

Comandos de atajo y Variaciones


Se puede usar varios comandos atajos al trabajar con las rdenes de MCI. Estos atajos permiten usar un solo identificador para referirse a todos los dispositivos de la aplicacin que se ha abierto, o para abrir un dispositivo sin emitir explcitamente un comando "open"(MCI_OPEN ). Se puede especificar un "all" (MCI_ALL_DEVICE_ID) como identificador del dispositivo para cualquier comando que no devuelve informacin. Cuando se especifica "all", MCI enva la orden secuencialmente a todos los dispositivos abiertos por la aplicacin actual. Por ejemplo, el comando "close" "all" cierra todos los dispositivos abiertos y el comando "play" "all" empiezan a ejecutarse todos los dispositivos abiertos por la aplicacin. Ya que MCI enva los comandos secuencialmente a los dispositivos de MCI, hay un intervalo entre, cuando los primero y el ltimo dispositivo recibe el comando. Usando "all" es una manera conveniente de transmitir un comando a todos sus dispositivos, pero no se debe confiar en l para sincronizarlos. Cuando se emite un comando y se especifica a un dispositivo que no est abierto, MCI intenta abrir el dispositivo antes de llevar a cabo el comando. Las siguientes reglas se aplican para abrir los dispositivos automticamente: La apertura automtica slo trabaja con la interfaz del "comando string". La apertura automtica falla para comandos que son especfico a los driver del dispositivo personalizado. La apertura automtica de los dispositivos, no responden a rdenes que usan "all" como un nombre de dispositivo. La apertura automtica no permite que una aplicacin especifique el tipo de bandera. Sin el nombre del dispositivo, MCI determina el nombre del dispositivo para las entradas en un registro. Para usar un dispositivo especfico, se puede combinar el nombre del dispositivo con el nombre del archivo usando con un punto de admiracin. Si una aplicacin usa la apertura automtico para abrir un dispositivo, la aplicacin debe verificar el valor de retorno de cada orden abierta para verificar que el dispositivo este todava abierto. MCI cierra automticamente cualquier dispositivo que abre automticamente. MCI cierra un dispositivo en las siguientes situaciones: El comando se completa. Se aborta el comando. Se notificacin de la demanda en un comando subsiguiente. MCI descubre una falla.

Dispositivos MCI
Cada dispositivo multimedia MCI posee un juego de rdenes de MCI. Por ejemplo, play (MCI_PLAY ) hace que el dispositivo se abra para reproducir un archivo, no importa el tipo de datos con que el dispositivo trabaja.

Control del dispositivo


Para controlar un dispositivo de MCI, se abre el dispositivo, enva los comandos necesarios, y entonces cierra el dispositivo. Los comandos pueden ser muy similares, incluso para dispositivos MCI completamente diferentes. Este ejemplo ejecuta el track nmero 6 de un CD de audio usando mciSendStrimg :
mciSendString("open cdaudio", lpszReturnString, lstrlen(lpszReturnString), NULL); mciSendString("set cdaudio time format tmsf", lpszReturnString, lstrlen(lpszReturnString), NULL); mciSendString("play cdaudio from 6 to 7", lpszReturnString, lstrlen(lpszReturnString), NULL); mciSendString("close cdaudio", lpszReturnString, lstrlen(lpszReturnString), NULL);

El ejemplo siguiente muestra la misma serie de comandos para reproducir los primeros 10000 samples de un archivo de forma de onda:

X- 6

mciSendString( "open c:\mmdata\purplefi.wav type waveaudio alias finch", lpszReturnString, lstrlen(lpszReturnString), NULL); mciSendString("set finch time format samples", lpszReturnString, lstrlen(lpszReturnString), NULL); mciSendString("play finch from 1 to 10000", lpszReturnString, lstrlen(lpszReturnString), NULL); mciSendString("close finch", lpszReturnString, lstrlen(lpszReturnString), NULL);

Reproduccin y Posicionamiento
Varios comandos MCI como (MCI_PLAY), (MCI_STOP), (MCI_PAUSE), (MCI_RESUME), (MCI_SEEK), afecta la reproduccin o el posicionamiento de un archivo multimedia. Si un dispositivo de MCI recibe un comando de reproduccin mientras otro comando de reproduccin esta siendo ejecutado, acepta el comando y detiene o reemplaza el comando anterior. Muchos comandos MCI, como (MCI_SET ), no afectan la reproduccin. Una notificacin de uno de estos comandos no interfiere con la reproduccin pendiente o comandos de posicin con tal de que las notificaciones no se realicen al mismo driver.

Tipos de dispositivos
MCI reconoce un conjunto bsico de dispositivo. Un tipo de dispositivo es un conjunto de drivers de MCI que comparten un conjunto de comando en comn y se usa para controlar dispositivos multimedia similares o archivos de datos. Muchos comandos MCI como (MCI_OPEN), se le debe especificar un tipo del dispositivo. Dispositivo cdaudio digitalvideo dat overlay scanner sequencer vcr waveaudio videodisk Constante MCI_DEVTYPE_CD_AUDIOCD MCI_DEVTYPE_DIGITAL_VIDEO MCI_DEVTYPE_DAT MCI_DEVTYPE_OVERLAY MCI_DEVTYPE_SCANNER MCI_DEVTYPE_SEQUENCER MCI_DEVTYPE_VCR MCI_DEVTYPE_WAVEFORM_AUDIO MCI_DEVTYPE_VIDEODISC Descripcin Reproductor de CD de audio Vdeo digital en una ventana Reproductor de cinta DAT Vdeo analgico en una ventana Scanner de imgenes Secuenciador MIDI Vdeo en cinta magntica Ficheros de onda Reproductor de disco de vdeo

Los nombres de la columna dispositivo son los que utilizaremos en las cadenas de comandos, mientras que las constantes se utilizan en los mensajes de comandos.

Nombres de los dispositivos


Para identificar a un driver de MCI, MCI usa los nombres del dispositivo. Los nombres del dispositivo se identifican en la seccin [mci] del archivo SYSTEM.INI o en la parte apropiada del registro. Esta informacin identifica a todos los drivers de MCI para Windows.

X- 7

La lista de dispositivos MCI disponibles, vara de un ordenador a otro en funcin de los drivers instalados. La lista de dispositivos disponibles coincidir con las entradas de la seccin [mci] en el fichero system.ini : [mci] cdaudio=mcicda.drv sequencer=mciseq.drv waveaudio=mciwave.drv avivideo=mciavi.drv videodisc=mcipionr.drv vcr=mcivisca.drv MPEGVideo=mciqtz.drv MPEGVideo2=mciqtz.drv La lista del ejemplo es una lista bsica que el instalador de Windows coloca, si detecta la presencia de una tarjeta de sonido y de una unidad de CD-ROM. En el caso de otros dispositivos menos frecuentes, como lectores de videodisco, scanners, etc. la instalacin de los drivers y la modificacin del system.ini, se llevar a cabo desde el software que acompae al aparato.

Driver de soporte para los Comandos de MCI


Los drivers de MCI mantienen la funcionalidad los comandos de MCI. El software del sistema realiza algunas tareas de direccionar datos, pero toda la reproduccin multimedia, la presentacin, y la grabacin se ocupa los drivers de MCI. Los driver varan en el soporte de comandos MCI y las banderas del comando. Porque los dispositivos multimedia pueden tener capacidades muy diferentes, MCI se disea para permitir a los drivers extenderse o se reducen comandos para igualar las capacidades del dispositivo.

Trabajando con dispositivos MCI Abriendo un Dispositivo


Antes de usar un dispositivo, se debe inicializarlo usando (MCI_OPEN) . Este comando carga al driver en la memoria y recupera el identificador del dispositivo que se usar para identificar el dispositivo en los comandos de MCI. Se debe verificar el valor de retorno de la funcin mciSendString o mciSendCommand antes de usar el identificador del dispositivo para asegurar que el identificador es vlido. (Tambin se puede recuperar un identificador de dispositivo usando la funcin mciGetDeviceID). Como todos comandos de mensaje (command messages) de MCI, MCI_OPEN tiene una estructura asociada. Estas estructuras a veces se llaman los bloques del parmetro. La estructura predefinida para MCI_OPEN es MCI_OPEN_PARMS. Ciertos dispositivos (como waveform y overlay) han extendido sus estructuras (MCI_WAVE_OPEN_PARMS y MCI_OVLY_OPEN_PARMS ) para acomodar los parmetros optativos adicionales. A menos que se necesite usar estos parmetros adicionales, se puede usar la estructura MCI_OPEN_PARMS con cualquier dispositivo de MCI. El nmero de dispositivos que usted puede tener abierto slo est limitado por la cantidad de memoria disponible. Usando un seudnimo

X- 8

Cuando se abre un dispositivo, se puede usar la bandera de "seudnimo" o "alias" para especificar un identificador del dispositivo para el dispositivo. Esta bandera le permite asignar un identificador corto del dispositivo para los dispositivos compuestos con nombres de archivo largo, y le permite abrir casos mltiples del mismo archivo o dispositivo. Por ejemplo, el comando siguiente asigna el de identificador de dispositivo al nombre de archivo largo C:\NABIRDS\SOUNDS\MOCKMTNG.WAV:
mciSendString( "open c:\nabirds\sounds\mockmtng.wav tipo de alia para wave ", lpszReturnString, lstrlen(lpszReturnString), NULL);

En la interfaz comando mensaje, se especifica un alias usando el miembro lpstrAlias de la estructura MCI_OPEN_PARMS.

Especificando un Tipo del Dispositivo


Cuando se abre un dispositivo, se puede usar la bandera "tipe" para referirse a un tipo de dispositivo, en lugar de un driver del dispositivo especfico. El ejemplo siguiente abre el archivo waveform-audio C:\WINDOWS\CHIMES.WAV (usando la bandera "tipe" para especificar el tipo de dispositivo de waveaudio) y asigna los el seudnimo "chimes":
mciSendString ( c:\windows\chimes.wav tipo de alias para el waveaudio chimes", lpszReturnString, lstrlen(lpszReturnString), NULL);

En la interfaz del comando mensaje, la funcionalidad de la bandera del "type" se proporciona por el miembro del lpstrDeviceType de la estructura MCI_OPEN_PARMS Los Dispositivos simples y Compuestos MCI clasifica a los driver del dispositivo como simple o compuesto. Los drivers para los dispositivos compuestos requieren el nombre de un archivo del datos para la reproduccin; los drivers para los dispositivos simples no lo hacen. Los dispositivos simples incluyen cd de audio y dispositivos del video. Hay dos maneras de abrir los dispositivos simples: Especificando un indicador a un string null-terminated que contiene el nombre del dispositivo del registro o el archivo SYSTEM.INI. Por ejemplo, para abrir un dispositivo de video usando el comando siguiente: mciSendString ("open videodisc", lpszReturnString, lstrlen(lpszReturnString), NULL); En este caso, el "video" es el nombre del dispositivo en el registro o en la seccin [ mci] de SYSTEM.INI. Especificando el nombre real del driver del dispositivo. Abriendo un dispositivo que usa el nombre de archivo del driver del dispositivo, sin embargo, hace que la aplicacin sea especifica del dispositivo y puede impedir que la aplicacin corra sin los cambios de la configuracin de sistema. Si se usa un nombre de archivo, no es necesario especificar el camino completo o la extensin del archivo, MCI asume que el driver se localiza en un directorio del sistema y su extensin es DRV. Los dispositivos compuestos incluyen waveaudio y dispositivos sequencer. Hay tres maneras de abrir un dispositivo compuesto: Especificando slo el nombre del dispositivo. Esto le permite abrir un dispositivo compuesto sin asociar un nombre de archivo. Especificando slo el nombre de archivo. El nombre del dispositivo es determinado de las asociaciones en el registro. Especificando el nombre de archivo y el de dispositivo. MCI ignora las entradas en el registro y abre el nombre del dispositivo especificado. Para asociar un archivo de datos con un dispositivo particular, se especifica el nombre de archivo y el nombre del dispositivo. Por ejemplo, el comando siguiente abre el dispositivo de waveaudio con el archivo MYVOICE.SND:
mciSendString("open myvoice.snd type waveaudio", lpszReturnString, lstrlen(lpszReturnString), NULL);

Abriendo un Dispositivo Usando la Extensin de archivo

X- 9

Si el comando (MCI_OPEN ) especifica slo el nombre del archivo, MCI usa la extensin del archivo para seleccionar el dispositivo apropiado de la lista del registro o de las extensiones del mci en la seccin del archivo SYSTEM.INI. Archivo nuevo de dato Para crear un archivo nuevo de datos, simplemente se especifica un nombre de archivo. MCI no guarda un nuevo archivo hasta que no se lo guarde usando (MCI_SAVE ). Al crear un nuevo archivo, se debe incluir un alias del dispositivo con (MCI_OPEN ). El ejemplo siguiente abre un archivo nuevo de waveaudio, comienza y finaliza el grabado, entonces guarda y cierra el archivo:
mciSendString("open new type waveaudio alias capture", lpszReturnString, lstrlen(lpszReturnString), NULL); mciSendString("record capture", lpszReturnString, lstrlen(lpszReturnString), NULL); mciSendString("stop capture", lpszReturnString, lstrlen(lpszReturnString), NULL); mciSendString("save capture orca.wav", lpszReturnString, lstrlen(lpszReturnString), NULL); mciSendString("close capture", lpszReturnString,lstrlen(lpszReturnString), NULL);

Informacin recuperada de un Dispositivo


Cada dispositivo responde al comando (MCI_GETDEVCAPS ), (MCI_STATUS ), e (CI_INFO ). Estos comandos obtienen la informacin sobre el dispositivo. Las banderas y los comandos bsicos proporcionan una cantidad mnima de informacin sobre un dispositivo. Muchos dispositivos complementan los comandos bsicos con banderas extendidas que proporcionar informacin adicional sobre el dispositivo.

Obtencin de la informacin del sistema de MCI


El comando (MCI_SYSINFO ) obtiene la informacin del sistema sobre los dispositivos de MCI. MCI se ocupa de este comando sin relevarlo a cualquier dispositivo de MCI. Para la interfaz de comando mensaje, MCI devuelve la informacin del sistema en la estructura MCI_SYSINFO_PARMS . Se puede usar el comando (MCI_SYSINFO) para recuperar la informacin, como el nmero de dispositivos de MCI en un sistema, el nmero de dispositivos de MCI de un tipo particular, el nmero de dispositivos de MCI abierto, y los nombres de los dispositivos. Este comando se llama a menudo ms de una vez para recuperar un pedazo de informacin. Por ejemplo, se podra recuperar el nmero de dispositivos de un tipo particular en la primera llamada y entonces podra enumerar los nombres de los dispositivos en la prximo.

Ejecutando un Dispositivo
El comando (MCI_PLAY ) ejecuta la reproduccin de un dispositivo. Sin cualquier bandera, este comando empieza reproducir en la posicin actual y reproduce hasta que el comando se interrumpa o hasta el fin del archivo. Tambin se puede usar (MCI_SEEK ) para cambiar la posicin actual. La mayora de los dispositivos que soportan el comando tambin soportan las banderas (MCI_FROM) y (MCI_TO). Estas banderas indican la posicin a que el dispositivo debe empezar y debe detener la reproduccin. Las unidades asignadas al valor de la posicin dependen del formato de tiempo usado por el dispositivo. Cada dispositivo tiene un formato de tiempo predefinido, pero se debe especificar el formato de tiempo usando (MCI_SET ) antes de emitir cualquier comando que usa los valores de la posicin.

Grabacin
La especificacin generales de MCI soportan grabacin de video-digital, secuencias MIDI, VCR, y los dispositivos de audio del tipo forman de onda; sin embargo, slo se usa en audio-waveform y dispositivos de VCR. Se puede insertar o borrar la informacin grabada en un archivo existente o se puede grabar en un nuevo archivo. Para grabar en un archivo existente, se abre un dispositivo de audio-waveform y se guarda como se hace normalmente. Para grabar en un nuevo archivo con la interfaz de comando mensaje, se especifica un archivo de longitud cero. Cuando MCI crea un nuevo archivo para grabar, el formato de los datos se pone a un formato predefinido especificado por el driver del dispositivo. Para usar otro tipo formato de que no sea el formato predefinido, se debe usar el comando (MCI_SET).

X - 10

Para empezar a grabar, se usa un registro y un comando ellos son: ( MCI_RECORD y la estructura MCI_RECORD_PARMS ). Si no se especifica un fin, la grabacin contina hasta que se enve una parada (MCI_STOP ). Si se graba en un archivo nuevo, se puede empezar a grabar al principio del archivo nuevo y especificar una situacin de fin para terminar la grabacin.

Guardando un Archivo Grabado


Cuando la grabacin est completo, se usa el comando ( MCI_SAVE y la estructura MCI_SAVE_PARMS ) para guardar la grabacin antes de cerrar el dispositivo.

Detener, y hacer una pausa.


El comando (MCI_STOP ) suspende la reproduccin o grabacin de un dispositivo. Muchos dispositivos tambin soportan el comando (MCI_PAUSE ). La diferencia entre la parada y la pausa depende del dispositivo. Normalmente la pausa suspende el funcionamiento pero deja al dispositivo listo para reanudar inmediatamente la reproduccin o grabacin.

Cerrando un Dispositivo
El cierre se realiza con el comando (MCI_CLOSE ) libera el acceso del comando a un dispositivo o archivo. MCI libera un dispositivo cuando todas las tareas que usan un dispositivo lo han cerrado. Para ayudar a MCI a manejar los dispositivos, la aplicacin debe cerrar cada dispositivo o archivo cuando ya fue usando. Cuando se cierra un dispositivo externo de MCI que usa sus propios medios de comunicacin en lugar de los archivos (como el CD audio), el driver deja el dispositivo en su modo actual de funcionamiento. As, si se cierra un dispositivo de CD de audio que est reproduciendo, aunque el driver del dispositivo se libera de la memoria, el CD de audio continuar reproduciendo hasta que alcance el fin de su volumen.

La interfaz de mensajes de comandos desde el lenguaje C


Cuando se utiliza el interfaz de cadenas, una llamada a las funciones mciSendString() o mciExecute(), fuerza al sistema a interpretar la cadena y desglosar cada uno de los parmetros que la componen. Con estos valores el sistema realiza internamente una nueva llamada, esta vez a la funcin mciSendCommand(), que es la funcin utilizada directamente por el interfaz de mensajes. Ambos interfaces ofrecen la misma funcionalidad y poseen, por as decirlo, el mismo "vocabulario", pero donde el interfaz de cadenas, utiliza cadenas de texto, el de mensajes, utiliza datos estructurados y constantes predefinidas en el fichero de cabecera mmsystem.h. Cada uno de los comandos, dispositivos o modificadores que pueden formar parte de una cadena MCI, tienen un valor numrico asociado, accesible desde una constante de C. As por ejemplo, el comando open tiene asociada la constante MCI_OPEN, y el dispositivo waveaudio, la constante MCI_DEVTYPE_WAVEFORM. El prototipo de la funcin mciSendCommand() es el siguiente: DWORD mciSendCommand(UINT wIDDispositivo, UINT wComando, DWORD dwParam1, DWORD dwParam2); wIDDispositivo, es un entero sin signo, que identifica al dispositivo. wComando, indica el comando a realizar, mediante una de las constante del tipo MCI_XXX. dwParam1 es un entero largo en el que se colocan constantes de tipo bandera (flags) que indican diferentes formas de llevar a cabo la accin (esperar, avisar, etc.) dwParam2 est definido como entero largo, pero contiene en realidad la direccin de una estructura C con informacin adicional para el comando (inicio, final, etc.). El tipo de estructura vara con el valor de wComando, ya que cada uno posee una estructura asociada.

Resumen del manejo de un dispositivo MCI

X - 11

1. Abrir un dispositivo con el comando MCI_OPEN y los parmetros necesarios (dispositivo y fichero) en la estructura MCI_OPEN_PARMS. En este caso, el parmetro wIDDispositivo se deja a cero. 2. Almacenar en una variable, el identificador del dispositivo abierto, retornado en el campo wDeviceID de MCI_OPEN_PARMS, en la llamada anterior. 3. A partir de la obtencin de este identificador, lo podremos utilizar para cualquier otra operacin. 4. Consultar el estado del dispositivo, con el comando MCI_STATUS y la estructura CI_STATUS_PARMS. 5. Modificar algn parmetro del dispositivo, con el comando MCI_SET y la estructura MCI_SET_PARMS. 6. Reproducir un fichero con el comando MCI_PLAY y la estructura MCI_PLAY_PARMS. 7. Grabar un fragmento (slo aplicable al dispositivo de onda) con el comando MCI_RECORD y la estructura MCI_RECORD_PARMS. 8. Tambin se pueden utilizar los comandos MCI_PAUSE, MCI_RESUME y MCI_STOP, para parar temporalmente, reanudar, o parar definitivamente la reproduccin o la grabacin. En este caso no se utiliza ninguna estructura, dejando por lo tanto a cero el ltimo parmetro de la funcin. 9. Salvar un fichero a disco con el comando MCI_SAVE y la estructura MCI_SAVE_PARMS. 10.Cerrar un dispositivo con el comando MCI_CLOSE. No se utiliza ninguna estructura, por lo que el ltimo parmetro se deja a cero. En caso de que se produzca algn error, se puede utilizar la funcin mciGetError(), que devuelve una cadena con el mensaje de error correspondiente al cdigo numrico.

Limitaciones de los comandos MCI


En el tema del sonido, las posibilidades MCI son especialmente notables para los dispositivos de onda y el CD audio. Las principales restricciones: Imposibilidad de grabar mensajes MIDI. Imposibilidad de eleccin del puerto de salida para MIDI Imposibilidad de enviar mensajes individuales para MIDI. Bibliografa: Soporte tcnico de Microsoft Microsoft Windows SDK Multimedia Programmers Reference. Programacin de sonido con los comandos MCI, Sergi Jord Puig, Audio digital y MIDI, Guas Monogrficas Anaya Multimedia, Madrid 1997

X - 12

Captulo 11 Programa de adquisicin


Introduccin
Este programa de adquisicin se basa en tomar datos desde la placa de sonido mediante el uso de los comandos MCI de Windows y almacenarlos en un archivo del tipo de forma de onda o WAVE, a su vez esta aplicacin se ejecuta bajo el sistema operativo Windows y posee un entorno grafico. La aplicacin fue desarrollada en Dev-C++ 4, el cual nos permite el uso de las API de Windows y el uso de los comandos MCI.

Programas bajo Windows


Los programas de Windows presentan las siguientes caractersticas:

Independencia de la mquina
Los programas Windows son independientes de la mquina en la que se ejecutan, el acceso a los dispositivos fsicos se hace a travs de interfaces, y nunca se accede directamente a ellos. Esta es una de las principales ventajas para el programador, ya que no hay que preocuparse por el modelo de tarjeta grfica o de impresora, la aplicacin funcionar con todas, y ser el sistema operativo el que se encargue de que as sea.

Recursos
Un concepto importante es el de recurso. Desde el punto de vista de Windows, un recurso es todo aquello que puede ser usado por una o varias aplicaciones. Existen recursos fsicos, que son los dispositivos que componen el ordenador, como la memoria, la impresora, el teclado o el ratn y recursos virtuales o lgicos, como los grficos, los iconos o las cadenas de caracteres. Por ejemplo, si nuestra aplicacin requiere el uso de un puerto serie, primero debe averiguar si est disponible, es decir, si existe y si no lo est usando otra aplicacin; y despus lo reservar para su uso. Esto es necesario porque este tipo de recurso no puede ser compartido. Lo mismo pasa con la memoria o con la tarjeta de sonido, aunque son casos diferentes. Por ejemplo, la memoria puede ser compartida, pero de una forma general, cada porcin de memoria no puede compartirse, y se trata de un recurso finito. Las tarjetas de sonido, dependiendo del modelo, podrn o no compartirse por varias aplicaciones. Otros recursos como el ratn y el teclado tambin se comparten, pero se asigna su uso automticamente a la aplicacin activa, a la que normalmente mantiene contacto con el usuario. Desde otro punto de vista, tambin consideramos recursos a varios componentes como los mens, los iconos, los cuadros de dilogo, las cadenas de caracteres, los mapas de bits, los cursores, etc. En sus programas, Windows almacena separados el cdigo y los recursos, dentro del mismo fichero, y estos ltimos pueden ser editados por separado, permitiendo por ejemplo, hacer versiones de los programas en distintos idiomas sin tener acceso a los ficheros fuente de la aplicacin.

Ventanas
La forma en que se presentan las aplicaciones Windows ante el usuario, es la ventana. Cada aplicacin tiene al menos una ventana, la ventana principal, y todas las comunicaciones entre usuario y aplicacin se canalizan a travs de una ventana. Cada ventana comparte el espacio de la pantalla con otras ventanas, incluso de otras aplicaciones, aunque slo una puede estar activa, es decir, slo una puede recibir informacin del usuario.

XI - 1

Eventos
Los programas en Windows estn orientados a eventos, esto significa que normalmente los programas estn esperando a que se produzca un acontecimiento que les incumba, y mientras tanto permanecen aletargados o dormidos. Un evento puede ser por ejemplo, el movimiento del ratn, la activacin de un men, la llegada de informacin desde el puerto serie, una pulsacin de una tecla... Esto es as porque Windows es un sistema operativo multitarea, y el tiempo del microprocesador ha de repartirse entre todos los programas que se estn ejecutando. Si los programas fueran secuenciales puros, esto no sera posible, ya que hasta que una aplicacin finalizara, el sistema no podra atender al resto.

Proyectos
Debido a la complejidad de los programas Windows, normalmente los dividiremos en varios ficheros fuente, que se compilan por separado y se enlazan juntos. Para crear un proyecto Windows usando este compilador elegiremos el men "File/New Project". Se abrir un cuadro de dilogo donde podremos elegir el tipo de proyecto. Elegimos "Windows Application" y "C++ Project". A continuacin pulsamos "Aceptar". El compilador crea un proyecto con un fichero C++, con el esqueleto de una aplicacin para una ventana.

Controles
Los controles son la forma en que las aplicaciones Windows intercambian datos con el usuario. Normalmente se usan dentro de los cuadros de dilogo, pero pueden usarse en cualquier ventana. Los ms importantes son: Control estatic: son etiquetas, marcos, iconos o dibujos. Control edit: permiten que el usuario introduzca datos alfanumricos en la aplicacin. Control list box: el usuario puede escoger entre varias opciones de una lista. Control combo box: es una combinacin entre un edit y un list box. Control scroll bar: barras de desplazamiento, para la introduccin de valores entre mrgenes definidos. Control button: realizan acciones o comandos, de button de derivan otros dos controles muy comunes: 1. Control check box: permite leer variables de dos estados "checked" o "unchecked" 2. Control radio button: Se usa en grupos, dentro de cada grupo slo uno puede ser activado.

Descripcin del Programa. Ficheros de cabecera


Los ficheros de cabecera utilizados son los siguientes: windows.h que es el fichero para crear aplicaciones Windows llamando a las API. mmsystem.h fichero cabecera para el uso de MCI. stdlib.h fichero que posee funciones estndar de libreras. stdio.h fichero que posee funciones estndar de entrada salida. ids.h fichero que posee declaraciones de constantes utilizadas por la aplicacin.

XI - 2

Para que la aplicacin pueda ser ejecutada bajo Windows fue necesario incluir la siguiente librera: winmm.lib. #include <windows.h> #include <mmsystem.h> #include <stdlib.h> #include <stdio.h> #include "ids.h" #pragma comment(lib, "winmm.lib").

Declaracin del prototipo de las funciones.


Cada tipo (o clase) de ventana que usemos en nuestro programa, o cada cuadro de dilogo, necesitar un procedimiento propio, que deberemos declarar y definir. Siguiendo la estructura de un programa C, esta es la zona de declaracin de prototipos. Para el procedimiento de la ventana la declaracin del prototipo de la funcin tiene la siguiente forma: LRESULT CALLBACK WindowProcedure(HWND, UINT, WPARAM, LPARAM); Los cuadros de dilogo poseen el siguiente prototipo: 1. Funcin por la cual llamamos a un procedimiento que realiza un cuadro de dilogo, en pantalla, por el cual podemos visualizar el tiempo de adquisicin: BOOL CALLBACK DlgProc2(HWND, UINT, WPARAM, LPARAM); 2. 3. Funcin por la cual realizamos el manejo con caracteres alfanumricos de un control edit: BOOL CALLBACK DlgProc3(HWND, UINT, WPARAM, LPARAM); Funcin por la cual realizamos el manejo con caracteres numricos de un control edit: BOOL CALLBACK DlgProcnum(HWND, UINT, WPARAM, LPARAM);

Las funciones utilizadas para la grabacin y reproduccin de ficheros WAVE se declaran de la siguiente forma: 1. 2. Declaracin de la funcin de grabacin: DWORD playWaveFile(HWND, LPSTR); Declaracin de la funcin de reproduccin: DWORD recordWAVEFile(HWND, DWORD);

Declaracin de variables globales


Nuestra aplicacin hace uso de algunas variables globales, alguna solo las utiliza Windows como por ejemplo el nombre de clase, y otras son utilizadas a lo largo del programa: 1. Nombre de la clase: char szClassName[ ] = "Adquisidor"; 2. Tiempo de adquisicin que se realiza en milisegundos, es del tipo entero ya que solo se admiten caracteres tipo numrico: int MilliSeconds; Nombre del archivo con que guardaremos nuestra adquisicin, es un array de caracteres: char Nombre[80]; Para poder almacenar nuestro nombre de archivo haremos uso de una estructura, en la cual existe un solo parmetro tipo carcter:

3. 4.

XI - 3

typedef struct stDatos { char Texto[80]; } DATOS; 5. Para poder almacenar nuestro tiempo de muestreo y luego verificar que se incluyen solo caracteres numricos usaremos una estructura, en la cual existe un solo parmetro tipo entero: typedef struct inDatos { int Numero; } INDATOS;

Funcin Win main


La funcin Winmain se divide en tres partes claramente diferenciadas: declaracin, inicializacin y bucle de mensajes. La funcin WinMain tiene cuatro parmetros de entrada: hInstance es un manipulador para la instancia del programa que estamos ejecutando. Cada vez que se ejecuta una aplicacin, Windows crea una Instancia para ella, y le pasa un manipulador de dicha instancia a la aplicacin. hPrevInstance es un manipulador a instancias previas de la misma aplicacin. Como Windows es multitarea, pueden existir varias versiones de la misma aplicacin ejecutndose, varias instancias. En Win32 usa un segmento distinto para cada instancia y este parmetro es siempre NULL, slo se conserva por motivos de compatibilidad con Win 3.11. lpszCmdParam, esta cadena contiene los argumentos de entrada del comando de lnea. nCmdShow, este parmetro especifica cmo se mostrar la ventana. Funcin winmain: int WINAPI WinMain(HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR pszArgument, int nFunsterStil) Declaracin En la primera zona declararemos las variables que necesitamos para nuestra funcin WinMain: HWND hWnd, un manipulador para la ventana principal de la aplicacin. Ya que nuestra aplicacin necesitar al menos una ventana. MSG Message, una variable para manipular los mensajes que lleguen a nuestra aplicacin. WNDCLASSEX wincl, una estructura que se usar para registrar la clase particular de ventana que usaremos en nuestra aplicacin. La declaracin se realiza de la siguiente forma: HWND hwnd; MSG messages; WNDCLASSEX wincl; Tambin haremos uso de otra declaracin previa la cual es el tiempo de adquisicin el cual debe poseer un valor por defecto, en este caso el valor por defecto ser 1000 ms: MilliSeconds = 1000; Inicializacin Esta zona se encarga de registrar la clase o clases de ventana, crear la ventana y visualizarla en pantalla. Para registrar la clase primero hay que rellenar adecuadamente la estructura WNDCLASSEX, que define algunas caractersticas que sern comunes a todas las ventanas de una misma clase, como color de fondo, icono, men por defecto, el procedimiento de ventana, etc. Despus hay que llamar a la funcin RegisterClassEx.

XI - 4

A continuacin se crea la ventana usando la funcin CreateWindowEx. Esta funcin nos devuelve un manipulador de ventana que podemos necesitar en otras funciones. Para que la ventana sea visible hay que llamar a la funcin ShowWindow. La primera vez que se llama a sta funcin, despus de crear la ventana, se puede usar el parmetro nCmdShow de WinMain como parmetro o mejor an, como se recomienda por Windows, el valor SW_SHOWDEFAULT. Estructura de la ventana: wincl.hInstance = hThisInstance; wincl.lpszClassName = szClassName; wincl.lpfnWndProc = WindowProcedure; wincl.style = CS_DBLCLKS; wincl.cbSize = sizeof(WNDCLASSEX); Usa icono y puntero del ratn por defecto: wincl.hIcon = LoadIcon(NULL, IDI_APPLICATION); wincl.hIconSm = LoadIcon(NULL, IDI_APPLICATION); wincl.hCursor = LoadCursor(NULL, IDC_ARROW); wincl.lpszMenuName = NULL; wincl.cbClsExtra = 0; wincl.cbWndExtra = 0; wincl.hbrBackground = (HBRUSH) GetStockObject(LTGRAY_BRUSH); Registra la clase de ventana, si falla sale del programa: if(!RegisterClassEx(&wincl)) return 0; La clase es registrada, ya se puede crear el programa: hwnd = CreateWindowEx( 0, /* Extended possibilities for variation */ szClassName, /* Classname */ "Adquisidor de Datos ", /* Title Text */ WS_OVERLAPPEDWINDOW, /* default window */ CW_USEDEFAULT, /* Windows decides the position */ CW_USEDEFAULT, /* where the window ends up on the screen */ 544, /* The programs width */ 375, /* and height in pixels */ HWND_DESKTOP, /* The window is a child-window to desktop */ LoadMenu(hThisInstance, "Men"),/* men llamado del recurso win003.rc*/ hThisInstance, /* Program Instance handler */ NULL /* No Window Creation data */ ); Visualizacin de la ventana: ShowWindow(hwnd, nFunsterStil); Bucle de mensajes Este es el ncleo de la aplicacin, como se ve en el programa permanece en este bucle mientras la funcin GetMessage retorne con un valor TRUE si retorna cero sale de la aplicacin. while(GetMessage(&messages, NULL, 0, 0)) { TranslateMessage(&messages); /* Translate virtual-key messages into character messages */ DispatchMessage(&messages); /* Send message to WindowProcedure */ } La funcin TranslateMessage se usa para traducir los mensajes de teclas virtuales a mensajes de carcter. Los mensajes traducidos se reenvan a la lista de mensajes del proceso, y se recuperarn con las siguientes

XI - 5

llamadas a GetMessage. La funcin DispatchMessage enva el mensaje al procedimiento de ventana, donde ser tratado adecuadamente.

El procedimiento de ventana
Cada ventana tiene una funcin asociada, esta funcin se conoce como procedimiento de ventana, y es la encargada de procesar adecuadamente todos los mensajes enviados a una determinada clase de ventana. Es la responsable de todo lo relativo al aspecto y al comportamiento de una ventana. Normalmente, estas funciones estn basadas en una estructura "switch" donde cada "case" corresponde aun determinado tipo de mensaje. Esta funcin es llamada por la funcin del API DispatchMessage(). LRESULT CALLBACK WindowProcedure( HWND hwnd, UINT message,WPARAM wParam LPARAM ) hwnd es el manipulador de la ventana a la que est destinado el mensaje. msg es el cdigo del mensaje. wParam es el parmetro de tipo palabra asociada al mensaje. lParam es el parmetro de tipo doble palabra asociada al mensaje.

Podemos considerar este prototipo como una plantilla para crear nuestros propios procedimientos de ventana. El nombre de la funcin puede cambiar, pero el valor de retorno y los parmetros deben ser los mismos. El miembro lpfnWndProc de la estructura WNDCLASS es un puntero a una funcin de este tipo, esa funcin es la que se encargar de procesar todos los mensajes para esa clase de ventana. Cuando registremos nuestra clase de ventana, tendremos que asignar a ese miembro el puntero a nuestro procedimiento de ventana. Ya que esta funcin se encuentra fuera de la funcin Winmain debemos declarar algunas variables que se usaran a lo largo de la aplicacin: Declaramos una variable tipo puntero a carcter la cual posee la direccin y el nombre de archivo: char* WAV="c:\tdiii\tmp.wav"; Declaro como static las variables para el dilogo: static HINSTANCE hInstance; static DATOS Datos; static INDATOS inDatos;

Manipulador de mensajes: La estructura swich tiene la siguiente forma en donde cada case corresponde a un mensaje: switch (message) { case WM_CREATE: * * * return 0; break; case WM_COMMAND: * * * break; } break; case WM_DESTROY: PostQuitMessage(0);

XI - 6

break; default: return DefWindowProc(hwnd, message, wParam, lParam); } return 0; } WM_DESTROY es el mensaje que se enva a una ventana cuando se recibe un comando de cerrar, ya sea por men o mediante el icono de aspa en la esquina superior derecha de la ventana. Este mensaje slo sirve para informar a la aplicacin de que el usuario tiene la intencin de abandonar la aplicacin, y le da una oportunidad de dejar las cosas en su sitio: cerrar ficheros, liberar memoria, guardar variables, etc. Incluso, la aplicacin puede decidir que an no es el momento adecuado para abandonar la aplicacin. En este caso, efectivamente cierra la aplicacin, y lo hace envindole un mensaje WM_QUIT, mediante la funcin PostQuitMessage. El resto de los mensajes se procesan en el caso "default", y simplemente se cede su tratamiento a la funcin del API que hace el proceso por defecto para cada mensaje, DefWindowProc. Este es el camino que sigue el mensaje WM_QUIT cuando llega, ya que el proceso por defecto para este mensaje es cerrar la aplicacin. Mens Un men: se trata de una ventana, del tipo pop-up, que contiene una lista de comandos u opciones entre las cuales el usuario puede elegir. Cuando se usan en una aplicacin, normalmente se agrupan varios mens bajo una barra horizontal, dividida en varias zonas o tems. Cada tem de un men, (salvo los separadores y aquellos que despliegan nuevos mens), tiene asociado un identificador, este identificador se declara en el archivo cabecera ids.h. El valor de ese identificador se usar por la aplicacin para saber qu opcin se activ por el usuario, y decidir las acciones a tomar en consecuencia. Respondiendo a los mensajes del men Las activaciones de los mens se reciben mediante un mensaje WM_COMMAND. Para procesar estos mensajes, si slo podemos recibir mensajes desde un men, nicamente nos interesa la palabra de menor peso del parmetro wParam del mensaje. switch (message) { case WM_CREATE: /* Inicializacin de los datos de la aplicacin */ hInstance = ((LPCREATESTRUCT)lParam)->hInstance; strcpy(Datos.Texto, "c:\\tdiii\\tmp.wav"); //Copio el nom, de arch. a la estructura strcpy(Nombre,Datos.Texto); //copio de la estructura a la variable Nombre inDatos.Numero = MilliSeconds; // asigno el valor de MilliSeconds al parmetro de la estructura return 0; break; case WM_COMMAND: switch(LOWORD(wParam)) //la macro LOWORD para extraer el identificador del tem del //parmetro wParam. { case CM_ADQ: // ** MENU ** --> GRABAR //Muestro el tiempo de adquisicin DialogBoxParam(hInstance, "Dialogo2", hwnd, DlgProc2, MilliSeconds); //funcin grabar recordWAVEFile(hwnd, MilliSeconds); //llamo a la fc grabar /* Msg adquisicin terminada */ MessageBox(hwnd, "Adquisicin terminada", "Adquisidor", MB_OK);

XI - 7

break; case CM_REP: // ** MENU ** --> REPRODUCIR /* Rutina de REPROPDUCCION */ playWaveFile(hwnd, Nombre); /* Msg reproduccin terminada */ MessageBox(hwnd, "Reproduccin terminada", "Adquisidor", MB_OK); break; case CM_SALIR: // ** MENU ** --> SALIR PostQuitMessage(0); /* enva un mensaje WM_QUIT a la cola de mensajes */ break; case CM_ARCH: // MENU -> config -> arch DialogBoxParam(hInstance, "Dialogo3", hwnd, DlgProc3, (LPARAM)&Datos); strcpy(Nombre,Datos.Texto); MessageBox(hwnd, "Esta fc. no esta incluida", "Adquisidor", MB_OK); break; case CM_TIEMPO: // MENU -> config -> tiempo DialogBoxParam(hInstance, "Dialogonum", hwnd, DlgProcnum, (LPARAM)&inDatos); MilliSeconds = inDatos.Numero; //cargo el entero con el valor de la estructura break; } break; case WM_DESTROY: PostQuitMessage(0); /* enva un mensaje WM_QUIT a la cola de mensajes*/ break; default: return DefWindowProc(hwnd, message, wParam, lParam); } return 0; } El mensaje WM_CREATE tiene como parmetro en lParam un puntero a una estructura CREATESTRUCT que contiene informacin sobre la ventana. En nuestro caso slo nos interesa el campo hInstance.

Funciones de grabacin y reproduccin:


Estas funciones realizan la grabacin y reproduccin de archivos WAVE, cada una de las funciones aqu utilizadas fueron descriptas en el Captulo 11, MCI de Windows. Funcin Grabar: El prototipo de la funcin es el siguiente: DWORD recordWAVEFile(HWND hMainWnd, DWORD dwMilliSeconds) En donde: HWND hMainWnd, es el tipo de ventana. DWORD dwMilliSeconds, es el tiempo de adquisicin en milisegundos. Definicin de variables: UINT wDeviceID; DWORD dwReturn; MCI_OPEN_PARMS mciOpenParms; MCI_RECORD_PARMS mciRecordParms; MCI_SAVE_PARMS mciSaveParms; MCI_PLAY_PARMS mciPlayParms;

XI - 8

Abre un dispositivo de audio de forma de onda con un nuevo archivo para grabar utilizo el archivo adq.wav, este archivo solo posee las cabeceras de una archivo WAVE. mciOpenParms.lpstrDeviceType = "waveaudio"; mciOpenParms.lpstrElementName = "adq.wav"; Verifico si el dispositivo abri correctamente: if (dwReturn = mciSendCommand(0, MCI_OPEN, MCI_OPEN_ELEMENT | MCI_OPEN_TYPE, (DWORD)(LPVOID) &mciOpenParms)) { // Falla al abrir el dispositivo; devuelve error. MessageBox(hMainWnd, "ERROR apertura ID", "Adquisidor", MB_OK); return (dwReturn); } Si el dispositivo abri con xito; obtengo el ID al dispositivo. wDeviceID = mciOpenParms.wDeviceID; Ya nos encontramos en condiciones de iniciar la grabacin con el tiempo de adquisicin ya antes previsto. mciRecordParms.dwTo = dwMilliSeconds; if (dwReturn = mciSendCommand(wDeviceID, MCI_RECORD, MCI_TO | MCI_WAIT, (DWORD)(LPVOID) &mciRecordParms)) { mciSendCommand(wDeviceID, MCI_CLOSE, 0, 0); MessageBox(hMainWnd, "Adquisicin exitosa", "Adquisidor", MB_OK); return (dwReturn); } Ejecuta la grabacin para verificar que sea correcta. MessageBox(hMainWnd, "Ejecuto la adq", "Adquisidor", MB_OK); mciPlayParms.dwFrom = 0L; if (dwReturn = mciSendCommand(wDeviceID, MCI_PLAY, MCI_FROM | MCI_WAIT, (DWORD)(LPVOID) &mciPlayParms)) { mciSendCommand(wDeviceID, MCI_CLOSE, 0, 0); return (dwReturn); } Se esta en condiciones de guardar el archivo con un nombre por defecto. if (MessageBox(hMainWnd, "Guardar la adq?", "", MB_YESNO) == IDNO) { mciSendCommand(wDeviceID, MCI_CLOSE, 0, 0); return (0); } // Guardo la adquisicin con el nom de arch. mciSaveParms.lpfilename = "temp.wav"; if (dwReturn = mciSendCommand(wDeviceID, MCI_SAVE, MCI_SAVE_FILE | MCI_WAIT, (DWORD)(LPVOID) &mciSaveParms)) { mciSendCommand(wDeviceID, MCI_CLOSE, 0, 0); MessageBox(hMainWnd, "ERROR no se Guardo", "Adquisidor", MB_OK); return (dwReturn); }

XI - 9

Una vez finalizado todo el proceso debo finalizar el dispositivo y retornar un valor a la aplicacin que llamo a esta funcin. mciSendCommand(wDeviceID, MCI_CLOSE, 0, 0); // cierro el dispositivo antes de salir return (0); Funcin Reproducir: El prototipo de la funcin es el siguiente: DWORD playWaveFile(HWND hMainWnd, LPSTR lpstrNombreFichero) En donde: HWND hMainWnd, es el tipo de ventana LPSTR lpstrNombreFichero, es un puntero con el nombre del archivo a reproducir. Definicin de variables: UINT wIDDispositivo; DWORD dwRetorno; MCI_OPEN_PARMS mciOpenParms; MCI_PLAY_PARMS mciPlayParms; Abrimos dispositivo, indicando tipo de archivo y fichero, en este caso es Temp.wav: mciOpenParms.lpstrDeviceType = "waveaudio"; mciOpenParms.lpstrElementName = "temp.wav"; Una ves indicado el tipo de fichero y archivo debemos obtener el id del dispositivo. MessageBox(hMainWnd, "Comienzo de la Reproduccin", "Adquisidor", MB_OK); if (dwRetorno = mciSendCommand(0, MCI_OPEN, MCI_OPEN_TYPE | MCI_OPEN_ELEMENT, (DWORD)(LPVOID)&mciOpenParms)) { MessageBox(hMainWnd, "ERROR en apertura", "Adquisidor", MB_OK); return (dwRetorno); //Error en la apertura } //Apertura correcta. Obtenemos el identificador wIDDispositivo = mciOpenParms.wDeviceID; MessageBox(hMainWnd, "Apertura OK, ID OK", "Adquisidor", MB_OK); Se inicia la reproduccin. mciPlayParms.dwFrom = 0L; if (dwRetorno = mciSendCommand(wIDDispositivo, MCI_PLAY, MCI_FROM | MCI_WAIT, (DWORD)(LPVOID) &mciPlayParms)) { mciSendCommand(wIDDispositivo, MCI_CLOSE, 0, 0); MessageBox(hMainWnd, "ERROR reproduccin", "Adquisidor", MB_OK); return (dwRetorno); } Terminada la reproduccin finalizamos el dispositivo. mciSendCommand(wIDDispositivo, MCI_CLOSE, 0, 0); // cierro el dispositivo antes de salir return (0);

XI - 10

Funciones de dilogo
Funcin Imprimir dilogo(Imprime en pantalla en tiempo de adquisicin) El procedimiento de la funcin es el siguiente: BOOL CALLBACK DlgProc2(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam) En donde: HWND hDlg, identifica el cuadro de dilogo y es el manipulador de la ventana a la que est destinado el mensaje. UINT msg, es el cdigo del mensaje WPARAM wParam, es el parmetro de tipo palabra asociado al mensaje LPARAM lParam, es el parmetro de tipo doble palabra asociado al mensaje El procedimiento de dilogo debe retornar con un valor no nulo si procesa el mensaje y cero si no lo hace. Cuando responde a un mensaje WM_INITDIALOG, el procedimiento debe retornar cero si llama a la funcin SetFocus para poner el foco a uno de los controles del cuadro de dilogo. En otro caso, debe retornar un valor distinto de cero, y el sistema pondr el foco en el primer control del dilogo que pueda recibirlo. { char texto[25]; switch (msg) /* manipulador del mensaje */ { case WM_INITDIALOG: sprintf(texto, "T. de adq. (ms): %d", lParam); SetWindowText(GetDlgItem(hDlg, TEXTO), texto); return TRUE; case WM_COMMAND: EndDialog(hDlg, FALSE); return TRUE; } return FALSE; Hemos usado la funcin estndar sprintf para conseguir un texto esttico a partir del parmetro lParam. Posteriormente, usamos ese texto para modificar el control esttico TEXTO. La funcin SetWindowText se usa para cambiar el ttulo de una ventana, pero tambin sirve para cambiar el texto de un control esttico. Funcin dilogo Nombre de archivo Podemos introducir y modificar texto en el cuadro de dilogo, pero no podemos asignar valores iniciales al control de edicin ni tampoco podemos hacer que la aplicacin tenga acceso al texto introducido por el usuario. Lo primero que tenemos que tener es algn tipo de variable que puedan compartir los procedimientos de ventana de la aplicacin y el del dilogo. En nuestro caso se trata slo de una cadena. Se trata de crear una estructura con todos los datos que queremos que el procedimiento de dilogo comparta con el procedimiento de ventana, al declaracin de esta estructura se define como variable global. El procedimiento de la funcin es el siguiente: BOOL CALLBACK DlgProc3(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam) Existe un modo de pasar parmetros al cuadro de dilogo, usando la funcin DialogBoxParam, a travs del parmetro lParam. Aunque esta opcin nos limita a valores enteros, y slo permite pasar valores al procedimiento de dilogo, en realidad se puede usar para pasar valores en ambos sentidos, bastar con enviar un puntero en lugar de un entero. Para ello haremos un llamado del puntero al tipo LPARAM. Dentro del procedimiento de dilogo haremos otro llamado de LPARAM al puntero. Esto nos permite declarar la variable que contiene los datos dentro del procedimiento de ventana.

XI - 11

Ahora tenemos que hacer que se actualice el contenido del control edit al abrir el cuadro de dilogo. El lugar adecuado para hacer esto es en el proceso del mensaje WM_INITDIALOG. case WM_INITDIALOG: SendDlgItemMessage(hDlg, ID_TEXTO, EM_LIMITTEXT, 80, 0L); Datos = (DATOS *)lParam; SetDlgItemText(hDlg, ID_TEXTO, Datos->Texto); SetFocus(GetDlgItem(hDlg, ID_TEXTO)); return FALSE; Existen dos llamadas a dos funciones del API. La primera es a SendDlgItemMessage, que enva un mensaje a un control. En este caso se trata de un mensaje EM_LIMITTEXT, que sirve para limitar la longitud del texto que se puede almacenar y editar en el control edit. Es necesario que hagamos esto, ya que el texto que puede almacenar nuestra estructura de datos est limitado a 80 caracteres. Tambin hemos aadido una llamada a la funcin SetDlgItemText, que cambia el contenido del texto en el interior de un control edit. Al pulsar el botn de aceptar, el dato de nuestra aplicacin se actualiza con el texto que hay en el control edit. case WM_COMMAND: switch(LOWORD(wParam)) { case IDOK: GetDlgItemText(hDlg, ID_TEXTO, Datos->Texto, 80); EndDialog(hDlg, FALSE); break; case IDCANCEL: EndDialog(hDlg, FALSE); break; } Para eso hemos aadido la llamada a la funcin GetDlgItemText, que es simtrica a SetDlgItemText. Funcin dilogo Tiempo de adquisicin Para la edicin de nmeros, el API tiene previstas algunas constantes y funciones. Igual que el caso anterior debemos crear una estructura con un parmetro, pero en este caso debe ser entero. El prototipo de la funcin es el siguiente: BOOL CALLBACK DlgProcnum(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam) Para actualizar el contenido del control edit al abrir el cuadro de dilogo se realiza en el proceso del mensaje: WM_INITDIALOG: switch (msg) /* manipulador del mensaje */ { case WM_INITDIALOG: datos = (INDATOS *)lParam; //el dato contenido en el estructura lo paso a dato SetDlgItemInt(hDlg, ID_NUMERO, (UINT)datos->Numero, FALSE);//cambia el contenido del control a un control numrico SetFocus(GetDlgItem(hDlg, ID_NUMERO)); return FALSE; En este caso no es necesario limitar el texto que podemos editar en el control, ya que las propias funciones del API se encargan de capturar y convertir el contenido del control en un nmero. SetDlgItemInt, cambia el contenido de un control edit con un valor numrico.

XI - 12

Para leer el contenido cuando procesemos el comando generado al pulsar el botn de "Aceptar" aadimos la llamada a la funcin GetDlgItemInt, que es simtrica a SetDlgItemInt. El proceso difiere del usado para capturar cadenas, ya que en este caso la funcin nos devuelve el valor numrico del contenido del control edit. case WM_COMMAND: switch(LOWORD(wParam)) { case IDOK: numero = GetDlgItemInt(hDlg, ID_NUMERO, &NumeroOk, FALSE);//lee el contenido del control if(NumeroOk) { datos->Numero = numero; EndDialog(hDlg, FALSE); } else MessageBox(hDlg, "Nmero no vlido", "Error", MB_ICONEXCLAMATION | MB_OK); break; case IDCANCEL: EndDialog(hDlg, FALSE); break; } Tambin devuelve un parmetro que indica si ha habido algn error durante la conversin. Si el valor de ese parmetro es TRUE, significa que la conversin se realiz sin problemas, si es FALSE, es que ha habido un error. Si nuestro programa detecta un error visualizar un mensaje de error y no permitir abandonar el cuadro de dilogo. Pero si ha habido un error, el valor de retorno de GetDlgItemInt ser cero. El flag BM_ICONEXCLAMATION en el MessageBox, aade un icono al cuadro de mensaje y el sonido predeterminado para alertar al usuario.

Fichero cabecera ids.h


este fichero cabecera contiene todas las declaraciones de identificadores, tanto para el men como para los mensajes. Constantes del men pop-up Adquirir: #define CM_ADQ 100, se define la opcin Adquirir del men. #define CM_REP 101 , se define la opcin Reproducir del men. #define CM_SALIR 102 , se define la opcin Salir del men. Constantes del men pop-up Configurar: #define CM_ARCH 103, se define la opcin Nombre de archivo del men. #define CM_TIEMPO 104, se define la opcin Tiempo de adquisicin del men. Constantes para los dilogos: #define TEXTO 106 #define CM_DIALOGO 107 #define ID_TEXTO 108, constante para la edicin de texto. #define ID_NUMERO 110, constante para la edicin de enteros.

Ficheros de recursos
Una forma de implementar mens es por medio de un fichero de recursos, para crear o modificar mens durante la ejecucin de la aplicacin. 1. Usaremos siempre etiquetas como identificadores para los tems de los mens, y nunca valores numricos literales. 2. Crearemos un fichero de cabecera con las definiciones de los identificadores, en nuestro caso se llamar "ids.h".

XI - 13

3. Incluiremos este fichero de cabecera tanto en el fichero de recursos, como en el del cdigo fuente de nuestra aplicacin. Dev-C++, posee un editor de recursos: File New Resource File. En el cual editaremos nuestro recurso. En nuestro recurso hemos incluido un icono para la aplicacin de la siguiente forma: win003 ICON "c:\\tdiii\\Multimedia.ico" En un recurso se debe incluir los ficheros de cabecera utilizados: #include <windows.h> #include "ids.h" En un fichero de recursos podemos crear toda la estructura de un men. Men Menu MENU BEGIN POPUP "&Adquirir" BEGIN MENUITEM "&Adquirir", CM_ADQ MENUITEM SEPARATOR MENUITEM "&Reproducir", CM_REP MENUITEM SEPARATOR MENUITEM "&Salir", CM_SALIR END POPUP "&Configurar" BEGIN MENUITEM "&Archivo", CM_ARCH MENUITEM SEPARATOR MENUITEM "&Tiempo", CM_TIEMPO END END Definimos el men mediante una cadena identificadora, sin comillas, seguida de la palabra MENU. Entre las palabras BEGIN y END podemos incluir items, separadores u otras columnas. Para incluir columnas usamos una sentencia del tipo POPUP seguida de la cadena que se mostrar como texto en el men. Cada POPUP se comporta del mismo modo que un MENU. Los tems se crean usado la palabra MENUITEM seguida de la cadena que se mostrar en el men, una coma, y el comando asignado a ese tem, que puede ser un nmero entero, o, como en este caso, una macro definida. Los separadores se crean usando MENUITEM seguido de la palabra SEPARATOR. El smbolo & , por ejemplo "&Adquirir" indica que la siguiente letra puede usarse para activar la opcin del men desde el teclado, usando la tecla [ALT] ms la letra que sigue al smbolo &. Para indicar eso, en pantalla, esa letra se muestra subrayada. Dilogos. Los cuadros de dilogo son la forma de ventana de comunicacin entre una aplicacin Windows y el usuario. Para facilitar la tarea del usuario a la hora de introducir datos, existen varios tipos de controles, cada uno de ellos diseado para un tipo especfico de informacin. Los ms comunes son los "static", "edit", "button", "listbox", "scroll", "combobox", "group", "checkbutton", "ratiobutton", "updown", "listview", "treeview", "gauge", "tab" y "trackbar". Un cuadro de dilogo es una ventana normal, aunque con algunas peculiaridades. Tambin tiene su procedimiento de ventana (procedimiento de dilogo), pero puede devolver un valor a la ventana que lo invoque. Igual que los mens, los cuadros de dilogo se pueden construir durante la ejecucin o a partir de un fichero de recursos. Dialogo2 DIALOG 0, 0, 118, 48 // Puntos de inicio y fin

XI - 14

STYLE DS_MODALFRAME | //se crear un cuadro de dilogo con un marco de dialog-box modal que puede combinarse con una barra de ttulo y un men de sistema. WS_POPUP | //crea una ventana "pop-up". WS_VISIBLE | //crea una ventana inicialmente visible. WS_CAPTION CAPTION //crea una ventana con una barra de ttulo, "Adquisidor" //Nombre de la ventana. FONT 8, "Helv" // Fuente y tamao de la letra BEGIN CONTROL // palabra clave que indica que vamos a definir un control. "Tiempo (ms):", //texto que se mostrara TEXTO, //id es el identificador del control. "static", // class es la clase de control, en nuestro caso "static". SS_LEFT | //indica un simple rectngulo y el texto suministrado se alinea en su //Interior a la izquierda. WS_CHILD | //crea el control como una ventana hija. WS_VISIBLE, //crea una ventana inicialmente visible. 8, 9, 84, 8 // coordenadas del control. CONTROL "Aceptar", IDOK, //esta definido dentro de windows.h "button", //class es la clase de control, en nuestro caso "button". BS_PUSHBUTTON | //crea un botn corriente que enva un mensaje WM_COMMAND BS_CENTER | // centra el texto horizontalmente en el rea del botn. WS_CHILD | WS_VISIBLE | WS_TABSTOP, // define un control que puede recibir el foco del teclado cuando el //Usuario pulsa la tecla TAB. 56, 26, 50, 14 END Dialogo3 DIALOG //Nombre de arch "mensaje de guardar" 0, 0, 118, 48 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION CAPTION "Adquisidor" FONT 8, "Helv" BEGIN CONTROL "Archivo:", -1, "STATIC", SS_LEFT | WS_CHILD | WS_VISIBLE, 8, 9, 28, 8 CONTROL "", ID_TEXTO, "EDIT", ES_LEFT | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP, 36, 9, 76, 12 CONTROL "Aceptar", IDOK, "BUTTON",BS_DEFPUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 8, 26, 45, 14 CONTROL "Cancelar", IDCANCEL, "BUTTON", BS_PUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 61, 26, 45, 14 END Dialogonum DIALOG //tiempo de adq ES_NUMBER permite la edicin de enteros 0, 0, 118, 48 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION CAPTION "Adquisidor" FONT 8, "Helv" BEGIN CONTROL "Tiempo (ms):", -1, "STATIC", SS_LEFT | WS_CHILD | WS_VISIBLE, 8, 9, 28, 8 CONTROL "", ID_NUMERO, "EDIT", ES_NUMBER | ES_LEFT | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP, 36, 9, 76, 12 CONTROL "Aceptar", IDOK, "BUTTON", BS_DEFPUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 8, 26, 45, 14 CONTROL "Cancelar", IDCANCEL, "BUTTON", BS_PUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 61, 26, 45, 14 END

XI - 15

Estructura del Proyecto.


El proyecto incluye los siguientes cdigos fuente: Cabecera ids.h WinMenu.c Recurso win003.rc Para ver el cdigo fuente completo remitirse al Apndice A Nota: Para el correcto funcionamiento de la aplicacin se deben incluir en el proyecto las libreras utilizadas, recursos, etc. Para ello se accede a Project Project options y se agrega la librera libwinmm.a y el recurso utilizado win003.rc antes de realizar la compilacin. La carpeta que contiene el cdigo fuente debe tener incluidos los siguientes archivos (algunos los crea el compilador por ejem.: los archivos con extensin o y obj).

XI - 16

Manejo de la aplicacin Adquisidor.exe.


Una vez ejecutada la aplicacin, como primer paso, se debe configurar el tiempo de adquisicin en milisegundos, la aplicacin ya trae, por defecto, configurado un tiempo de 1000ms. Tambin se puede cambiar el nombre del archivo en donde se almacena la adquisicin , que por defecto es tmp.wav, pero no esta disponible en esta aplicacin, solo se presenta para desarrollos futuros. Seleccionamos la opcin Tiempodel men Configurar. El tiempo de adquisicin esta comprendido entre 1 ms y 1000000000 ms. Si el nmero ingresado esta fuera de rango nos mostrar un error.

Una vez realizada la configuracin previa estamos en condiciones de realizar la adquisicin para ello seleccionamos Adquirir del men Adquirir Una vez seleccionado visualizaremos el tiempo durante el cual se llevara a cabo la adquisicin. Presionando Aceptar la aplicacin nos informa del comienzo de la adquisicin.

Nuevamente presionando el botn Aceptar comienza el proceso de adquisicin, durante el tiempo seleccionado.

Una vez finalizada, la aplicacin permite reproducir la adquisicin, con el fin de verificar si esta correcta. Presionando el botn Aceptar comienza la reproduccin.

Si la adquisicin obtenida es la deseada estamos en condiciones de guardar la adquisicin, la aplicacin utiliza un nombre por defecto para guardar la adquisicin, este nombre es tmp.wav que se encuentra en la misma carpeta donde se tiene la aplicacin.

XI - 17

Al finalizar todo el proceso de adquisicin y guardado, la aplicacin nos informa de la finalizacin de dicha adquisicin.

Otra particularidad de nuestra aplicacin es que nos permite reproducir los archivos adquiridos, para ello se accede a la opcin Reproducir del men Adquirir Una vez seleccionado, la aplicacin, nos informa del comienza de la reproduccin.

Al presionar Aceptar se presenta una serie de informacin, como que la apertura del archivo fue correcta y que se obtuvo correctamente el identificador del dispositivo, solo vasta con presionar Aceptar para comenzar la reproduccin. Una vez finalizada la reproduccin, se nos informa de la finalizacin por medio de un mensaje.

Tanto en la grabacin como en la reproduccin, en caso de error se podr visualizar el siguiente mensaje.

Para salir de la aplicacin se accede al men Adquirir y se selecciona la opcin Salir o presionado la cruz X en el borde superior derecho. Bibliografa: Win API. Aplicaciones con API 32. Julio de 2004, Salvador Pozo Coronado http:\winapi.conclase.net Microsoft Windows SDK Multimedia Programmers Reference. Programacin de sonido con los comandos MCI, Sergi Jord Puig, Audio digital y MIDI, Guas Monogrficas Anaya Multimedia, Madrid 1997 Materia Integrada: Informtica II. (En nuestro proyecto se trataron la mayora de los temas de la ctedra ) Consulta realizada al Ing. Vota Ramiro sobre: compilacin, manejo de funciones especiales. Bibliografa de la materia: Turbo C/C++, Herbert Schild (Los temas aqu tratados eran de nuestro conocimiento lo cual no fue necesario el uso de esta bibliografa). El lenguaje de programacin C, Kernighan y Ritchie. (Los temas de consulta son: proposiciones, punteros, funciones).

XI - 18

Captulo 12 Transformadas de Fourier y la DFT.


Introduccin.
Los mtodos de Fourier son comnmente usados para el anlisis de seales y el diseo de sistemas en telecomunicaciones modernas, radar, y procesamiento de imgenes. Los mtodos clsicos de Fourier tales como la serie de Fourier y la integral de Fourier son usados para seales y sistemas de tiempo continuo (CT); es decir sistemas en los que una seal caracterstica s(t) , esta definida en todos los valores de t sobre un continuo inf.<t<inf. Un conjunto mas recientemente desarrollado de mtodos de Fourier, incluyendo la transformada de fourier de Tiempo Discreto (DTFT) y la Transformada Discreta de Fourier (DFT ) son extensiones de conceptos bsicos de Fourier que se aplican a seales en tiempo discreto (DT). Una seal DT caracterstica s[n], esta definida solamente para valores de n donde n es un entero en el rango inf<n<inf.

Clases CT y DT de mtodos de Fourier


Un nfasis particular sobre la relacin entre estas dos clases. La relacin entre los dominios CT y DT esta caracterizada por las operaciones de muestreo y reconstruccin. Si s*(t), denota una seal s(t) que ha sido uniformemente muestreada cada T segundos, luego la representacin matemtica de s*(t) esta dada por:

s*(t)=

n =

s(t ) (t nT )

(ec. 1.2.1)

Donde (t) es una funcin impulso CT definida cero para todo t distinto de cero, indefinida en t=0, y teniendo rea unidad al integrar desde t=-inf. a t=+inf. Dado que los nicos lugares donde el producto dentro de la sumatoria anterior, no es idnticamente igual a cero, son los instantes de muestreo, s(t) en la ecuacin (1) puede ser remplazado con s(nT). Luego: s*(t)=

n =

s(nt ) * (t nT )

(ec. 1.2.2)

el modelo de muestreo CT, s*(t) consiste de una secuencia de funciones impulso CT uniformemente espaciadas a intervalos de T segundos y escalados por los valores de la seal s(t) en los instantes de muestreo. En el dominio DT, el modelo de muestreo es simplemente la secuencia definida al tomar los valores de s(t) en los instantes de muestreo:

s[n ] = s (t ) |t =nT

(ec. 1.2.3)

En contraste a s*(t), que no esta defina para los instantes de muestreo, s[n] est bien definida en los instantes de muestreo. As, est ahora claro, que s*(t) y s[n] son modelos diferentes pero equivalentes del proceso de muestreo en los dominios CT y DT, respectivamente. Sus equivalencias esta establecida por el hecho de que tienen el mismo espectro en el dominio de Fourier, y la seal CT subyacente a partir de la cual s*(t) y s[n] son derivadas, puede ser recuperada por cualquiera de las dos representaciones de muestreo, bajo la condicin de una razn de muestreo lo suficientemente grande usada en la operacin de muestreo.

XII - 1

Transformada clsica de Fourier para seales de tiempo continuo. Definicin (CTFT):

s(t)= (1 / 2 )

S ( j )e

jt

(ec.1.3.1)

S ( j ) =

s(t )e

jt

dt

(ec. 1.3.2)

A menudo (ec.1.3.1)es llamada la integral de Fourier y (ec.1.3.2) es simplemente llamada la transformada de Fourier. Un par de transformacin s (t ) S ( j ) representa un mapeo (invertible) uno a uno, mientras que s(t) satisface condiciones que garantizan que la integral de Fourier converge. El espectro de Fourier del modelo de muestreo de tiempo contino. Porque el modelo de muestreo CT s*(t) ,dado en (ec. 1.2.1), es por si mismo una seal CT, es apropiado aplicar la CTFT para obtener una expresin del espectro de la seal muestreada:

F {s * (t )} = F { s(t ). (t nT )} =
n =

n =

s(nT )e

jTn

(ec. 1.4.1)

Este resultado es comparado ms tarde con el resultado de la operacin sobre el modelo de muestreo DT, designado como s[n], de la transformada de Fourier DT para ilustrar que los dos modelos de muestreo tienen el mismo espectro.

La transformada de Fourier de tiempo discreto.


La transformada de Fourier de tiempo discreto (DTFT) puede ser obtenida mediante el uso del modelo de muestreo DT y considerando que la relacin obtenida en (ec 1.4.1) sea la definicin de la DTFT. Sea T=1 de tal manera que el periodo de muestreo es removido de las ecuaciones y sea =T una frecuencia normalizada, el par DTFT se define:

S () =

n =

s[n].e
jn

jn

(ec.1.5.1)

s[n]=(1/2)

S ().e

(ec. 1.5.2)

El espectro S( ) es peridico en con periodo 2. Comparando (ec. 1.4.1) con (ec 1.5.1), y notando que =T, se establece que: DTFT{s[n]} =F{s*(t)}|= /T Donde s[n]=s(t)|t=nT..Esto demuestra que el espectro de s*(t), como calculado por la transformada de Fourier CT, es idntico al espectro de s[n] calculado mediante la DTFT.

XII - 2

Relacin entre el espectro de tiempo continuo y discreto.


Debido a que las seales DT a menudo se originan por muestreo de seales CT, es importante desarrollar la relacin entre el espectro original de la seal CT y el espectro de la seal DT que resulta. En efecto: Se tiene F{s*(t)}=F{ s (t )

n =

(t nT ) }= (1 / 2 ) S ( j ) F { (t nT )}
n =

Expandiendo en series CT de Fourier el tren de impulsos (de periodo T)

S * ( j ) = F {s * (t )} = (1 / 2 ) S ( j ) F { (1 / T ).e j ( 2 / T ) nt }
n =

= (1 / 2 ) El resultado es :

n =

S ( j ) (2 / T ) ( (2 / T )n)

S * ( j ) = (1 / T ) S ( j ( ( 2 / T )n )) = (1 / T ) S ( j ( ns ))
n = n =

Donde s=(2/T) es la frecuencia de muestreo expresada en radianes por segundo. Pero el segundo miembro de la ecuacin anterior puede ponerse as: (1/T)

n =

S (( / T ) (2 / T )n) = (1 / T ). S (( 2 .n) / T )
n =

Esto es S*()=F{s*(t)} consiste de un numero infinito de replicas del espectro CT S()=F{s(t)} posicionadas a intervalos de (2/T) sobre el eje o a intervalos de 2 sobre el eje .Note que si S() es de banda limitada con un ancho de banda c, y si T se elije suficientemente pequeo de modo tal que s>2 c luego el espectro DT es una copia de S() (escalado por 1/T) en la banda base < .

La transformada discreta de Fourier (DFT).


Para obtener la DFT el dominio continuo de frecuencia de la DTFT es muestreado a en N puntos uniformemente espaciados alrededor del circulo unitario en el plano Z, es decir en los puntos: k=(2k/N),k=0,1,,N-1.El resultado es el par DFT definido por las ecuaciones siguientes: S[k]=

s[n ]e
n =0

N 1

j 2kn / N

k=0,1N-1.

s[n ] = (1 / N ) S [k ]e j 2kn / N
k =0

N 1

n=0,1,..,N-1

Materia Integradora.
Anlisis de seales y sistemas. Tema: Transformada de Fourier.

XII - 3

Captulo 13 FFT con MatLab


Introduccin.
Para el anlisis de espectro se utilizo el programa MatLab 6.5 Por simplicidad se copia el archivo WAVE, en nuestro caso Temp.wav, a la carpeta C:\MATLAB6p5\work o se selecciona el path donde el adquisidor guarda el archivo.. Para poder comenzar con el anlisis de la seal de audio adquirida con el programa adquisidor.exe, abrimos el archivo M-File procesamiento.m.

Procesamiento.m
Como primer paso el programa carga el archivo temp.wav y devuelve los valores de las muestras en un el vector Y y la frecuencia de muestreo en la variable Fs. [Y,Fs]=wavread('temp.wav'); Luego reproduce el archivo de audio adquirido mediante la siguiente sentencia: wavplay(Y,Fs) Para poder graficar la seal en tiempo, necesitamos saber el tiempo de duracin del archivo. Para ello, primero obtenemos la cantidad de muestras tomadas y la guardamos en la variable muestras. muestras=length(Y) Teniendo la frecuencia de muestreo Fs y la cantidad de muestras , podemos inferir el tiempo de duracin como: tf=muestras*1/Fs Una vez obtenido el tiempo de duracin, se necesitamos crear un vector de tiempos para poder graficar la seal. t=1/Fs:1/Fs:tf; Teniendo el valor de cada muestra y el tiempo en que fue tomada cada una, graficamos: figure(1) plot(t,Y) title('Seal') xlabel('Tiempo (Seg)') ylabel('Amplitud (v)') grid Para poder analizar el espectro de la seal tomada, necesitamos aplicar la transformada discreta de fourier (DFT), ya que la seal no es de tiempo continuo, sino que es una seal muestreada. Para poder calcular la DFT, usamos el algoritmo de calculo que se denomina FFT (transformada rpida de fourier).. Para usar la FFT, primero vamos a determinar la cantidad de puntos que vamos a tomar para realizar la FFT. Si tomamos en cuenta que la frecuencia de muestreo es de 22050 Hz, entonces el periodo de muestreo es de 1/22050=45,35 microsegundos. Si elegimos una cantidad de 8192 muestras, tenemos una ventana de tiempo de 8192/22050=371ms. N=8192;

XIII -

Calculamos la FFT. X = fft(Y,N); Calculamos el vector modulo de los valores de la FFT. Xmodulo=abs(X); Para poder graficar el espectro, calculamos el vector de frecuencias. f=((Fs)*(1:N))/N; Por ltimo, graficamos: figure(2) plot(f,Xmodulo) title('Espectro') xlabel('Frecuencia (Hz)') ylabel('Amplitud (mv)') grid Las lneas siguientes muestran la seal y el espectro en una misma figura: figure(3) subplot(2,1,1),plot(t,Y) title('Seal') xlabel('Tiempo (Seg)') ylabel('Amplitud (v)') grid subplot(2,1,2),plot(f,Xmodulo) title('Espectro') xlabel('Frecuencia (Hz)') ylabel('Amplitud (mv)') grid *Nota: el comando plot usa usa los valores discreto del vector de valor absoluto de los puntos de la FFT e interpola valores para poder graficar. Una forma de visualizar las seales en tiempo discreto es usando el comando : figure(4) stem(t,Y) title('Seal') xlabel('Tiempo (Seg)') ylabel('Amplitud (v)') grid figure(5) stem(f,Xmodulo) title('Espectro') xlabel('Frecuencia (Hz)') ylabel('Amplitud (mv)') grid figure(6) subplot(2,1,1),stem(t,Y) title('Seal') xlabel('Tiempo (Seg)') ylabel('Amplitud (v)') grid subplot(2,1,2),stem(f,Xmodulo)

XIII -

title('Espectro') xlabel('Frecuencia (Hz)') ylabel('Amplitud (mv)') grid Para correr el programa solo hay que elegir la opcin Debug+Run. A modo de mostrar los resultados usamos una seal de 2,5 segundos de duracin, mostrando una aproximacin en tiempo continuo y la real en tiempo discreto, las cuales coinciden.

En tiempo continuo.

XIII -

En tiempo discreto.

XIII -

Espectro continuo.

Espectro discreto.

Bibliografa:
Apuntes de clase. Tcnicas digitales III. Ayuda de MatLab.

XIII -

Apndice A Cdigo Fuente del programa


Cabecera ids.h
/* *********** Fichero Cabecera ********** */ /* ****** identificadores de comandos **** */ /*Ctes del men ADQ*/ #define CM_ADQ 100 #define CM_REP 101 #define CM_SALIR 102 /*Ctes del men CONFIG*/ #define CM_ARCH 103 #define CM_TIEMPO 104 /*Ctes del men ESPECTRO*/ #define CM_ESP 112 /*Ctes del men AYUDA*/ #define CM_AYU 113 /* ****** identificadores de dilogo **** */ /* Cuadro de mensaje */ #define TEXTO 106 #define CM_DIALOGO 107 #define ID_TEXTO 108 #define ID_NUMERO 110

Winmenu.c
/***********************************************************/ /********* FICHEROS DE CABECERA ****************************/ /***********************************************************/ #include <windows.h> //cabecera de window #include <mmsystem.h> // " multimedia #include <stdlib.h> #include <stdio.h> #include "ids.h" // cabecera del menu (declaracin de ctes) #pragma comment(lib, "winmm.lib") /***********************************************************/ /********* DECLARACION DE FUNCIONES*************************/ /***********************************************************/ LRESULT CALLBACK WindowProcedure(HWND, UINT, WPARAM, LPARAM);// Declaracin del procedimiento de ventana /*declaracin de la funcin de grabacin y reproduccin*/ DWORD playWaveFile(HWND, LPSTR); //Paso a la funcin el manipulador de ventana //y un puntero al archivo wav DWORD recordWAVEFile(HWND, DWORD); //Paso a la funcin el manipulador de ventana //y el tiempo de grabacin en ms /* Funciones de manejo de controles*/

XIII -

BOOL CALLBACK DlgProc2(HWND, UINT, WPARAM, LPARAM); BOOL CALLBACK DlgProc3(HWND, UINT, WPARAM, LPARAM); //fc para control edit de daracteres BOOL CALLBACK DlgProcnum(HWND, UINT, WPARAM, LPARAM);//fc para control edit numerico /***********************************************************/ /********* VARIABLES GLOBALES ******************************/ /***********************************************************/ char szClassName[ ] = "Adquisidor"; // Nombre de la clase en una variable global int MilliSeconds; char Nombre[80]; typedef struct stDatos { char Texto[80]; } DATOS; typedef struct inDatos { int Numero; } INDATOS; //tiempo de adquisicin en ms //Nombre del archivo //Estructura de datos nombre del archivo //Longitud del nombre de arch. //Estructura de datos tiempo de muestreo

/***********************************************************/ /********* FUNCION MAIN ************************************/ /***********************************************************/ /* funcin winmain*/ int WINAPI WinMain(HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, int nFunsterStil) { /* Declaracin: */ HWND hwnd; /* manipulador para la ventana principal */ MSG messages; /* variable para manipular los mensajes */ WNDCLASSEX wincl; /* estructura para registrar la clase de ventana */ /*declaracin previa del tiempo de adq*/ MilliSeconds = 1000; /* Inicializacin */ /* Estructura de la ventana */ wincl.hInstance = hThisInstance; wincl.lpszClassName = szClassName; wincl.lpfnWndProc = WindowProcedure; /* fc llamada por la ventana */ wincl.style = CS_DBLCLKS; /* Catch double-clicks */ wincl.cbSize = sizeof(WNDCLASSEX); /* Usa icono y puntero mouse por defecto */ wincl.hIcon = LoadIcon(NULL, IDI_APPLICATION); wincl.hIconSm = LoadIcon(NULL, IDI_APPLICATION); wincl.hCursor = LoadCursor(NULL, IDC_ARROW); wincl.lpszMenuName = NULL; /* No menu */ wincl.cbClsExtra = 0; /* No extra bytes after the window class */ wincl.cbWndExtra = 0; /* structure or the window instance */

A-

/* Use light-gray as the background of the window */ wincl.hbrBackground = (HBRUSH) GetStockObject(LTGRAY_BRUSH); /* Register the window class, if fail quit the program */ if(!RegisterClassEx(&wincl)) return 0; /* The class is registered, let's create the program*/ hwnd = CreateWindowEx( 0, /* Extended possibilites for variation */ szClassName, /* Classname */ "Adquisidor de Datos ", /* Title Text */ WS_OVERLAPPEDWINDOW, /* default window */ CW_USEDEFAULT, /* Windows decides the position */ CW_USEDEFAULT, /* where the window ends up on the screen */ 544, /* The programs width */ 375, /* and height in pixels */ HWND_DESKTOP, /* The window is a child-window to desktop */ LoadMenu(hThisInstance, "Menu"),/* menu llamado del recurso win003.rc*/ hThisInstance, /* Program Instance handler */ NULL /* No Window Creation data */ ); /* Make the window visible on the screen */ ShowWindow(hwnd, nFunsterStil); /* Bucle de mensaje */ /* Run the message loop. It will run until GetMessage( ) returns 0 */ while(GetMessage(&messages, NULL, 0, 0)) { /* Translate virtual-key messages into character messages */ TranslateMessage(&messages); /* Send message to WindowProcedure */ DispatchMessage(&messages); } /* The program return-value is 0 - The value that PostQuitMessage( ) gave */ return messages.wParam;

/***********************************************************/ /********* FIN DE LA FUNCION MAIN **************************/ /***********************************************************/ /*---------------------------------------------------------*/ /***********************************************************/ /********* DECLARACION DE FUNCIONES*************************/ /***********************************************************/ /* Esta funcin es llamada por la funcin del API DispatchMessage()*/ LRESULT CALLBACK WindowProcedure( HWND hwnd, // Manipulador de ventana UINT message, // Mensaje WPARAM wParam, // Parmetro palabra, vara LPARAM lParam // Parmetro doble palabra, vara ) { // DECLARACION DE VARIABLES

A-

char* WAV="c:\tdiii\tmp.wav"; //direccin del archivo wav static HINSTANCE hInstance; // Variables para dilogo static DATOS Datos; //DATOS Datos; static INDATOS inDatos; //esturctura de tiempo de adq //MANIPULADOR DE MENSAJES switch (message) /* manipulador del mensaje */ { case WM_CREATE: /* Inicializacin de los datos de la aplicacin */ hInstance = ((LPCREATESTRUCT)lParam)->hInstance; strcpy(Datos.Texto, "c:\\tdiii\\tmp.wav"); //copio el nom de arch a la estructura strcpy(Nombre,Datos.Texto); //copio de la escructura a la variable Nombre inDatos.Numero = MilliSeconds; // asigno el valor de MilliSeconds al parametro de la estructura return 0; break; case WM_COMMAND: switch(LOWORD(wParam)) { case CM_ADQ: //********************************************************* // ** MENU ** --> GRABAR /* --->> */ /* ******** Rutina de grabacin ********* */ DialogBoxParam(hInstance, "Dialogo2", hwnd, DlgProc2, MilliSeconds); recordWAVEFile(hwnd, MilliSeconds); //llamo a la fc grabar /* ******** MSN adquisicion terminada******** */ MessageBox(hwnd, "Adquisicin terminada", "Adquisidor", MB_OK); /* <<--- */ //********************************************************* break; case CM_REP: //********************************************************* // ** MENU ** --> REPRODUCIR /* --->> */ /* ******** Rutina de REPROPDUCCION ********* */ playWaveFile(hwnd, Nombre); /* ******** MSN reproduccin terminada******** */ MessageBox(hwnd, "Reproduccin terminada", "Adquisidor", MB_OK); /* <<--- */ //********************************************************* break; case CM_SALIR: // ** MENU ** --> SALIR PostQuitMessage(0); /* enva un mensaje WM_QUIT a la cola de mensajes */ break; case CM_ARCH: // MENU -> config -> arch DialogBoxParam(hInstance, "Dialogo3", hwnd, DlgProc3, (LPARAM)&Datos); strcpy(Nombre,Datos.Texto);

A-

MessageBox(hwnd, "Esta fc. no esta incluida", "Adquisidor", MB_OK); break; case CM_TIEMPO: // MENU -> config -> tiempo DialogBoxParam(hInstance, "Dialogonum", hwnd, DlgProcnum, (LPARAM)&inDatos); MilliSeconds = inDatos.Numero; //cargo el entero con el valor de la estructura break; case CM_ESP: // MENU -> Espectro -> Obtener MessageBox(hwnd, "Esta opcin no esta disponible", "Adquisidor", MB_OK); break; case CM_AYU: // MENU -> AYUDA -> Programa MessageBox(hwnd, "Realizado por: Benitez, Pablo -- Carranza, Rodrigo -- Curaratti, Nazareno", "Adquisidor", MB_OK); break; } break; case WM_DESTROY: PostQuitMessage(0); /* enva un mensaje WM_QUIT a la cola de mensajes*/ break; default: /* for messages that we don't deal with */ return DefWindowProc(hwnd, message, wParam, lParam); } return 0; } /***********************************************************/ /*---------------------------------------------------------*/ /*---------------- FUNCION GRABAR -------------------------*/ /*---------------------------------------------------------*/ DWORD recordWAVEFile(HWND hMainWnd, DWORD dwMilliSeconds) { UINT wDeviceID; DWORD dwReturn; MCI_OPEN_PARMS mciOpenParms; MCI_RECORD_PARMS mciRecordParms; MCI_SAVE_PARMS mciSaveParms; MCI_PLAY_PARMS mciPlayParms; MessageBox(hMainWnd, "Comienzo de la adqisicin", "Adquisidor", MB_OK); // Abre un dispositivo de audio de forma de onda con un nuevo archivo para grabar. mciOpenParms.lpstrDeviceType = "waveaudio"; mciOpenParms.lpstrElementName = "adq.wav"; if (dwReturn = mciSendCommand(0, MCI_OPEN, MCI_OPEN_ELEMENT | MCI_OPEN_TYPE, (DWORD)(LPVOID) &mciOpenParms)) { // Falla al abrir el dispositivo; devuelve error. MessageBox(hMainWnd, "ERROR apertura ID", "Adquisidor", MB_OK); return (dwReturn); }

A - 10

// El dispositivo abri con xito; asigno el ID al dispositivo. wDeviceID = mciOpenParms.wDeviceID; //Comiensa la grabacin y graba para el nmero especificado de millisegundos. mciRecordParms.dwTo = dwMilliSeconds; if (dwReturn = mciSendCommand(wDeviceID, MCI_RECORD, MCI_TO | MCI_WAIT, (DWORD)(LPVOID) &mciRecordParms)) { mciSendCommand(wDeviceID, MCI_CLOSE, 0, 0); MessageBox(hMainWnd, "Adquisicin exitosa", "Adquisidor", MB_OK); return (dwReturn); } // Ejecuta la grabacin y pregunta para guardar el archivo MessageBox(hMainWnd, "Ejecuto la adq", "Adquisidor", MB_OK); mciPlayParms.dwFrom = 0L; if (dwReturn = mciSendCommand(wDeviceID, MCI_PLAY, MCI_FROM | MCI_WAIT, (DWORD)(LPVOID) &mciPlayParms)) { mciSendCommand(wDeviceID, MCI_CLOSE, 0, 0); return (dwReturn); } if (MessageBox(hMainWnd, "Guardar la adq?", "", MB_YESNO) == IDNO) { mciSendCommand(wDeviceID, MCI_CLOSE, 0, 0); return (0); } // Guardo la adquisicin con el nom de arch. mciSaveParms.lpfilename = "temp.wav"; if (dwReturn = mciSendCommand(wDeviceID, MCI_SAVE, MCI_SAVE_FILE | MCI_WAIT, (DWORD)(LPVOID) &mciSaveParms)) { mciSendCommand(wDeviceID, MCI_CLOSE, 0, 0); MessageBox(hMainWnd, "ERROR no se Guardo", "Adquisidor", MB_OK); return (dwReturn); } mciSendCommand(wDeviceID, MCI_CLOSE, 0, 0); // cierro el dispositivo antes de salir return (0);

} /***********************************************************/ /*---------------------------------------------------------*/ /*---------------- FUNCION REPRODUCIR----------------------*/ /*---------------------------------------------------------*/

DWORD playWaveFile(HWND hMainWnd, LPSTR lpstrNombreFichero) { // hWndNotifica es el Handle a la ventana que recibe la notificacin // lpstrNombreFichero es una cadena con el nombre del fichero UINT wIDDispositivo; DWORD dwRetorno; MCI_OPEN_PARMS mciOpenParms;

A - 11

MCI_PLAY_PARMS mciPlayParms; //Abrimos dispositivo, indicando tipo y fichero mciOpenParms.lpstrDeviceType = "waveaudio"; mciOpenParms.lpstrElementName = "temp.wav"; MessageBox(hMainWnd, "Comienzo de la Reproduccin", "Adquisidor", MB_OK); if (dwRetorno = mciSendCommand(0, MCI_OPEN, MCI_OPEN_TYPE | MCI_OPEN_ELEMENT, (DWORD)(LPVOID)&mciOpenParms)) { MessageBox(hMainWnd, "ERROR en apertura", "Adquisidor", MB_OK); return (dwRetorno); //Error en la apertura } //Apertura correcta. Obtenemos el identificador wIDDispositivo = mciOpenParms.wDeviceID; MessageBox(hMainWnd, "Apertura OK, ID OK", "Adquisidor", MB_OK); //Se inicia la reproduccin. mciPlayParms.dwFrom = 0L; if (dwRetorno = mciSendCommand(wIDDispositivo, MCI_PLAY, MCI_FROM | MCI_WAIT, (DWORD)(LPVOID) &mciPlayParms)) { mciSendCommand(wIDDispositivo, MCI_CLOSE, 0, 0); MessageBox(hMainWnd, "ERROR reproduccin", "Adquisidor", MB_OK); return (dwRetorno); } mciSendCommand(wIDDispositivo, MCI_CLOSE, 0, 0); // cierro el dispositivo antes de salir return (0);

}; /***********************************************************/ /*---------------------------------------------------------*/ /*---------------- FUNCION DE DIALOGO ---------------------*/ /*---------------------------------------------------------*/ /***********************************************************/ /*---------------------------------------------------------*/ /*---------------- Fc Imprimir dilogo --------------------*/ /*---------------------------------------------------------*/

BOOL CALLBACK DlgProc2(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam) { char texto[25]; switch (msg) /* manipulador del mensaje */ { case WM_INITDIALOG: sprintf(texto, "T. de adq. (ms): %d", lParam); SetWindowText(GetDlgItem(hDlg, TEXTO), texto); return TRUE; case WM_COMMAND: EndDialog(hDlg, FALSE); return TRUE; } return FALSE; }

A - 12

/***********************************************************/ /*---------------------------------------------------------*/ /*-------- FUNCION DE DIALOGO NOMBRE DE ARCHIVO -----------*/ /*---------------------------------------------------------*/ BOOL CALLBACK DlgProc3(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam) { static DATOS *Datos; switch (msg) /* manipulador del mensaje */ { case WM_INITDIALOG: SendDlgItemMessage(hDlg, ID_TEXTO, EM_LIMITTEXT, 80, 0L); Datos = (DATOS *)lParam; SetDlgItemText(hDlg, ID_TEXTO, Datos->Texto); SetFocus(GetDlgItem(hDlg, ID_TEXTO)); return FALSE; case WM_COMMAND: switch(LOWORD(wParam)) { case IDOK: GetDlgItemText(hDlg, ID_TEXTO, Datos->Texto, 80); EndDialog(hDlg, FALSE); break; case IDCANCEL: EndDialog(hDlg, FALSE); break; } return TRUE; } return FALSE; } /***********************************************************/ /*---------------------------------------------------------*/ /*-------- FUNCION DE DIALOGO tiempo de adq---- -----------*/ /*---------------------------------------------------------*/ BOOL CALLBACK DlgProcnum(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam) { BOOL NumeroOk; static INDATOS *datos; int numero; switch (msg) /* manipulador del mensaje */ { case WM_INITDIALOG: datos = (INDATOS *)lParam; //el dato contenido en el estructura lo paso a dato SetDlgItemInt(hDlg, ID_NUMERO, (UINT)datos->Numero, FALSE);//cambia el contenido del control a un control numerico SetFocus(GetDlgItem(hDlg, ID_NUMERO)); return FALSE; case WM_COMMAND: switch(LOWORD(wParam)) { case IDOK: numero = GetDlgItemInt(hDlg, ID_NUMERO, &NumeroOk, FALSE);//lee el contenido del control if(NumeroOk)

A - 13

{ } else

datos->Numero = numero; EndDialog(hDlg, FALSE);

} return TRUE; } return FALSE;

MessageBox(hDlg, "Nmero no vlido", "Error", MB_ICONEXCLAMATION | MB_OK); break; case IDCANCEL: EndDialog(hDlg, FALSE); break;

Recurso win003.rc
win003 ICON "c:\\tdiii\\Multimedia.ico" #include <windows.h> #include "ids.h" /*DECLARACION DEL MENU*/ Menu MENU BEGIN POPUP "&Adquirir" BEGIN MENUITEM "&Adquirir", CM_ADQ MENUITEM SEPARATOR MENUITEM "&Reproducir", CM_REP MENUITEM SEPARATOR MENUITEM "&Salir", CM_SALIR END POPUP "&Configurar" BEGIN MENUITEM "&Archivo", CM_ARCH MENUITEM SEPARATOR MENUITEM "&Tiempo", CM_TIEMPO END POPUP "&Espectro" BEGIN MENUITEM "&Obtener espectro", CM_ESP END POPUP "&Ayuda" BEGIN MENUITEM "&Programa", CM_AYU END END /*******DIALOGO*******/ Dialogo2 DIALOG 0, 0, 118, 48 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION CAPTION "Adquisidor" FONT 8, "Helv" BEGIN CONTROL "Tiempo (ms):",

A - 14

TEXTO, "static", SS_LEFT | WS_CHILD | WS_VISIBLE, 8, 9, 84, 8 CONTROL "Aceptar", IDOK, "button", BS_PUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 56, 26, 50, 14 END Dialogo3 DIALOG //Nombre de arch "mensaje de guardar" 0, 0, 118, 48 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION CAPTION "Adquisidor" FONT 8, "Helv" BEGIN CONTROL "Archivo:", -1, "STATIC", SS_LEFT | WS_CHILD | WS_VISIBLE, 8, 9, 28, 8 CONTROL "", ID_TEXTO, "EDIT", ES_LEFT | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP, 36, 9, 76, 12 CONTROL "Aceptar", IDOK, "BUTTON", BS_DEFPUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 8, 26, 45, 14 CONTROL "Cancelar", IDCANCEL, "BUTTON", BS_PUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 61, 26, 45, 14 END Dialogonum DIALOG //tiempo de adq 0, 0, 118, 48 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION CAPTION "Adquisidor" FONT 8, "Helv" BEGIN CONTROL "Tiempo (ms):", -1, "STATIC", SS_LEFT | WS_CHILD | WS_VISIBLE, 8, 9, 28, 8 CONTROL "", ID_NUMERO, "EDIT", ES_NUMBER | ES_LEFT | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP, 36, 9, 76, 12 CONTROL "Aceptar", IDOK, "BUTTON", BS_DEFPUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 8, 26, 45, 14 CONTROL "Cancelar", IDCANCEL, "BUTTON", BS_PUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 61, 26, 45, 14 END

A - 15