You are on page 1of 76

´

INSTITUTO POLITECNICO
NACIONAL
´
ESCUELA SUPERIOR DE INGENIER´IA MECANICA Y ELECTRICA
´
DEPARTAMENTO DE INGENIER´IA EN COMUNICACIONES Y ELECTRONICA
´
ACADEMIA DE ACUSTICA

˜ o Elemental de un Sintetizador de Notas Musicales
Disen
TESIS
Que para obtener el T´ıtulo de

Ingeniero en Comunicaciones y Electr´
onica
Presentan:

Victor Hugo Correa Cid
Iv´
an Guadalupe Contreras M´
endez
Asesores:
Dr. Maximino Pe˜
na Guerrero
Ing. Jos´
e de Jes´
us Negrete Redondo
M´exico D.F.

Octubre 2005

Trabajo de tesis que forma parte de los resultados
obtenidos con nuestro proyecto de investigaci´on, MAN:
Red Internet II de Audio Multimedia con Servidores y
Clientes Incrustados, n´
umero de registro 20040733 asignado por la Coordinaci´on General de Posgrado e Investigaci´on del Instituto Polit´ecnico Nacional durante febrero
2004 a marzo 2005, desarrollado en el laboratorio de la
academia de ac´
ustica de la ESIME Zacatenco, y dirigido
por el Dr. Maximino Pe˜
na Guerrero.

ii

iii

pero que esta restricci´on. los cuales se pueden modificar (timbre de una nota) con barras y controles gr´aficos en la pantalla de la computadora. iv .NET y que tambi´en muestra una serie de ventanas. o un saxof´on. su vol´ umen (amplitud). Sus “osciladores” son generadores de formas de onda simples (funciones seno). Los resultados que se obtienen son: nuestro sintetizador funcionando en un ambiente gr´afico que genera un programa en Visual C++. las cuales simulan las teclas f´ısicas de un piano de concierto. Nuestro sintetizador trabaja con base en las series matem´aticas de Fourier. Esta tesis presenta el dise˜ no b´asico de un sintetizador electr´onico digital de notas musicales. un teclado gr´afico y barras que controlan la amplitud y frecuencia de los osciladores. no ha impedido la investigaci´on del funcionamiento b´asico de dicho dispositivo. la forma de onda que producen estos osciladores se puede modificar cambiando los par´ametros que definen una nota musical (frecuencia). y el timbre que permite identificar un instrumento de otro (fase y cantidad de arm´onicos). Por otra parte. el sonido que se produce cuando se activan las teclas del sintetizador es reproducido con el sistema de audio est´andar de la computadora. De esta forma es posible crear nuevos sonidos. as´ımismo. La frecuencia fundamental (nota) del conjunto de osciladores del sintetizador es controlada con un teclado virtual de 12 notas. Cabe mencionar que s´olo utilizamos seis osciladores. o bien sintetizar por ejemplo el sonido de una trompeta. Para lograr un sonido particular. las cuales contienen las formas de onda de los osciladores. o bien con dispositivos electr´onicos digitales o anal´ogicos. Las caracter´ısticas que lo definen se describen dentro de un programa que corre en una PC (Personal Computer). flauta.RESUMEN Actualmente los sintetizadores son instrumentos musicales que generan sonidos controlando osciladores electr´onicos con un teclado de piano.

OBJETIVO Dise˜ nar un sintetizador b´asico de notas musicales para PC (Personal Computer). utilizando algoritmos de programaci´on (en Visual C++. v . sin embargo. ya que si se cuenta con una PC. ´ JUSTIFICACION En la actualidad existen varios tipos de modelos de sintetizadores por hardware. Al darnos cuenta de lo anterior observamos que un modelo por software puede igualar o incluso superar a un modelo por hardware. ser estorbosos y poco pr´acticos para los usuarios. puede tener acceso a un sintetizador en lugares que normalmente no seria posible (avi´on. para esto se necesita de multiples elementos electr´onicos. autob´ us. etc. un m´ usico o cualquier persona. ocupar grandes espacios.). con los cuales es posible obtener sonidos de diversos instrumentos musicales. tren. por lo que pueden llegar hacer enormes.NET) y m´etodos num´ericos.

Nunca olviden que los amo. les agradezco por mostrarme el camino para llegar hasta donde estoy. quienes con su apoyo constante me han dado fuerzas para seguir adelante y nunca detenerme. Espero no haberlos defraudado!!!. S´e que no necesito escribir todo lo que significan para m´ı. A mis profesores: Agradezco a todos mis profesores. A mis hermanas: Ang´elica Correa Cid y Alejandra Correa Cid. as´ı como ustedes siempre han estado para m´ı. A la Virgen de Guadalupe: Por que siempre est´as cuando te necesito y s´e que ah´ı seguir´as!!!.Agradecimientos A mis padres: Mar´ıa Magdalena Cid Flores y Salom´on Correa Medina. pero en especial al Dr. Maximino Pe˜ na Guerrero y al Ing. ya que sin su ejemplo y apoyo nunca lo hubiera logrado. No encuentro palabras para expresar la bendici´on que significa tener unas hermanas como ustedes. Victor Hugo Correa Cid vi . quienes me confiaron este trabajo de tesis y me impulsaron a cumplir con el objetivo. pero quiero que sepan que siempre estar´e para ustedes. Jos´e de Jes´ us Negrete Redondo.

hijos. y creo que en un futuro ser´a mucho mejor que en el presente. Lo que las personas llaman vanidad —dejar obras.”El hombre es el u ´nico ser de la naturaleza que tiene conciencia de que va a morir. hacer que su nombre no se olvide— yo lo considero la m´axima expresi´ on de la dignidad humana. vii . hace de la vida una lucha digna de un ser eterno. por eso —y s´olo por eso— tengo un profundo respeto por la raza humana. Aun sabiendo que sus d´ıas estan contados y que todo acabar´ a cuando menos se lo espera. Paulo Coelho El Peregrino (Diario de un mago).

sencillo y respeta al pr´ojimo. Maximino Pe˜ na Guerrero y al Ing.Agradezco infinitamente a Dios por darme la oportunidad de. que en vida siempre se preocup´o por mis estudios y mi bienestar. Hugo. As´ı como tambi´en agradezco a mi hermana Ver´onica que me brind´o su apoyo en lo que necesitaba. ¡simplemente mil gracias! porque en ellos no solamente aprend´ı. Leonel Rios y Denys Basurto. A mis amigos: Arturo I˜ nigo. Y muy especialmente le agradezco a mi abuela Delfina Hern´andez (q. A mis padres.p. humilde. Ulises.d). mi t´ıa Mar´ıa de la Cruz M´endez. De la misma manera agradezco a: Lalo. Karla y Cristina.. tambi´en aprend´ı.E. Al Instituto Polit´ecnico Nacional y a la E. No pod´ıa faltar toda mi gratitud a.S. Iva viii . su amistad y su compa˜ n´ıa durante todos estos a˜ nos.-Zacatenco. Ra´ ul Hern´andez. Oscar. Arturo Nava. por la confianza y el apoyo para la realizaci´on de esta tesis. que un buen ser humano es. vivir en este tiempo y conocer a las personas que han marcado mi vida para siempre. Chucho.. a mi t´ıo Benito Cure˜ no M´endez y familia. porque con todos ellos compart´ı momentos muy agradables y siempre cont´e con ellos en los momentos dif´ıciles. igualmente a mis amigos Victor Hugo Correa y Juan Sim´ uta. que saben valorar su profesi´on y d´ıa con d´ıa dan lo mejor de s´ı mismos. Muy en especialmente al Dr. por compartir conmigo momentos de alegr´ıas y tristezas. humildemente les agradezco su confianza. Julia M´endez y Silvestre Contreras les agradezco el apoyo y paciencia que me han brindando durante todos estos a˜ nos. matem´aticas y f´ısica. A todas esas personas gracias. Moreno. Jos´e de Jes´ us Negrete Redondo. Quiero brindarles toda mi gratitud y respeto a mis profesores.I.M. ´ n Guadalupe Contreras Me ´ndez.

7) ix . 1) Para el necio es recto su camino. hay quienes pretenden ser pobres. 15) Hay quienes pretenden ser ricos. sin tener nada.Quien ama la ciencia. odia el reproche. (Proverbios 12. siendo muy ricos. mas el hombre prudente oye el consejo. (Proverbios 13. mas aquel que es como bruto. (Proverbios 12. la correcci´ on ama.

. . . . .1. . . . . . . . . . . . . . . . . . Dise˜ no de Nuestro Sintetizador de Notas 4. . . y otros controles gr´aficos .1. . . . 1. . . . . . . . . . . . . . . . . 5. . . . Tipos de osciladores . . . . . . . . .6. . . . . . . . . . . . . . . . . . . .3.3. . . . . 5. . . . . . . . . . . . . . . . Nuestro trabajo . Antecedentes . . . . . Organizaci´on del documento . . . 3.4. . . . 4. . Principios de funcionamiento . . . . . 2. . Programando la interfase gr´afica . . . . . . . . . . . .2. . . . . 5. . . . . . . Pixeles y mapas de bits . .1. . . . . . . . . . . . . . . . . . . . . . . . . . 17 17 18 20 23 . . . . . . . . . 2. 3. . . . Visualizaci´on de las formas de onda . 1 . . . . . .1. . . . . . . . . . . . . . . Resumen . . Ventanas. . . . . . . . . . . . . . . Anatom´ıa de una tarjeta de sonido . . . . .´Indice general 1. . . . . . . . 25 25 27 31 33 35 36 . . . . . . . Dise˜ no de la Interfaz Gr´ afica 5. . . . . . . . . . . 4. . . Computadoras digitales . . . . Programaci´on de las funciones de onda . . .4. . . . . . Generadores electr´onicos de formas de onda . . . . . . . . . . . . . M´etodos de programaci´on de nuestro sistema . . . .2. . . .4. . . . 5. . . . 4. .3. . . . . . . . . . Resumen . . . . . . . . . . . . . Programando el controlador driver de sonido . . . . .1. . . . . . . . . . . 5 5 6 7 . . . . . . . . 1. . . . . Resumen . barras. . . . 4. . . . . . . . . . . . . . . . .2. . . . .3. . . . . . . . . . . . . . .3. . . . . . El sintetizador como instrumento musical . Estructuras del controlador (driver) de sonido 4. . Aspectos del Dise˜ no de Sintetizadores de M´ usica 3. . . 2. . . .2. . . . . . . . 4. . . . . . . . . Anatom´ıa de un sintetizador . . . . 3. . . . . . . . . . . . . . . . .5. . 37 37 38 38 48 . . . . . . 3. . . . . . Introducci´ on 1. . . . . Instrumentos Musicales Electr´ onicos y Digitales 2. . . . . 2. . . . . . . . . . . . . . . . . . . . . . . . 9 9 11 12 16 . .2. . . . . .4. . . . . . . . . .

. . .1. . . . . . . Resumen . . . . .6. .1. . . Conclusiones y Trabajos Futuros 7. . . 6. . . . . . . . . . . . Controlando los arm´onicos . . . . . . . . . .5. . . . . . . . . . . . . .5. . . . . 59 61 2 c´odigo . . . . . . . . . . . . . . . . . . . . . . . Trabajos Futuros . Aspecto visual del sintetizador . Resumen . . . . . . . . . . 6. . . . . . . . . . . . . . .4. . . . . . . . . . . . . .3. . 51 51 53 54 55 57 58 7. . . . . . . . . . . . . . . . . . . . . . . . 50 . . . . . . . . . . . 6. . . . . . . . . . Control de par´ametros del sintetizador . . . . . 6. . . .2. . . Ambiente de compilaci´on y generaci´on de 6. .5. . . . . . . . . . . . . . . . Pruebas y Resultados 6. . . . Control del teclado . . . . . . 6. . . .

6. . . . . . . . Representaci´on gr´afica de la Serie de Fourier. . . . . . . 6. . . . . . . . . .2. . . . . . . . . . . . 3 . . . . . . 34 36 . . 21 4. . . . . . . . . . . . . . . Sintetizador elemental . . .7. . . . . . . Vista principal del sintetizador. . . .2. 39 40 6. . .1. . . 6. . . . Barras de desplazamiento verticales. . Interfaz gr´afica de la aplicaci´on. .4. . a)Tecla en reposo. . . . . . . . . . .1. . . 4. . . Todos los arm´onicos modificados . 32 5. . . . Valores m´ınimo. b)Tecla pulsada. . . . programa . .5. . . . 4. 6. . . . . . . 6. un . . . . .6.3. . . . . 6. . . . . . . . . . . . . .1. . . . Diagrama a bloques de una tarjeta de sonido. . . .2. . . . . . . . . . . . . . . . . . .3. . . . . . . . . . . . . . . Quinto arm´onico con amplitud modificada. Jerarqu´ıa de ventanas. central y m´aximo de la barra horizontal. . . . . .´Indice de figuras 3. . . . . . mediante dise˜ nado en C++.1. . . . . . 5. . . 52 53 54 55 56 56 57 58 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .8. . . . Tercer arm´onico con amplitud modificada. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6. . . con una amplitud modificada. . . . . N´ umero de muestras por cada ciclo. . . . . . . . . Vista del Teclado.

. .´Indice de tablas 6. . . . . 4 58 . . . . . .1. . Valores de las barras de desplazamiento . . . . .

Cap´ıtulo 1 Introducci´ on 1. Con este artefacto se pueden crear nuevos sonidos as´ı como reproducir los de los instrumentos musicales conocidos. a˜ no de invenci´on del Telharmonium. Sin embargo fue en la d´ecada de 1960 que apareci´o uno de los sintetizadores m´as famosos. llamado as´ı por su inventor. Las posiciones de los botones se apuntan en un cuaderno. el Moog. lo que significa mover cerca de 60 botones para lograr el sonido de alg´ un instrumento. El sintetizador Moog no tiene memoria. Estos primeros aparatos eran anal´ogicos y utilizaban osciladores el´ectricos como fuente sonora. secuenciadores y moduladores de frecuencia. la forma de la onda generada. como un viol´ın o una trompeta. mientras que en los a˜ nos veinte surge el Theremin. ya que para hacer el sonido de un instrumento deben desorganizarse las posiciones del instrumento anterior. es alterada en su duraci´on. Este se controla con uno o m´as teclados y con ´el es posible crear un n´ umero casi infinito de sonidos y pueden imitarse muchos instrumentos. mediante el uso de dispositivos tales como amplificadores. el ingeniero estadounidense Robert Moog. Para encontrar los primeros sintetizadores de sonido debemos remontarnos a 1906. filtros. reverberadores.1. mezcladores. 5 . Antecedentes Un dispositivo que genera los sonidos a partir de la combinaci´on de elementos simples (normalmente se˜ nales peri´odicas y funciones matem´aticas) es conocido como sintetizador. altura y timbre.

1. los han ido igualando. las aplicaciones utilizadas en Windows. el hecho de tener fastuosos interfaces de pantalla pero ning´ un potenci´ometro a mano. Nuestro trabajo Lo anterior expuesto nos llev´o a crear el dise˜ no b´asico de un sintetizador elemental para PC (Personal Computer). se dec´ıa que la falta de control sobre sus par´ametros. los cuales permiten diferenciar un timbre de otro. que en nuestro caso ser´an de tipo sinusoidal. los pon´ıan en clara desventaja. es si los sintetizadores por software pod´ıan desplazar a los modelos por hardware. C++. Sin embargo. De esta manera sumando las salidas de varios osciladores de forma de onda sinusoidal. tienen complejas arquitecturas y grandes cantidades de par´ametros que imposibilitan construir paneles de potenci´ometros que cubran todas las opciones (a no ser que midiesen un par de metros cuadrados). eran sencillas de usar para el usuario pero dif´ıciles de desarrollar para el programador. llamadas formas de onda. llamado series de fourier. Visual C++. tales como: C. seg´ un la amplitud que se le da a la frecuencia fundamental (la nota) y sus arm´onicos (notas m´ ultiplos de la fundamental). En la actualidad existen diferentes software que se enfocan en el desarrollo de aplicaciones para Windows. Viendo que el sonido de algunos modelos software. Borland.2. Estas se˜ nales ser´an manipuladas mediante un proceso para obtener sonido por medio de una s´ıntesis. el cual ha ido evolucionando hasta llegar a su m´as 6 . Sin embargo hay que decir que la mayor´ıa de los modelos digitales y estaciones de trabajo que se usan actualmente. el cual se basa en la manipulaci´on de se˜ nales anal´ogicas. De esta manera hay que tener en cuenta.Una de las controversias que se han tenido en los u ´ltimos a˜ nos. Por este motivo en febrero de 1993. entre otros. que en general las arquitecturas de los modelos por software actuales son mucho m´as amplias y ambiciosas. se obtendr´an diversos timbres. por ejemplo un viol´ın de una flauta. fue introducido uno de los mas conocidos y eficientes lenguajes de programaci´on orientada a objetos.

de esta forma tomamos en cuenta el funcionamiento de los dispositivos que pueden ser empleados para generar formas de onda (osciladores).reciente versi´on. El cap´ıtulo 6 presenta algunas pruebas y resultados de nuestro proyecto final. 555. entre otros. Tomando en cuenta lo anterior hemos decidido usar para el desarrollo de este sintetizador.Net o versi´on 7 del mismo. tales como: los tipo Hartley. entre otras cosas). RC. ya que no ser´an implementados en nuestro dise˜ no. el programador puede crear la interfaz gr´afica (ventanas. para el desarrollo de nuestro sintetizador. El cap´ıtulo 5 presenta el dise˜ no de la interfaz gr´afica. Organizaci´ on del documento Esta tesis se encuentra estructurada de la siguiente manera. Al mismo tiempo desarrollaremos y explicaremos la funci´on encargada de realizar la s´ıntesis de ondas. entre otros. para que este sea universal. Cabe mencionar que los dise˜ nos anteriores son de caracter explicativo. mapa de bits. barras de desplazamiento. en el que veremos las estructuras de audio m´as importantes utilizadas para la comunicaci´on entre el software y la tarjeta de sonido de la PC. Desarrollar aplicaciones en un entorno de este tipo se vuelve una tarea un poco m´as sencilla. necesarios para su mejor comprensi´on. almacen´andolas en un buffer de audio. generaci´on de sonido en PC’s.Net.3. recurso gr´afico. Visual C++ . LC. sin necesidad de escribir nada de c´odigo. Por u ´ltimo el cap´ıtulo 7 presenta las conclusiones a las que llegamos al termino de este proyecto. Visual C++ . 7 . Colpitts. El cap´ıtulo 2 presenta los conceptos b´asicos que deben ser tomados en cuenta. entre otros. VCO. el software antes mencionado. El cap´ıtulo 3 presenta los aspectos de dise˜ no para el desarrollo de nuestro sintetizador. describiremos su operaci´on y la forma de obtener un archivo ejecutable del proyecto. tales como: sonido. botones. tipos de s´ıntesis. El cap´ıtulo 4 presenta el proceso de dise˜ no de las s´ıntesis de ondas. donde se explicar´a paso a paso los diferentes puntos a seguir para el desarrollo del software y definiremos algunos conceptos b´asicos tales como p´ıxel. as´ı como algunas propuestas para la mejora del mismo. 1.

Φ 8 .

caracter´ısticas del sonido. A partir de este movimiento se desarrolla una onda sonora. haciendo que su efecto se propague en todas direcciones. ponen en movimiento a las que se encuentran a continuaci´on y ´estas a su vez a las siguientes. amplitud. 2. produciendo una reacci´on en cadena y que contin´ ua de acuerdo al movimiento de la fuente en ambas direcciones. sintetizadores. como son ondas sonoras. a esto se le conoce como Sonido.Cap´ıtulo 2 Instrumentos Musicales Electr´ onicos y Digitales En este cap´ıtulo trataremos algunos conceptos que son b´asicos para la comprensi´on de los dem´as cap´ıtulos.1. captura de sonido y lenguajes de programaci´on. arm´onicos. generando aumento y disminuci´on de presi´on. tono y timbre. cuando al moverse las mol´eculas que est´an en contacto con la fuente. generaci´on de sonido en PC (Personal Computer). modulaci´on. an´alisis de Fourier. Principios de funcionamiento Cuando un cuerpo es excitado de alguna manera. las mol´eculas de aire que se encuentran en contacto con la fuente se ponen en movimiento al mismo tiempo y con la misma amplitud y fase que las superficies de dicha fuente. Las principales caracter´ısticas del sonido son: frecuencia. La frecuencia. es el n´ umero de oscilaciones que se cumplen en un segundo dentro de 9 . t´ecnicas de s´ıntesis. muestreo.

000 Hz. El timbre. Normalmente al hacer vibrar un cuerpo. al dominio de la frecuencia. fue que muchas de las funciones m´as conocidas pod´ıan expandirse en series infinitas e integrales que involucraban funciones trigonom´etricas.un movimiento vibratorio y es expresada en Hertz (Hz. Un m´etodo matem´atico para obtener el espectro de potencia. cuadrada. producida por instrumentos diferentes. en el modelamiento de muchos de los fen´omenos en F´ısica e Ingenier´ıa. no obtenemos un sonido puro. La frecuencia de los arm´onicos. presentaba una descripci´on matem´atica de problemas relacionados con la conducci´on de calor. La forma de onda viene determinada por una serie de vibraciones subsidiarias. llamada frecuencia fundamental o primer arm´onico. que acompa˜ nan a una vibraci´on primaria o fundamental del movimiento ondulatorio (especialmente en los instrumentos musicales) llamados arm´ onicos. es el atributo de la sensaci´on auditiva por el cual. envi´o un art´ıculo a la Academia de Ciencias en Par´ıs.). que es utilizada para transformar una se˜ nal representada en el dominio del tiempo. como funci´on de la frecuencia para una forma de onda de la se˜ nal dada. Una de las sorprendentes ramificaciones del trabajo de Fourier. las frecuencias que percibe el o´ıdo humano se encuentran entre los 20 Hz y 20. como la onda sinusoidal. sin alterar su contenido de informaci´on. el matem´atico franc´es Joseph Fourier (1768-1830). Astr´onomo y matem´atico alem´an nacido en Minden. En ´el. llamadas series de Fourier. un escucha puede juzgar dos sonidos similares como diferentes entre s´ı [1]. Existen diferentes formas de onda. En 1807. etc. sino un sonido compuesto de sonidos de diferentes frecuencias. Friedrich Bessel (1784-1846). diente de sierra. es la transformada de Fourier. como el grado de movimiento de las mol´eculas de aire en una onda. La idea es importante hoy en d´ıa. mientras m´as ciclos completos ocurren m´as alto ser´a el tono. El tono nos permite diferenciar un sonido grave de un sonido agudo. solamente es una forma diferente de representarla. estas ondas nos permiten distinguir una nota musical de la misma frecuencia e intensidad. 10 . siempre es un m´ ultiplo de la frecuencia m´as baja. La amplitud esta definida.

Llamadas funciones Splines. tambi´en son muy u ´tiles en el dise˜ no gr´afico y en la soluci´on num´erica de ecuaciones diferenciales. su gran popularidad se debe a que sus propiedades las hacen ideales. de una soluci´on real que plantea la transmisi´on de informaci´on.introdujo en matem´aticas las funciones de Bessel como soluci´on a ciertas ecuaciones diferenciales. Por ejemplo. El sintetizador como instrumento musical Aparecido en la d´ecada de los sesentas. el cual es un generador electr´onico de formas de onda. que constituyen una aplicaci´on que permite la obtenci´on. que puede generar una gran variedad de sonidos musicales. construy´o el primer sintetizador anal´ogico que a´ un lleva su nombre. es la convoluci´on de esas dos cantidades. la interacci´on de dos cantidades en el tiempo y espacio. y para la soluci´on de problemas relacionados con el movimiento ondulatorio. Las funciones son de gran importancia para determinar la distribuci´on y el flujo del calor o la electricidad. la elasticidad y la hidrodin´amica. Constituye un proceso importante en diferentes ´areas de la ingenier´ıa. 2. cada una de las cuales tiene un rico y particular contenido arm´onico [7]. triangular y cuadrada. obten´ıan diversos timbres seg´ un la amplitud que se le daba a la frecuencia fundamental (la nota) y sus arm´onicos. es un dispositivo electr´onico digital similar a un piano. a 11 . para atacar problemas muy variados en diversas ´areas de la matem´atica. el cl´asico Moog. que puede producir casi cualquier clase de se˜ nal peri´odica de audiofrecuencia. la cual se puede realizar por diferentes medios. Tambi´en utilizaban formas de onda del tipo diente de sierra. los primeros sintetizadores se basaban en la teor´ıa del an´alisis de Fourier y sumando las salidas de varios osciladores de forma de onda senoidal.2. la convoluci´ on representa una operaci´on y un concepto matem´atico. Actualmente podemos encontrar diversas formas de generar se˜ nales de audio. Se denominan sintetizadores porque obtienen el sonido por medio de una s´ıntesis (proceso artificial). el sintetizador. Robert Moog.

videocasetes. Se ha definido como la herramienta que emplea la PC para integrar y controlar diferentes sistemas electr´onicos tales como: videodiscos. es la opci´on m´as antigua y duradera. modularlo y que es posible usar sonido previamente digitalizado (samples).continuaci´on mencionaremos las m´as conocidas t´ecnicas de s´ıntesis: 1) S´ıntesis Aditiva. ciertas partes de su estructura arm´onica. los elementos b´asicos 12 . primero la formal constituci´on del sintetizador como instrumento expresivo y la b´ usqueda de nuevas posibilidades para generar sonido. segundo. M´ etodos de programaci´ on de nuestro sistema Para la generaci´on de sonido en la PC (Personal Computer) existen t´ecnicas utilizadas en la Multimedia. Podemos mencionar que en un entorno multimedia. buscando la composici´on arm´onica. se fundamenta en lo contrario de la aditiva. computaci´on multimedia y finalmente el desarrollo de sofisticadas piezas de software. 3) S´ıntesis Virtual. parte de la idea contenida en el teorema de Fourier. La idea esencial es poder representar las variaciones de presi´on del sonido. sintetizadores de video y audio. nace como la fusi´on de tres desarrollos t´ecnicos de din´amica relaci´on. de una frecuencia base. etc. seg´ un la cual todo sonido peri´odico. El proceso de esta s´ıntesis. en lugar de ensamblar un sonido a partir de sus componentes. el constante desarrollo de microchips. 2) S´ıntesis An´ aloga o Substractiva. multi (variedad) y media (medios). en forma de variaciones de tensi´on. Los timbres se obtienen a partir de formas de onda complejas (ricas en arm´onicos) a las que se les sustraen. 2. videoc´amaras. encontr´andose as´ı. partiendo de peque˜ nas series arm´onicas y precisando la frecuencia y la amplitud de cada componente en cada instante. fabrica sonidos mediante el modelo matem´atico.3. unidades complejas de circuitos digitales. se sintetiza el resultado eliminando los componentes no deseados de un sonido parcial muy rico. por complejo que sea. es el resultante de la suma de ondas sinusoidales sencillas de frecuencias m´ ultiplo. que una computadora posee las caracter´ısticas necesarias para generar audio. mediante filtros.

el Teorema de Muestreo o Teorema de Nyquist. es la representaci´on de informaci´on anal´ogica en una se˜ nal digital. podemos utilizar para ello la funci´on OnDestroy con el mensaje SetCommand (close). El muestreo. que se utilizan para cancelar la reproducci´on de audio y video [2].de hardware son: 1) La unidad de CD-ROM (Compact Disc Read Only Memory) y 2) La tarjeta de sonido. 2) El secuenciador es controlado por la tarjeta de sonido. deben cerrarse los dispositivos MCI que se encuentren abiertos antes de salir de la aplicaci´on o cerrar la ventana que contiene dichos dispositivos. tal como la amplitud de una forma de onda compleja. Estas son las principales instrucciones. La codificaci´ on. para tener acceso a la unidad de CD-ROM o a la tarjeta de sonido. La siguiente lista menciona el hardware que es necesario para los tipos de dispositivos MCI (Media Control Interfase) mas utilizados en el ambiente de programaci´on Visual C++: 1) El CD de audio es controlado por la unidad de CD-ROM. Por ejemplo. si se utiliza una frecuencia de muestreo del doble de la frecuencia m´as elevada contenida en la forma de onda. para controlar los dispositivos multimedia sin ning´ un tipo de limitaci´on. es el proceso de tomar medidas instant´aneas de una se˜ nal an´aloga cambiante en el tiempo. Se pueden utilizar diferentes t´ecnicas de programaci´on. establece que es posible capturar toda la informaci´on de la forma de onda. deber´an estar instalados y configurados para la PC. el hardware. ´este permite aproximar la muestra a uno de los niveles de una escala designada. En el proceso de conversi´on de la forma an´aloga a la forma digital de una se˜ nal y viceversa aparecen tres t´erminos matem´aticos: 1)el muestreo. 2)la cuantizaci´on y 3)la codificaci´ on. se le conoce como Audio. La cuantizaci´ on. En algoritmos computacionales a la representaci´on el´ectrica del sonido. 3) El audio por forma de onda es controlado por la tarjeta de sonido. es el siguiente proceso para la reducci´on de la se˜ nal an´aloga compleja. y los controladores de los dispositivos a utilizar. El sistema PCM (Modulaci´on por codificaci´on de Pulsos) convierte la informaci´on 13 . Para la administraci´on de recursos multimedia de una forma apropiada.

El proceso b´asico para la captura de sonido es el siguiente: 1) El sonido se transmite por el aire hasta el micr´ofono. Esta secuencia de se˜ nales se denomina c´ odigo de m´aquina. Sus caracter´ısticas establecen la frecuencia y el n´ umero de bits por cada muestra. La amplitud de la onda modulada es constante e igual que la de la onda portadora. El c´odigo representa datos. Se modula en amplitud (AM) una onda que llamaremos portadora. es en realidad enviar series de unos y ceros con un espacio en el tiempo de una forma determinada. cuando la distancia existente entre el punto de la misma en el que la onda vale cero y los puntos en que toma el valor m´aximo o m´ınimo se altera. 3) Mediante un canal se copia cada muestra a la memoria de la PC. Existe tambi´en una relaci´on compleja entre los lenguajes de alto nivel y el c´odigo de m´aquina. Dar una instrucci´on a un microprocesador. es llamado lenguaje de programaci´ on.de dos canales de audio a forma digital. Esta abstracci´on da como resultado el lenguaje ensamblador. una secuencia de instrucciones para su procesamiento por una computadora. el cual transforma la se˜ nal ac´ ustica a niveles el´ectricos. dependiendo del par´ametro de la misma sobre ´el que se act´ ue. Vistos a muy bajo nivel. Cualquier lenguaje artificial que puede utilizarse para definir. 2) La se˜ nal anal´ogica pasa a trav´es de un convertidor anal´ogico/digital. los microprocesadores procesan exclusivamente se˜ nales electr´onicas binarias (0 y 1). Una portadora puede modularse de diferentes modos. Los lenguajes de alto nivel son normalmente f´aciles 14 . ADD o JUMP. como por ejemplo STORE. Una manera m´as f´acil de comprender el c´odigo de m´aquina es dando a cada instrucci´on un mnem´onico. n´ umeros e instrucciones para manipularlos. Para el procesamiento inform´atico del sonido es necesario realizar su captura mediante una PC y almacenarlo en memoria o disco. el cual es de muy bajo nivel y es espec´ıfico de cada microprocesador. La modulaci´on de frecuencia (FM) consiste en variar la frecuencia de la onda portadora de acuerdo con la intensidad de la onda de informaci´on. Hay un alto nivel de abstracci´on entre lo que se pide a la computadora y lo que realmente comprende.

control de flujo. m´as transportable e independiente de equipos concretos que otros sistemas operativos. Ahora hablemos del lenguaje C++. Esto quiere decir que el sistema puede ejecutar varios programas a la vez. Unix tiene diversas variantes (p. esto lo hace un lenguaje potente. Linux) y se considera potente. En BASIC. ATL (Active Template Library) y una nueva clase de servicios web. estructuras sencillas y un buen conjunto de operadores. si se quiere combinar el control y el rendimiento de C++ con la compatibilidad con windows y el entorno . el cual es un entorno de desarrollo dise˜ nado especialmente para crear aplicaciones gr´aficas orientadas a objetos. los comandos como por ejemplo: IF CONTADOR = 10 THEN STOP pueden utilizarse para pedir a la computadora que pare si CONTADOR es igual a 10. y se aprende en poco tiempo. introduce la biblioteca MFC (Microsoft Foundation Class). el cual es un lenguaje de programaci´on de prop´osito general que ofrece. que es una versi´on orientada a objetos del lenguaje de programaci´on llamado C. m´as bien es peque˜ no y sencillo y no est´a especializado en ning´ un tipo de aplicaci´on. econom´ıa de s´ıntesis.Net. este fue desarrollado por Bjarne Stroustrup a comienzos de la d´ecada de 1980 en los laboratorios Bell. Actualmente se cuenta con la versi´on Visual C++.de comprender. en febrero de 1993. MFC. convirti´endose en el entorno de desarrollo. tiene un campo de aplicaci´on ilimitado por que no es un lenguaje de muy alto nivel. y que puede gestionar a varios usuarios simult´aneamente. el lenguaje de programaci´ on C. tambi´en permite numerosas caracter´ısticas de nivel profesional y con el podemos crear aplicaciones para windows y la web muy eficaces. fue desarrollado en 1972 por el estadounidense Dennis Ritchie en los laboratorios Bell. Fue desarrollado originalmente por Ken Thompson y Dennis Ritchie en los laboratorios Bell en el a˜ no de 1969. porque est´an formados por elementos de lenguajes naturales. As´ı mismo. el cual es un sistema operativo multitarea y multiusuario. como el ingl´es.0.Net. la cual cuenta con una mayor integraci´on. el lenguaje de alto nivel m´as conocido. Por otra parte. Ahora hablaremos del sistema unix.e. 15 . fue creado Microsoft Visual C++ 1.

4. an´alisis de Fourier. t´ecnicas de s´ıntesis. muestreo. modulaci´on. Unix). 16 . Resumen En el desarrollo de este cap´ıtulo tratamos conceptos b´asicos como: ondas sonoras.porque esta escrito en lenguaje C. sintetizadores. Visual C++. 2. captura de sonido y lenguajes de programaci´on (C. arm´onicos. generaci´on de sonido en PC. caracter´ısticas del sonido. C++.

Cap´ıtulo 3 Aspectos del Dise˜ no de Sintetizadores de M´ usica En este cap´ıtulo presentaremos los aspectos de dise˜ no de sintetizadores de m´ usica. Clapp. no requiere de una se˜ nal de entrada repetitiva. LC. Mencionaremos ahora los principios de los osciladores: 1) La realimentaci´on po17 . estos se aplican ampliamente en casi todos los sistemas de comunicaci´on. Generadores electr´ onicos de formas de onda Un oscilador. ya que es necesario conocer su funcionamiento antes de ser implementado en algoritmos computacionales. 3. tales como: osciladores RC. Colpitts. triangulares y de diente de sierra. sistemas digitales y computadoras para generar frecuencias y se˜ nales de sincronizaci´on requeridas. describiendo cada uno de ellos. los cuales usan transistores y amplificadores operacionales. que produce desfasamiento y nos introduce atenuaci´on [4]. cuadradas. Hartley y el circuito integrado 555. Diferentes tipos de osciladores producen diversos tipos de salidas. VCO. incluyendo ondas sinusoidales.1. por lo que mencionaremos varios tipos de osciladores b´asicos. con s´olo el voltaje de alimentaci´on de DC (Direct Current) como entrada. es un circuito que produce una forma de onda repetitiva en su salida. Un oscilador b´asico consta de: 1) Un amplificador para obtener la ganancia (transistor o amplificador operacional) y 2) Un circuito de realimentaci´on positiva.

que puede proporcionar un desfasamiento m´aximo que tiende a 90◦ . 2) Las condiciones para que ocurra la oscilaci´on son dos: la primera. la ganancia de voltaje alrededor del lazo de realimentaci´on positiva debe ser mayor que 1. 2) El oscilador de corrimiento de fase. por arriba de la frecuencia de resonancia predomina la red de atraso y la salida se atrasa con respecto a la entrada. con esto se reforza la se˜ nal de salida. se realimenta a la entrada sin desfasamiento neto. la ganancia debe decrecer enseguida hasta 1. Y 3) El oscilador de T gemela. Tipos de osciladores Dentro de los osciladores realimentados con circuitos RC (Resistencia-Capacitor) se mencionaremos tres tipos que proporcionan salidas sinusoidales: 1) El oscilador puente de Wien. 18 . de tal manera que para que la amplitud de salida pueda alcanzar un nivel deseado. su parte fundamental es una red de adelanto-atraso formada por resistencias y capacitores y que se usa en el lazo de realimentaci´on positiva. con el fin de conservar ese nivel. la ganancia de voltaje alrededor del lazo cerrado de realimentaci´on debe ser igual a la unidad. se conoce as´ı debido a los dos filtros RC de tipo T. esta red tiene una frecuencia de resonancia. Por abajo de la frecuencia de resonancia predomina la red de adelanto y la salida se adelanta a la entrada. uno de los filtros T tiene una respuesta pasa-bajas y el otro una pasa-altas. el desfasamiento alrededor del lazo de realimentaci´on debe ser 0◦ . la segunda.sitiva. que para que se inicie la oscilaci´on. esto es. consta de tres redes RC en el lazo de realimentaci´on. que son usados en el lazo de realimentaci´on negativa. 3. estos filtro son conectados en paralelo y producen una respuesta de un supresor de banda.2. en donde el desfasamiento a trav´es de la red es 0◦ y la atenuaci´on es 1/3. se crea un lazo en donde la se˜ nal se sostiene a s´ı misma y se produce una salida en forma sinusoidal continua. Y 3) La condici´on de arranque dice. se caracteriza por la condici´on en que una parte del voltaje de salida de un amplificador. la oscilaci´on ocurre a la frecuencia en donde el desfasamiento total a trav´es de las tres redes RC es de 180◦ . por lo tanto se produce la oscilaci´on.

a continuaci´on nos introduciremos en varios tipos de osciladores LC resonantes tales como: 1) El oscilador Colpitts. o cuadrada. en principio por la desventaja que presenta el tama˜ no y el costo del transformador. para proporcionar el desfasamiento necesario y poder operar como filtro resonante que va a pasar solamente la frecuencia de oscilaci´on que se requiere.con frecuencia central igual a la frecuencia de oscilaci´on deseada. diente de sierra. la diferencia b´asica es un capacitor adicional en serie con el inductor. 3) El oscilador Hartley. salvo que la red de realimentaci´on est´a formada por dos inductores en serie y un capacitor en paralelo. con lo cual se realimenta una parte del voltaje de se˜ nal. normalmente se usan elementos de realimentaci´on tipo LC (Bobina-Capacitor). algunos de estos tipos se refieren como generadores de se˜ nal o multivibradores. 4) El oscilador Armstrong. sin embargo. Y 5) Los osciladores controlados por cristal. Continuando con los osciladores existe un tipo que es controlado por voltaje (VCO). con el fin de poder controlar la frecuencia. Hemos tratado osciladores que a su salida la forma de onda es sinusoidal. para construir un oscilador de diente de sierra controlado por voltaje. a menudo se emplean transistores como elementos de ganancia en estos osciladores. por que usan un cristal piezoel´ectrico en el lazo de realimentaci´on. denominado as´ı en honor de su inventor. En osciladores que requieren frecuencias m´as altas de oscilaci´on. los VCO’s pueden ser sinusoidales o no sinusoidales. 2) El oscilador Clapp es una variante del Colpitts. en el circuito resonante de realimentaci´on. cuya frecuencia puede cambiarse mediante un voltaje de control variable de DC. no es muy com´ un en comparaci´on con los anteriormente mencionados. Por ejemplo. Com´ unmente estos osciladores se usan para frecuencias hasta de 1MHz (Mega Hertz). en este tipo se usa un circuito LC en el lazo de realimentaci´on. existen osciladores que la forma de onda a su salida puede ser una onda triangular. algunas veces se le denomina oscilador de reacci´ on en referencia al secundario del transformador. es semejante al Colpitts. usa un acoplamiento por transformador. son muy estables y exactos. se puede emplear un inte19 .

tenemos el caso del desarrollo y evoluci´on del transistor. Conforme van pasando los a˜ nos la tecnolog´ıa va progresando en el campo de la electr´onica. en colaboraci´on con un m´ usico llamado Herbert Deutsch. que use un dispositivo de conmutaci´on PUT (transistor de un´ı juntura programable) que se conecte en paralelo con el capacitor de realimentaci´on. al cumplirse estas condiciones junto con la carga y descarga del capacitor obtenemos un generador de diente de sierra. de pasa-bajas y pasa-altas. de igual manera los ADSR (generador de envolvente). para que opere en el modo astable como oscilador no sinusoidal de carrera libre. M´as adelante se explicaremos los t´erminos anteriormente mencionados.grador con un amplificador operacional. As´ı en 1964 Robert Moog. el PUT se apaga. un circuito multivibrador biestable (flip-flop). El multivibrador biestable. desarrolla los filtros controlados VCF (Filtro Controlado por Tensi´on). con esto es posible la construcci´on de generadores de sonido m´as finos. un c´atodo y una terminal de compuerta. 3. cuya salida puede estar en un nivel alto de voltaje (set) o en un nivel bajo de voltaje (reset).7 V (Volts). es un dispositivo digital de dos estados. un transistor de descarga y un divisor de voltaje resistivo. 20 . La compuerta est´a siempre polarizada positivamente con respecto al c´atodo. un a˜ no mas tarde. cuando el voltaje del ´anodo excede al de la compuerta en aproximadamente 0. Por otra parte. El PUT contiene un ´anodo. El 555 se puede conectar. el cual se ver´a como oscilador. tenemos a un circuito integrado muy vers´atil y con muchas aplicaciones. por ejemplo. el PUT se enciende y opera como diodo polarizado directamente. si el voltaje del ´anodo cae por debajo de este nivel. el temporizador 555. estos estados pueden cambiarse mediante se˜ nales de entrada apropiadas. desarrollaron los primeros VCO y VCA (Amplificador Controlado por Tensi´on). Anatom´ıa de un sintetizador Trataremos ahora los componentes elementales de un sintetizador. esto dio paso al nacimiento del sintetizador anal´ogico modular (llamado Moog en honor a su inventor).3. Este oscilador consta de dos comparadores.

se usan con respuesta exponencial normalizada a 1V/Octava y disponen de varias formas de onda.1: Sintetizador elemental En la Figura 3. dado el distinto contenido arm´onico que tienen. triangular y cuadrada. sinusoidal. El VCO. y cada una de ellas dar´a un tipo de sonido peculiar y diferente. de manera que se obtiene otra se˜ nal que es la combinaci´on de aquellas. es en este caso la fuente de sonido b´asica. se refiere a cuatro zonas 21 .Figura 3. diente de sierra. El mezclador de audio. a continuaci´on se describen cada uno de sus bloques: El teclado controlador est´a compuesto por una fuente la cual va a suministrar tensiones que son proporcionales a la tecla que se oprime. es un dispositivo que permite la combinaci´on de una serie de se˜ nales de entrada deseadas. la frecuencia de la se˜ nal que genera se obtiene como suma algebr´aica de las tensiones de control aplicadas a sus entradas. El ADSR (Attack Decay Sustain Release).1 se muestra el diagrama a bloques de un sintetizador elemental. estas tensiones se utilizan para iniciar los generadores de envolvente.

obteniendo sonoridades muy variadas. El VCA se combina con un generador ADSR. que da el sonido caracter´ıstico del instrumento. este se puede configurar en varios modos. Por otro lado. como la caja del viol´ın. la zonas ADR se refiere a tiempos. as´ı como una salida de tensi´on de control aleatoria. pasa alto. con varias formas de onda cada uno y que se sit´ uan en la banda de bajas frecuencias. 22 . tambi´en es posible modular en amplitud la se˜ nal que se procesa para a˜ nadir tr´emolos y otros efectos que depender´an mucho de la frecuencia de la se˜ nal moduladora. como la frecuencia (vibrato). de los VCO.caracter´ısticas de la amplitud de una se˜ nal de control. su salida puede usarse tanto para controlar la amplitud (tr´emolo). Por u ´ltimo mencionaremos que existen t´ecnicas para la generaci´on de ruido. como el mar. de tal manera que permita la simulaci´on de la din´amica de diversos instrumentos musicales. estos generadores de envolvente controlar´an tanto la amplitud de la se˜ nal sonora como la respuesta del filtro. pasa banda y supresor de banda. seg´ un sea el efecto que deseamos resaltar o atenuar de la onda b´asica generada por los VCO. el trueno y el siseo del aire. estas tres se˜ nales sirven para producir sonidos no convencionales similares a los naturales. mientras que S se refiere a un nivel. Ya por u ´ltimo. que determina la atenuaci´on de los sucesivos arm´onicos de la se˜ nal de entrada. pero ajustable en ciertos par´ametros. el LFO (Low Frecuency Ocilator) generalmente se compone de varios osciladores independientes controlados por tensi´on. los cuales suelen proporcionar ruido blanco o rosa. hasta unos 20Hz. se tiene que los par´ametros caracter´ısticos de un filtro son la frecuencia de corte y la pendiente del filtro. por ejemplo. la de un algoritmo computacional o un arreglo de dispositivos electr´onicos. para impartir a los sonidos que modifica unas determinadas caracter´ısticas de ataque y decaimiento en su intensidad. el VCF es un elemento que permite el paso de determinadas frecuencias de la se˜ nal de entrada y es el equivalente el´ectrico de los resonadores ac´ usticos de los instrumentos tradicionales. pasa bajo.

VCO. Resumen En este cap´ıtulo presentamos varios tipos de osciladores. as´ı mismo describimos el diagrama de un sintetizador elemental. tales como: osciladores RC. LC. Hartley. que m´as adelante presentaremos. tambi´en se present´o un circuito integrado muy popular.3. estos conceptos son la antesala para el dise˜ no b´asico de un sintetizador elemental. describiendo cada uno de ellos. llamado temporizador 555 en su forma de oscilador. 23 . Colpitts.4. Clapp.

Φ 24 .

con lo cual se incrementa el rendimiento de las m´aquinas. Estas se dividen en cuatro principales generaciones que son. en la cual se usaron bulbos para almacenar la informaci´on y tarjetas perforadas para cargar datos y programas. 1) Primera generaci´on (19511958). m´as r´apidas y desprend´ıan menos calor. 3) Tercera generaci´on (1964-1971). Explicaremos con m´as detalle la programaci´on de la s´ıntesis de onda y las estructuras de sonido m´as importantes que se requieren para la programaci´on del driver que controla la tarjeta de sonido de una computadora digital PC. pudiendo as´ı trabajar a tal velocidad que se pod´ıa correr m´as de un programa de manera simultanea.1. 4. 2) Segunda generaci´on (1959-1964). Las computadoras se hicieron m´as peque˜ nas. aqu´ı se da la llegada de los circuitos integrados a las computadoras.Cap´ıtulo 4 Dise˜ no de Nuestro Sintetizador de Notas En este cap´ıtulo presentaremos el dise˜ no de nuestro sintetizador de notas musicales. Computadoras digitales Una computadora digital funciona con base al procesamiento de n´ umeros digitales. las cuales utilizaron cintas y discos magn´eticos para almacenar informaci´on y dispon´ıan de celdas fotoel´ectricas para la mejor lectura de las tarjetas perforadas. 4) Cuarta generaci´on 25 . con el invento del transistor llego esta nueva generaci´on de computadoras. ´ y son el tipo de computadoras en el que se ha centrado el progreso moderno.

l´ıneas telef´onicas. pero no una ruta espec´ıfica para su arribo. creando mejores t´ecnicas y desarrollando nuevas tecnolog´ıas. aumentando as´ı su rapidez. etc. los cuales contendr´ıan la direcci´on de destino. TCP se encarga de convertir los mensajes a paquetes en la m´aquina emisora y los reensambla en la m´aquina destino. que es el protocolo utilizado hasta nuestros d´ıas. el TCP/IP (Transmission Control Protocol / Internet Protocol). cada paquete buscar´ıa una ruta y al final el destinatario reensamblar´ıa el mensaje original. Se crean memorias electr´onicas. En 1983 el segmento militar decide separarse de ARPANET y formar su propia red conocida 26 . Aunque se pueda pensar que internet inici´o hace pocos a˜ nos. el cual rige las funciones principales en una computadora. sus inicios nos remontan a la d´ecada de los 60’s. Las computadoras siguen avanzando hasta nuestros d´ıas. qued´o obsoleto. Una parte importante de las computadoras hoy en d´ıa es la Internet.(1971-a la fecha). para que en caso de un ataque se pudiera tener acceso a la informaci´on desde cualquier parte del pa´ıs. Esta red se creo en 1969 y fue llamada ARPANET (Advanced Research Projects Agency Network). fibra ´optica. que puede ser definida como red de redes. radiofrecuencia. se hizo posible la creaci´on de la PC (Personal Computer). Esta red fue situada en diferentes universidades del pa´ıs y creci´o tanto que su protocolo NCP (Network Control Protocol). permite crear el microprocesador.) con el objeto de compartir recursos. no es as´ı. Con la llegada de estas tecnolog´ıas. Entonces con el tiempo se dio paso a un protocolo mas sofisticado. una red que interconecta redes de computadoras entre s´ı. El envi´o de datos deber´ıa descansar en un mecanismo que pudiera manejar la destrucci´on parcial de la red. Una red de computadoras es un conjunto de m´aquinas que se comunican a trav´es de alg´ un medio (cable coaxial. las cuales desechan a las memorias de n´ ucleo magn´etico que se usaban anteriormente. mientras que IP se encarga de buscar la ruta destino. En plena guerra fr´ıa Estados Unidos cre´o una red de uso exclusivamente militar. de esta manera se decidi´o enviar la informaci´on en peque˜ nos mensajes o paquetes. es decir. la colocaci´on de componentes m´as peque˜ nos en un chip.

logr´o absorber a ARPANET. La siguiente es su estructura: typedef struct { WORD wFormatTag. Donde. En 1984 la National Science Foundation. entonces los valores comunes de muestras por segundo 27 . nChannels especifica el n´ umero de canales a utilizar. Estructuras del controlador (driver) de sonido Por otra parte. a un negocio y eso ha sido lo que impulsa su desarrollo. crea una nueva red llamada NSFNET (National Science Foundation Network) y con un incremento continuo de transmisi´on de datos de la misma. Empecemos con la estructura WAVEFORMATEX. Con la creaci´on de las p´aginas web y del primer explorador. que puede ser monoaural para un canal o estereo para dos canales. wFormatTag especifica el tipo de formato de la forma de onda. 4. Sin embargo. nSamplesPerSec es el n´ umero de muestras por segundo que en cada canal se reproducir´an o grabar´an.2. WORD nBlockAlign. Internet no ha dejado de crecer y paso de ser una red de investigaci´on militar. necesitamos conocer el funcionamiento y caracter´ısticas principales de algunas funciones y estructuras que se utilizaran posteriormente. DWORD nSamplesPerSec. terminaron en la uni´on de ´estas con NSFNET. ´esta ser´a incluida como primer miembro en otra estructura con la informaci´on adicional. WORD cbSize. formando as´ı el embri´on de lo que ahora es Internet. WORD wBitsPerSample. }WAVEFORMATEX. la cual contiene la informaci´on m´as com´ un de la forma de onda y define su formato. DWORD nAvgBytesPerSec. para el dise˜ no de s´ıntesis de ondas. el continuo crecimiento de nuevas redes de libre acceso. si wFormatTag tiene especificado WAVE FORMAT PCM. cuando se requiere mayor informaci´on. WORD nChannels.como MILNET (Militar Network).

son: 8.0 KHz, 11.025 KHz, 22.05 KHz y 44.1 KHz; nAvgBytesPerSec requiere hacer un promedio de la transferencia de datos en bytes por segundo, si wFormatTag
tiene especificado WAVE FORMAT PCM, entonces nAvgBytesPerSec debe ser igual
al producto de nSamplesPerSec y nBlockAlign; nBlockAlign es el alineamiento de
bloques en bytes, ´este es la unidad m´ınima de datos para el tipo de formato, si
wFormatTag tiene especificado WAVE FORMAT PCM, entonces nBlockAlign debe
ser igual al producto de nChannels y wBitsPerSample, dividido entre 8; wBitsPerSample son los bits por muestra para el tipo de formato, si wFormatTag tiene especificado
WAVE FORMAT PCM, entonces wBitsPerSample debe ser igual a 8 o 16; cbSize es
utilizada para agregar informaci´on extra de la estructura WAVEFORMATEX, cuando
el formato es diferente de PCM [9].
Quien se encarga de abrir el dispositivo de salida de la forma de onda es la funci´on
waveOutOpen y su estructura es la siguiente:
MMRESULT waveOutOpen(
LPHWAVEOUT
{\it phwo},
UINT
uDeviceID,
LPWAVEFORMATEX
pwfx,
DWORD
dwCallback,
DWORD
dwCallbackInstance,
DWORD
fdwOpen
);
Donde, phwo es ocupado para identificar y relacionar las diferentes funciones de
salida de forma de onda; uDeviceID identifica el dispositivo a utilizar, el cual puede
ser de entrada o salida; pwfx es una direcci´on de la estructura WAVEFORMATEX,
la cual identifica los datos de la forma de onda que ser´an enviados al dispositivo,
esta estructura ser´a vaciada inmediatamente despu´es que se pase a la funci´on waveOutOpen; dwCallback es una direcci´on que asegura que la funci´on regrese, ya sea
de un manejador de eventos, de un manejador de ventana, etc., esto depender´a de
la bandera que se utilice (fdwOpen), si esta funci´on no es usada, su valor puede
ser cero; dwCallbackInstance se usa para pasar datos al mecanismo de llamada de
regreso; fdwOpen es un par´ametro que usa banderas para abrir el dispositivo, las

28

banderas son las siguientes: CALLBACK EVENT permite manejar eventos; CALLBACK FUNCTION regresa alg´
un procedimiento a una direcci´on; CALLBACK NULL
no tiene mecanismo de regreso y solo cuenta con los par´ametros iniciales; CALLBACK THREAD es un hilo identificado; CALLBACK WINDOW es un manejador de
ventana; WAVE ALLOWSYNC indica que un dispositivo de forma de onda s´ıncrono
puede estar abierto; WAVE FORMAT DIRECT especificada que el controlador ACM
(Audio Compression Manager) no llevar´a acabo las conversiones en los datos de audio;
WAVE FORMAT QUERY indica a waveOutOpen preguntar al dispositivo determinado si soporta el formato dado, pero el dispositivo no estar´a abierto; WAVE MAPPED
indica al par´ametro uDeviceID especificar un dispositivo de forma de onda para ser
mapeado.
Para detener el dispositivo de salida y reiniciar la corriente de posici´on a cero, es
utilizada la funci´on waveOutReset y su estructura es la siguiente:
MMRESULT waveOutReset(HWAVEOUT hwo);
donde hwo es el manejador del dispositivo de salida de forma de onda.
Una estructura importante es WAVEHDR, ya que define los par´ametros usados
para identificar un buffer de audio de forma de onda y su estructura es la siguiente:
typedef struct {
LPSTR
lpData;
DWORD
dwBufferLength;
DWORD dwBytesRecorded;
DWORD dwUser;
DWORD
dwLoops;
DWORD
dwFlags;
} WAVEHDR;
Donde, lpData es la direcci´on del buffer de la forma de onda; dwBufferLength es
la longitud en bytes del buffer; dwBytesRecorded es puesta cuando la estructura es
usada para entrada, este miembro especifica cuantos datos hay en el buffer; dwUser
son los datos de usuario; dwLoops es el n´
umero de veces que la funci´on se repite,
dentro de una iteraci´on; dwFlags son las banderas de abastecimiento de informaci´on
acerca del buffer: WHDR BEGINLOOP es el primer buffer en un lazo y solo puede
29

ser usado con buffer de salida; WHDR DONE es colocada en el controlador del dispositivo para indicar que ha finalizado el buffer y est´a regresando a la aplicaci´on;
WHDR ENDLOOP es el u
´ltimo buffer en el lazo y solo es usada con buffer de salida;
WHDR INQUEUE es puesto por windows para indicar que el buffer est´a en cola para
tocar; WHDR PREPARED tambi´en es puesto por windows para preparar al buffer,
ya sea con una funci´on de entrada o una de salida.
Para preparar un bloque de datos de la forma de onda y despu´es tocarlos utilizamos
la funci´on waveOutPrepareHeader. Su estructura es la siguiente:
MMRESULT waveOutPrepareHeader(
HWAVEOUT
hwo,
LPWAVEHDR pwh,
UINT
cbwh
);
Donde, hwo es el manejador del dispositivo de salida de forma de onda; pwh
es una direcci´on de la estructura WAVEHDR, que define los bloques de datos para
prepararlos; cbwh es el tama˜
no en bytes de la estructura WAVEHDR.
Una parte importante es la funci´on waveOutWrite, ya que es la encargada de
mandar bloques de datos a la salida del dispositivo de forma de onda. Su estructura
es la siguiente:
MMRESULT waveOutWrite(
HWAVEOUT hwo,
LPWAVEHDR pwh,
UINT cbwh
);
Donde, hwo es el manejador del dispositivo de salida de forma de onda; pwh es
la direcci´on de una estructura WAVEHDR, la cual contiene informaci´on acerca del
bloque de datos; cbwh es el tama˜
no en bytes de la estructura WAVEHDR.
Para limpiar la preparaci´on llevada a cabo por la funci´on waveOutPrepareHeader
es utilizada la funci´on waveOutUnprepareHeader, esta funci´on debe ser llamada despu´es de que el dispositivo haya finalizado con un bloque de datos y antes de liberar
el buffer. Su estructura es la siguiente:

30

pwh es la direcci´on de una estructura WAVEHDR.= 2 * PI. } } La funci´on anterior genera datos digitales (bytes) que corresponden a una se˜ nal anal´ogica (en este caso un seno). Programaci´ on de las funciones de onda Para la generaci´on de sonido en nuestro dise˜ no. cbwh es el tama˜ no en bytes de la estructura WAVEHDR. y tiene la siguiente estructura: VOID FillBuffer ( LPBYTE pBuffer. UINT cbwh ). i ++ ) { pBuffer [i] = (BYTE) (127 + 127 * sin (fAngle)). fAngle += 2 * PI * iFreq / SAMPLE_RATE .MMRESULT waveOutUnprepareHeader( HWAVEOUT hwo. que es la encargada de cerrar el dispositivo de salida de forma de onda y su estructura es la siguiente: MMRESULT waveOutClose( HWAVEOUT hwo ). hwo es el manejador del dispositivo de salida de forma de onda. hwo es el manejador del dispositivo de salida de forma de onda. que debe estar en el rango de frecuencias audibles para el o´ıdo humano (de 20-20 KHz). Por u ´ltimo tenemos a la funci´on waveOutClose. 4. LPWAVEHDR pwh. una de las funciones m´as importantes es la que llamaremos FillBuffer. por esta raz´on 31 . int iFreq ) { static double fAngle. esta ser´a almacenada en memoria con una raz´on de muestras digitales que llamaremos SAMPLE RATE.3. Para generar una onda de 20 KHz es necesario que en cada ciclo se tomen m´ınimo dos muestras. para identificar los datos que ser´an limpiados. int i. Esta funci´on es la encargada de manipular las diferentes formas de onda con las que trabajaremos. Donde. for ( i = 0 . i < BUFFER_SIZE . if (fAngle > 2 * PI) fAngle . Donde.

un seno es una porci´on fundamental en la trigonometr´ıa. como se muestra en la Figura 4. Se tiene que un ´angulo representa la apertura de dos l´ıneas que tienen un origen com´ un (v´ertice). Por ejemplo para generar una forma de onda con una frecuencia de 8820 Hz por cada ciclo se tomar´an 5 muestras. Se puede aprovechar que la se˜ nal con la que se est´a trabajando es una se˜ nal peri´odica. Cada localidad de memoria es de 8 bits por esta raz´on la funci´on seno est´a dada entre 0 y 254 (00 a FF) [8]. El valor num´erico del seno est´a comprendido entre -1 y 1. El primer ´angulo ser´a 0. es igual a la longitud del cateto opuesto al ´angulo. un arco se define como la l´ınea circular 32 . de esta manera se puede trabajar con un solo ciclo incrementando las localidades de memoria y repitiendo los ´angulos de fase. este procedimiento contin´ ua hasta que fAngle es mayor que 2π. Por otro lado tenemos que. en un tri´angulo rect´angulo el valor del seno de un ´angulo agudo. dividida por la longitud de la hipotenusa. despu´es la variable fAngle es incrementada 2π veces la frecuencia dividida entre el SAMPLE RATE.1: N´ umero de muestras por cada ciclo. Figura 4. entonces ser´a decrementado en 2π para volver a retomar los ´angulos que ahora ser´an almacenados en diferentes localidades de memoria de nuestro buffer. esto significa que el n´ umero de muestras por segundo es el SAMPLE RATE divido entre la frecuencia de la forma de onda.1. El seno de cada muestra ser´a almacenado en la localidad de un buffer previamente definido.el SAMPLE RATE toma el valor de 44100 Hz. la curva de este es el prototipo o modelo de todas las sinusoides.

4. Por lo tanto tenemos que. en la ventana cuatro podemos observar una forma de onda compleja. los cuales son m´ ultiplos de la frecuencia fundamental. que dice: que por medio de la suma de funciones peri´odicas de distinta frecuencia es posible obtener una se˜ nal compleja.que rodea al ´angulo por el extremo de dos segmentos.01745 radianes y 1 radian = 57. las medidas de un ´angulo se pueden expresar en radianes. 1◦ = 0. el radian es el ´angulo cuyo arco tiene una longitud igual al radio. en la primera se representa la frecuencia m´as baja llamada frecuencia fundamental. las funciones pares tienen una gr´afica que debe ser geom´etrica respecto al eje vertical. Tomando en cuenta el teorema de Fourier.2 se muestra el resultado de nuestro programa. en las ventanas dos y tres se representan el tercer y noveno arm´onico respectivamente. 33 .1) n=1 Una se˜ nal por compleja que sea se puede representar mediante la funci´on f(t). hemos creado un programa en Visual C++ que muestra gr´aficamente el teorema de Fourier [3].3 grados. En la Figura 4. las funciones impares tienen su gr´afica sim´etrica con el origen. que se encuentra dividido en cuatro ventanas.4. Visualizaci´ on de las formas de onda Mediante la sumatoria de se˜ nales simples. tambi´en existen funciones que no cumplen con la definici´on de funci´on par e impar. las funciones pueden ser pares e impares. su representaci´on matem´atica es la siguiente: f (t) = a0 ∞ X cos(kw0 t) + bk n=1 ∞ X sen(kw0 t) (4. Tenemos que una serie de Fourier est´a representada por una sumatoria de senos y cosenos. podemos obtener una se˜ nal compleja que sea semejante a la forma de onda caracter´ıstica de alg´ un instrumento musical. el grado est´a definido en trigonometr´ıa como el arco igual a 1/360 de la circunferencia de un c´ırculo. la cual es el resultado de la sumatoria de las tres ventanas anteriores.

bk = 0.bk ). En la ventana superior izquierda tenemos representada a la se˜ nal: a seno(w0 t). la barra horizontal representa la frecuencia (kw0 t). Si la se˜ nal es impar entonces.2: Representaci´on gr´afica de la Serie de Fourier. 34 . Si la se˜ nal es par entonces. y por u ´ltimo en la ventana inferior derecha. mediante un programa dise˜ nado en C++.En las ventanas de la Figura 4. y la se˜ nal estar´a representada por cosenos. queda representada gr´aficamente la sumatoria de las ventanas anteriormente Figura 4. la ventana inferior izquierda representa: ak seno(9w0 t). la ventana superior derecha representa: ak seno(3w0 t). la barra vertical representa la amplitud de la se˜ nal (a0 .2 tenemos dos barras de desplazamiento. ak . a0 y ak = 0. por lo tanto la se˜ nal estar´a representada por senos.

mencionadas. que es el encargado de transformar los datos anal´ogicos de la entrada (micr´ofono. dando la funci´on: f(t) = a seno(w0 t)+ak seno(3w0 t)+ak seno(9w0 t). que realiza una operaci´on inversa al primer bloque. el primero es un convertidor anal´ogico-digital. ya que la PC solo trabaja con este tipo de datos. sin embargo. el bloque del sintetizador de sonido. con el desarrollo de nuevas aplicaciones (video juegos. tuvo que ser desarrollado un hardware dise˜ nado para controlar el sonido y que fuese compatible con la PC. 4. En la Figura 4. La segunda parte se encuentra dividida en cuatro bloques. los bloques de entrada y salida son un receptor universal. etc. la cual se encarga de imitar el sonido por medio de formulas 35 . que es la representaci´on de la Ecuaci´on 4. Anatom´ıa de una tarjeta de sonido Una parte muy importante de este proyecto es la tarjeta de sonido. de esta manera en la d´ecada de los 80’s aparece la tarjeta de sonido.) a datos digitales. y por u ´ltimo el tercer bloque es un convertidor digital-anal´ogico. etc. ya que permitir´a implementar la parte de audio en nuestro proyecto. En un principio la PC (Personal Computer) no fue dise˜ nada para trabajar con sonido.1.3 se muestra el diagrama a bloques de una tarjeta de sonido. en el segundo bloque se encuentran los drivers de audio. los cuales se encargan de mandar y recibir datos. Se puede observar que la parte anal´ogica se encuentra subdividida en tres bloques. guitarra. que pueden ser semejantes a cualquier instrumento musical.5.). En la actualidad las tarjetas de sonido se encuentran divididas en dos partes: la parte anal´ogica y la parte MIDI (Musical Instrument Digital Interface) [6]. m´ usica electr´onica. Estas ventanas se implementan con un buffer y algunas estructuras de audio. una es sintetizaci´on FM. por lo tanto. que usa windows para manipular los datos que le pasar´a el primer bloque. para obtener el sonido de las se˜ nales que representan dichas ventanas. consta de dos formas de sintetizaci´on de datos. para que el escucha pueda interpretar el sonido. vamos a obtener la respuesta gr´afica y el audio.

36 . sino que se busca en una tabla con muestras de ondas del instrumento deseado [5]. En el siguiente cap´ıtulo presentaremos el dise˜ no de la interfaz la gr´afica de nuestro sistema. matem´aticas y la otra es la s´ıntesis por tabla de onda. 4. Cabe mencionar que la parte de MIDI no ser´a requerida para este proyecto. tambi´en presentamos la programaci´on de las estructuras de audio.Figura 4.6. Resumen En este cap´ıtulo presentamos lo m´as relevante del dise˜ no de nuestro sintetizador de notas musicales.3: Diagrama a bloques de una tarjeta de sonido. en la cual ya no se crea m´ usica computarizada. as´ı como el m´etodo que utilizamos para realizar la s´ıntesis de onda y por u ´ltimo describimos c´omo se encuentra estructurada una tarjeta de sonido.

Pixeles y mapas de bits Para dibujar sobre dispositivos gr´aficos se utiliza la GDI (Graphics Device Interface). entre otros. ventana madre. con la ubicaci´on predeterminada 0 en el extremo superior. recurso gr´afico. mapa de bits. Se plantear´an conceptos necesarios para su comprensi´on. el valor de y es la ubicaci´on del punto en el eje y.1. para saber la ubicaci´on de cada punto que se encuentre en pantalla. la imagen esta constituida por p´ıxeles. desplaz´andose de izquierda a derecha. 5. 37 . la cual se encarga de llamar las rutinas de diversos dispositivos (drivers de video. sistema de coordenadas. desplaz´andose de arriba hacia abajo. donde cada uno corresponde a uno o m´as bits del mapa. impresora. Las aplicaciones gr´aficas u ´tilizan un sistema de coordenadas (x. por ejemplo: un mapa de bits de un s´olo color requiere un bit por p´ıxel. tales como: p´ıxel. el valor x da la ubicaci´on del punto sobre el eje x. Un punto que representa la menor unidad gr´afica de medida de una pantalla es llamado p´ıxel. la cual es el medio de comunicaci´on entre el usuario y las estructuras utilizadas en el dise˜ no de s´ıntesis de ondas. y) en el ´area de dibujo. La imagen digital de alg´ un dibujo es conocida como mapa de bits. y trazadores gr´aficos). ventana hija. con la ubicaci´on predeterminada 0 en el extremo izquierdo.Cap´ıtulo 5 Dise˜ no de la Interfaz Gr´ afica En este cap´ıtulo presentaremos el dise˜ no la interfaz gr´afica.

300). con los editores de recursos de Visual C++ [2]. y otros controles gr´ aficos Existen elementos que interact´ uan directamente con el usuario. cada una de las cuales visualizan un documento(Figura 5.1).C++". NULL. } Las ventanas est´an organizadas jer´arquicamente. ventana cliente o ´area de cliente y ventana hija o ventana marco de documento. Los m´etodos tambi´en son conocidos como funciones. Se pueden crear ventanas desde el editor de di´alogos de Visual C++ o escribir el c´odigo en un archivo . 0. una ventana padre o marco principal. estos elementos son conocidos como recursos. La lista de todos los recursos que utilice alguna aplicaci´on se encuentra en un archivo con extensi´on . los recursos se guardan en un directorio y pueden ser editados directamente (colocar barras de desplazamiento. Una ventana sirve de fondo para los controles y para los gr´aficos. ´ıconos. CRect( 175. el ´area de cliente de la ventana padre es denominada ventana cliente. se pueden utilizar tantas ventanas como se necesiten y dependiendo de la utilidad que se les d´e. etc. NULL. 5. etc. cajas de texto.cpp. NULL ). ´estas pueden ser de diferentes tipos. un borde que permite redimensionar la ventana y botones para maximizar.). mapas de bits. Programando la interfase gr´ afica Una clase es una estructura de datos cuyos campos son m´etodos. la ventana padre es una ventana convencional. cursores. minimizar y cerrar la ventana. botones de pulsaci´on. "Windows . WS_OVERLAPPEDWINDOW. esto es.mientras que un mapa de bits de m´as de un color requiere varios bits por p´ıxel. un men´ u de control.rc. como se muestra a continuaci´on: CVentanaPpal::CVentanaPpal() { // Crear la ventana principal Create( NULL.3. en ´esta se contienen las ventanas hijas.2. 465. estos son la base de las aplicaciones y se 38 . 100.. barras. 5. Ventanas. tales como: cajas de di´alogo. tiene una barra de t´ıtulo. una barra de herramientas.

C++. esto invocar´a a Class Wizard.Figura 5. para esto de clic en la orden new del men´ u file. A continuaci´on explicamos el procedimiento para la realizaci´on del software antes mencionado en el lenguaje de programaci´on Visual. que est´a determinada por la ejecuci´on del c´odigo en una funci´on. encuentran declaradas en diversos archivos de cabecera incluidos en Visual C++. los cuales simular´an las teclas del piano y al hacer clic en ellas se escuchar´a la se˜ nal antes mencionada.2. Contar´a tambi´en con una serie de botones. estas se˜ nales se visualizar´an en la ventana as´ı como la se˜ nal resultante. la cual mezclar´a una se˜ nal fundamental con cinco de sus arm´onicos. en la pesta˜ na projects se elige una aplicaci´on MFC (Microsoft Foundation Class) AppWizard [exe] y ponga el nombre del proyecto (en este caso lo llamaremos Sintetizador) y la 39 . Para la implementaci´on de la interfase de nuestra aplicaci´on contaremos con una ventana como la que se muestra en la Figura 5. mover el rat´on. que ha sucedido alg´ un evento (clic sobre un bot´on. La aplicaci´on responde con una acci´on.1: Jerarqu´ıa de ventanas. Inicialmente necesitamos crear un documento vacio (esqueleto de la aplicaci´on). esto significa que enviar un mensaje equivale a ejecutar una funci´on dentro de una aplicaci´on. pulsar una tecla) es necesario enviar una notificaci´on la cual es conocida como mensaje. Para indicarle a una aplicaci´on en ejecuci´on.

en el paso 4 se desactivan las tres primeras casillas (Docking Toolbar. para obtener un formulario como vista principal. en el paso 1 se elige un documento simple. y en el paso 6 se elige la opci´on CFormView del men´ u Base Class. En ese momento comienzan los pasos que genera Class Wizard. localizaci´on. Cada objeto cuenta con un identificador 40 . las cuales controlar´an la amplitud de los arm´onicos de la frecuencia fundamental. las otras opciones en esta ventana son las dadas por omisi´on. Al dar clic en el bot´on finalizar.2: Interfaz gr´afica de la aplicaci´on. Inicial Status Bar y Printing and Print Preview). se muestra la informaci´on del proyecto que se realizar´a cuando demos clic en el bot´on OK de esta ventana. una barra horizontal que servir´a como afinador y una caja de texto por cada barra. El paso siguiente es dibujar sobre la vista cinco barras verticales. en los pasos 2 y 3 se toman las opciones por omisi´on.Figura 5. en donde se visualizar´a en valor de la misma al ser pulsada. en el paso 5 se toman las opciones por omisi´on. dejando s´olo los controles 3D.

SetScrollPos(0.. m_CtrlBarraV1. y a˜ nada para la barra horizontal la variable m CtrlBarraH1. 466. .SetScrollPos(0.. ya que es la primera funci´on de la vista en ejecutarse.SetScrollRange(0. false). GetParentFrame()->RecalcLayout().. para que el c´odigo trabaje sobre esas variables y se olvide de los controles. false). m_CtrlBarraV1. para la caja de texto de la barra horizontal la variable aH1 y para las cajas de texto de las barras verticales las variables aV1 hasta aV5. 16. est´a se encuentra en el archivo fuente sintetizadorview. Ejecute Class Wizard (Ctrl.SetScrollRange(415. Para inicializar las barras de desplazamiento es necesario modificar la funci´on miembro OnInitialUpdate. de clic en la pesta˜ na Member Variables y seleccione el ID de la barra que desee.que es llamado ID.cpp. false).+ w). m_CtrlBarraV5. m_CtrlBarraV5. para modificarlo es necesario: entrar al cuadro de propiedades del objeto y asignarle un nombre que sea c´omodo para ser manipulado. todas de categor´ıa Control y tipo CScrollBar. para las barras verticales agregue las variables m CtrlBarraV1 hasta m CtrlBarraV5. ResizeParentToFit(false).. m_CtrlBarraH1. ahora pulse el bot´on Add Variable. La funci´on SetScrollRange asigna los valores m´ınimo y m´aximo para la barra de 41 . todas estas de tipo int. } UpdateData(false). 16.. .. . Cabe mencionar que usted puede acomodar los botones como m´as le convenga. Para facilitar la entrada y salida de datos a trav´es de controles se utilizan variables miembro que los representen. false).SetScrollRange(0. false).. m_CtrlBarraH1. false).SetScrollPos(440. Edite la funci´on como se muestra a continuaci´on: void CSintetizadorView::OnInitialUpdate() { CFormView::OnInitialUpdate().

nNuevaPo + 1). Para esto invoque Class Wizard y de clic en la ventana Message Maps. break. CScrollBar* pScrollBar) { int nNuevaPo = pScrollBar->GetScrollPos(). nNuevaPo . La funci´on SetScrollPos sit´ ua el cuadro de desplazamiento en la posici´on indicada. enseguida seleccionando la clase CSintetizadorView. nNuevaPo . break. case SB_LINELEFT: nNuevaPo = max(415. UINT nPos. el objeto CSintetizadorView y el mensaje WM HSCROLL. de clic en el bot´on Add Fuction y despu´es en el bot´on Edit Code y edite la funci´on OnHScroll de la siguiente forma: void CSintetizadorView::OnHScroll(UINT nSBCode. 42 . } case SB_THUMBTRACK: nNuevaPo = nPos.5). Cuando el usuario act´ ue sobre una de las barras de desplazamiento se genera un mensaje. break.1). case SB_LINERIGHT: nNuevaPo = min(466. nNuevaPo + 5). si la barra es horizontal el mensaje ser´a WM HSCROLL y si la barra es vertical el mensaje ser´a WM VSCROLL. case SB_PAGELEFT: nNuevaPo = max(415. case SB_RIGHT: nNuevaPo = 466. default:. break.desplazamiento especificada. switch( nSBCode ) { case SB_LEFT: nNuevaPo = 415. pScrollBar->SetScrollPos( nNuevaPo ). case SB_PAGERIGHT: nNuevaPo = min(466. break. break. esto har´a que se ejecute la funci´on asociada OnHScroll o OnVScroll. break.

break. break. case SB_PAGELEFT: nNuevaPos = max(0. y a continuaci´on ed´ıtela de la siguiente forma: void CSintetizadorView::OnVScroll(UINT nSBCode. pScrollBar).GetScrollPos(). UINT nPos. aV4 = m_CtrlBarraV4. break.aH1 = m_CtrlBarraH1. nNuevaPos . Un procedimiento similar se hace para la funci´on OnVScroll.GetScrollPos(). 43 . nPos. pScrollBar). aV5 = m_CtrlBarraV5. nNuevaPos . case SB_LINERIGHT: nNuevaPos = min(16. case SB_RIGHT: nNuevaPos = 16. nNuevaPos + 1). } pScrollBar->SetScrollPos( nNuevaPos ).1).l switch( nSBCode ) { case SB_LEFT: nNuevaPos = 0. case SB_LINELEFT: nNuevaPos = max(0. aV1 = m_CtrlBarraV1. case SB_THUMBTRACK: nNuevaPos = nPos. case SB_PAGERIGHT: nNuevaPos = min(16. break. CFormView::OnVScroll(nSBCode. break. esta funci´on se ejecuta igual que la anterior pero ahora con el mensaje WM VSCROLL. nPos. } CFormView::OnHScroll(nSBCode. nNuevaPos + 2). aV2 = m_CtrlBarraV2. aV3 = m_CtrlBarraV3.2). break.GetScrollPos().GetScrollPos().GetScrollPos(). break. CScrollBar* pScrollBar) { int nNuevaPos = pScrollBar->GetScrollPos(). Graficador().GetScrollPos().

44 .Graficador(). est´a funci´on es la encargada de dibujar la se˜ nal fundamental. CClientDC dc3(this). borre su declaraci´on que se encuentra en el archivo sintetizadorview. dc2. dc. al hacerlo aparecer´a un men´ u y daremos clic sobre la opci´on Add Member Function. dc3. pScrollBar).SetViewportOrg(47. CClientDC dc6(this). Edite esta funci´on de la manera siguiente: void CSintetizadorView::Graficador() { CClientDC dc(this). aparecer´a una ventana en donde preguntar´a el tipo de funci´on.20). los arm´onicos y la resultante en la vista principal.20).SetViewportExt(630. } CFormView::OnVScroll(nSBCode. dc2. desplegamos el men´ u sintetizador classes y damos clic derecho sobre la clase CSintetizadorView.560).SetMapMode(MM_ISOTROPIC).416).SetViewportExt(630. CClientDC dc2(this). Para una mejor manipulaci´on de estas variables.SetMapMode(MM_ISOTROPIC).cpp.SetViewportExt(630. Al final de cada c´odigo estamos llamando a una funci´on Graficador.SetViewportOrg(250.SetViewportOrg(47. Las variables miembro aH1 y aV’s son igualadas con la posici´on en la que se encuentre la barra de desplazamiento para ser mandadas a la caja de texto y a la funci´on Graficador que m´as tarde ser´a declarada. CClientDC dc5(this). CClientDC dc4(this). dc. Para darla de alta ocuparemos AppWizard. dc3.20). dc2.400). que ser´a void y la declaraci´on o nombre de funci´on. que ser´a Graficador.h y decl´arelas como variables globales en el archivo sintetizadorview. dc. CClientDC dc7(this).SetMapMode(MM_ISOTROPIC). dc3. esto lo hacemos dando clic en la pesta˜ na ClassView de la ventana WorkSpace. nPos.

La funci´on RedrawWindow se encarga de limpiar la pantalla cada vez que movemos las barras y se dibuja la funci´on seno.ysen5*300. ysen=(int)(87+87*sin(x*w/440)).SetPixel(x*8.RGB(0.20). dc6.SetPixel(x*8. dc2.SetViewportOrg(700. resul=(int)((87+87*sin(x*w/440))+(8+aV1*sin(x*w2/440))+ (8+aV2*sin(x*w3/440))+(8+aV3*sin(x*w4/440))+ (8+aV4*sin(x*w5/440))+(8+aV5*sin(x*w6/440))). w4 = (1760*2*3.SetMapMode(MM_ISOTROPIC). dc7. dc5.560).dc4.SetViewportExt(630.SetViewportExt(630. Declare las variables ysen a ysen6. dc5.0)). x y resul. todas como variables globales.resul*80.20). w6 = (2640*2*3. dc3.20). RedrawWindow(). dc5.x<=2000.560). dc4.SetMapMode(MM_ISOTROPIC).ysen4*300. ysen3=(int)(8+aV2*sin(x*w3/1320)).0.SetViewportOrg(450.SetPixel(x*8. 45 . dc7.0. dc6.SetPixel(x*8. ysen4=(int)(8+aV3*sin(x*w4/1760)). } } dc.0)). for(x=0.SetViewportExt(630.RGB(0.SetPixel(x*8.RGB(0.RGB(0.0.ysen2*300.0)).14). ysen6=(int)(8+aV5*sin(x*w6/2640)).SetPixel(x*12. dc6.0.416).SetMapMode(MM_ISOTROPIC). dc7. dc4.14).0.14).14). dc7. ysen5=(int)(8+aV4*sin(x*w5/2200)).0.SetViewportExt(630.SetViewportOrg(250.20). w3 = (1320*2*3.SetViewportOrg(450.ysen6*300.420).SetPixel(x*8. como tipo int y las variables w a w6 de tipo double. dc5.0)). w5 = (2200*2*3.SetMapMode(MM_ISOTROPIC). UpdateData( false ).ysen*50. ysen2=(int)(8+aV1*sin(x*w2/880)).0)).ysen3*300.RGB(0. x ++) { w = (440*2*3.0)).14).0.14). w2 = (880*2*3.0)).RGB(0. dc6. dc4.RGB(0.

SetViewportExt establece la medida del ancho del dibujo. El primer paso es dibujar trece botones en el formulario. class CSintetizadorView : public CFormView { public: 46 . Corel Draw. ponga los ID entre comillas para sean considerados como cadenas y no como constantes (BOTONU. SetPixel dibuja un punto en la pantalla. permiti´endonos manipular el tama˜ no de las figuras cuando se redimensione la ventana. acom´odelos de tal forma que aparenten el tama˜ no de una tecla blanca y una tecla negra como las del teclado. el cual es un modo que se puede personalizar. los mapas de bits deben ser creados por usted en cualquier programa de edici´on de im´agenes (Paint Brush. En el archivo sintetizadorview. para que estas operaciones se lleven a cabo se necesita declarar la librer´ıa math.h declare un objeto miembro de CBitmapButton.El CClientDC nos sirve para obtener el contexto de dispositivo del ´area de cliente y acceder a sus atributos a trav´es de la funci´on miembro de la clase del contexto de dispositivo. una para cuando la tecla este pulsada y otra para cuando este en reposo. La funci´on SetMapMode se encarga de ajustar el sistema de coordenadas a alg´ un modo de proyecci´on que en este caso es MM ISOTROPIC. Cuando creamos un bot´on de mapa de bits es necesario poner su propiedad Owner Draw a valor true. Down) correspondiente al estado del bot´on. BOTOND). asigne a cada una de las im´agenes un ID compuesto por el titulo del bot´on (en nuestro caso BOTON) m´as una letra U o D (Up. etc. Ahora abra el editor de recursos para importar estas im´agenes como recursos de tipo bitmap. Siguiendo con la aplicaci´on se pretende visualizar la octava de un teclado en la vista principal. las coordenadas que utiliza son referidas por un for y por el resultado de las operaciones matem´aticas.cpp. en alg´ un punto del ´area de cliente (las funciones expuestas en la funci´on Graficador son opcionales).0 de coordenadas. SetViewportOrg sit´ ua el origen l´ogico 0. esto hace que se visualice el mapa de bits dependiendo del estado del bot´on. enseguida a˜ nadiremos dos mapas de bits por cada bot´on para que aparenten una tecla.) en nuestro caso usamos Macromedia Flash.h al inicio de sintetizadorview.

. case IDC_BOTON10: raiz = 1.AutoLoad(IDC_BOTON1. } Boton1. . LPARAM lParam) { switch (wParam) { case IDC_BOTON1: raiz = pow(cua. case IDC_BOTON2: raiz = pow(cua. Esta operaci´on se realiza desde la funci´on miembro OnInitialUpdate. el cual tiene dos par´ametros: el ID del bot´on y la direcci´on al objeto. fillplaybuffer(). fillplaybuffer(). GetParentFrame()->RecalcLayout(). -9). siguiendo la secuencia: BOOL CSintetizadorView::OnCommand(WPARAM wParam. 47 . fillplaybuffer().. el objeto CSintetizadorView y el mensaje OnCommand..CBitmapButton Boton1. y enseguida Edit Code y edite esta funci´on de la siguiente manera. .. this). este mensaje es manipulado por la funci´on OnCommand. Repita los pasos anteriores para los dem´as botones.. Ahora ejecute Class Wizard. // Overrides } Por u ´ltimo. ResizeParentToFit(false). break. Cada vez que se pulsa un bot´on es generado el mensaje WM COMMAND. break. la cual se encargar´a de llamar a la funci´on fillplaybuffer y asignarle un valor dependiendo del bot´on pulsado. el bot´on debe recibir el mensaje AutoLoad.. UpdateData(false).. -8).. void CSintetizadorView::OnInitialUpdate() { CFormView::OnInitialUpdate(). para cargar los recursos mapa de bits. seleccione la clase CSintetizadorView. oprima el bot´on Add Function.

y de mandarlos de la tarjeta de sonido. wf. &wf. . } 5. WAVEHDR wh.wFormatTag = WAVE_FORMAT_PCM.cbSize = 0.. } return CFormView::OnCommand(wParam. Programando el controlador driver de sonido El par´ametro wParam.4. CALLBACK_NULL)... La funci´on fillplaybuffer es la encargada de llenar un buffer con los datos de la se˜ nal fundamental y sus arm´onicos. WAVEFORMATEX wf.. 0. 48 . Utilizando AppWizard declare la funci´on fillplaybuffer de tipo void y ed´ıtela de la siguiente manera: void CSintetizadorView::fillplaybuffer() { HWAVEOUT fd. contiene el elemento del recurso que ha hecho que se env´ıe este mensaje.i++) { son[i]=(BYTE)((47+47*sin(fAngle))+(16+aV1*sin(fAngle2))+ (16+aV2*sin(fAngle3))+(16+aV3*sin(fAngle4))+ (16+aV4*sin(fAngle5))+(16+aV5*sin(fAngle6))).nSamplesPerSec = SAMPLE_RATE. .break. wf.. break. fillplaybuffer(). for(i=0. esto se explicar´a m´as adelante. . lParam). wf.i<MAXBUF. waveOutOpen(&fd. este valor determinar´a la nota que tocar´a cada bot´on. WAVE_MAPPER. El valor raiz es enviado a la funci´on fillplaybuffer. wf.nBlockAlign = 1.wBitsPerSample = 8. case IDC_BOTON13: raiz = pow(cua. wf. se puede identificar el bot´on sobre el que se ha pulsado. de esta manera mediante el uso de un switch.nAvgBytesPerSec = SAMPLE_RATE. wf. wf. 0. 3)..nChannels = 1.

&wh. } wh. &wh. if(fAngle > 2*pi) { fAngle -= 2*pi. waveOutClose(fd). sizeof(WAVEHDR)). fAngle2 += 2 * pi * aH1*2*raiz/SAMPLE_RATE. } if(fAngle2 > 2*pi) { fAngle2 -= 2*pi. fAngle a fAngle6 como tipo double y son[MAXBUF] como tipo CHAR. fAngle5 += 2 * pi * aH1*5*raiz/SAMPLE_RATE. wh.fAngle += 2 * pi * aH1*raiz/SAMPLE_RATE. fAngle4 += 2 * pi * aH1*4*raiz/SAMPLE_RATE. fAngle6 += 2 * pi * aH1*6*raiz/SAMPLE_RATE. wh. fAngle3 += 2 * pi * aH1*3*raiz/SAMPLE_RATE. sizeof(WAVEHDR)). Sleep(150). Declare las variables. } if(fAngle5 > 2*pi) { fAngle5 -= 2*pi.lpData = son. wh.dwBufferLength = MAXBUF. waveOutWrite(fd. waveOutPrepareHeader(fd. waveOutReset(fd).dwLoops = 0L. } } } if(fAngle6 > 2*pi) { fAngle6 -= 2*pi. } if(fAngle3 > 2*pi) { fAngle3 -= 2*pi. waveOutUnprepareHeader(fd.dwFlags = 0L. i como tipo entero. sizeof(WAVEHDR)). &wh. } if(fAngle4 > 2*pi) { fAngle4 -= 2*pi. La estructura utilizada para el llenado de buffer es 49 .

mostrando cada uno de los principales programas para la manipulaci´on de audio anal´ogico. s´olo que en esta ocasi´on realiza una serie de Fourier con los par´ametros antes mencionados. Boton). entre otros. 5. raiz = pow(cua.lib. mapas de bits. al mismo tiempo es multiplicado por un valor que corresponde al arm´onico en el que se encuentra y por un valor raiz que es enviado por el bot´on que se pulso. se encuentra en el bot´on 10 y es a partir de ´esta que se determinan las dem´as notas de la octava. Resumen En este cap´ıtulo presentamos conceptos importantes para el dise˜ no.5. de esta manera en la funci´on OnCommand.parecida a la funci´on fillbuffer explicada en el capitulo 4. Al mismo tiempo desarrollamos y explicamos los pasos a seguir para la implementaci´on del sintetizador.1). pi con un valor de 3. (5.14159 y MAXBUF con un valor de 3200. recursos. el cual tiene por default 440 Hz. 50 . no olvide incluir el archivo de cabecera mmsystem. tales como sistema de coordenadas. Las estructuras utilizadas en esta funci´on ya han sido explicadas en el cap´ıtulo 4. p´ıxel. Defina un par´ametro cua con un valor de ra´ız doceava de dos.1) Defina las variables SAMPLE RATE con un valor de 11025. este valor es el que determina el intervalo que hay de una tecla a la siguiente. El par´ametro fAngle recibe el valor de la barra horizontal. La frecuencia 440 Hz. el cual es enviado a fAngle para determinar la nota. el par´ametro cua es elevado a cierta potencia dependiendo del bot´on en el que se encuentre (nuestra tecla central es la nota LA4) y se iguala a raiz (Ecuacion 5.h e incluir en las opciones de link la librer´ıa winmm.

es necesario llevar acabo los siguientes pasos. que se encuentra en el men´ u Build de la barra de herramientas. dibujar las diferentes se˜ nales ocupadas. b) Al cambiar de un tipo de compilaci´on a otra. para esto presione ALT+F7.exe de tipo release. tales como el rango a las barras de desplazamiento.exe. Para generar un archivo ejecutable . Cabe men- 51 . c) Y por u ´ltimo en el men´ u Build de la barra de herramientas. etc. con esto conseguimos generar un archivo ejecutable Sintetizador. a) Seleccione la configuraci´on Win32 Release de la caja de herramientas Set Active Project Configuration.lib. En este cap´ıtulo presentamos algunos resultados de nuestro sistema Sintetizador y describiremos su operaci´on. deber´a especificar en las opciones de linker la librer´ıa winmm. Ambiente de compilaci´ on y generaci´ on de c´ odigo Usando el lenguaje de programaci´on Visual C++. el sonido que se produce al pulsar los diferentes botones. realizamos un tipo de compilaci´on llamado release. de clic en la opci´on Build Sintetizador. seleccione la pesta˜ na Link.1. 6.exe que podr´a ser ejecutado en cualquier sistema operativo Windows (95 o superior). escriba la librer´ıa en la caja de texto Object/library modules y presione el bot´on OK para hacerla valida.Cap´ıtulo 6 Pruebas y Resultados En el cap´ıtulo anterior explicamos como asignarle ciertos comportamientos a cada uno de los elementos utilizados en este proyecto.

52 .1: Vista principal del sintetizador.Figura 6.

En la parte inferior derecha se 53 . se encuentra un marco con el t´ıtulo Amplitud que contiene cinco barras verticales y cinco cajas de texto. el archivo ejecutable no operar´a en PC’s (Personal Computer) que no cuenten con el software Visual C++ instalado. cuando el usuario act´ ue sobre la barra est´a modificar´a su valor. 6. Esta funci´on es la encargada de llenar el buffer de audio para ser enviado a la tarjeta de sonido. ´esta tendr´a un aspecto similar al mostrado en la Figura 6.2: Valores m´ınimo. Cuando el usuario act´ ue sobre la barra podr´a modificar el tono de las teclas para que ´este sea de su agrado. lo cual significa que de acuerdo con los valores m´aximos y m´ınimos en la barra. los cuales se pueden visualizar en la parte inferior izquierda de la vista. central y m´aximo de la barra horizontal.2. Las barras representan la amplitud de los arm´onicos de la se˜ nal fundamental utilizados. como se muestra en la Figura 6.1. las teclas pueden llegar a subir o a bajar un tono. el cual se visualizar´a en la caja de texto y ser´a enviado a la funci´on que est´a rea´ lizando la s´ıntesis (fillplaybuffer). la barra nos servir´a como un afinador.exe se visualizar´a nuestra aplicaci´on ya terminada. un valor m´aximo de 466 Hz y un valor m´ınimo de 415 Hz. En la esquina superior izquierda de esta figura se encuentra un marco con el t´ıtulo Afinador que contiene. Aspecto visual del sintetizador Al dar doble clic en el archivo Sintetizador.cionar que con el tipo de compilaci´on Debug. una barra horizontal y una caja de texto. la cual est´a ubicada en la carpeta principal de nuestro proyecto. Una vez creado el archivo ejecutable ´este se encontrar´a en la carpeta release.2. por lo tanto. Figura 6. Debajo del marco Afinador. La barra horizontal tiene un valor inicial de 440 Hz.

Cuando sumamos la se˜ nal fundamental con la amplitud m´axima de los cinco arm´onicos nos da el 100 % de nuestro buffer. 6. ya que en nuestro programa fuente. Control de par´ ametros del sintetizador Cuando el usuario act´ ue sobre alguna de las barras su valor es enviado a la funci´on que se encarga de realizar la s´ıntesis para el llenado del buffer.visualiza la se˜ nal resultante de la suma de los arm´onicos. los arm´onicos y la resultante (la funci´on Graficador fue mostrada en el cap´ıtulo 4). Figura 6. Por ejemplo. el cual se visualizar´a en su respectiva caja de texto situada debajo de cada barra como se muestra en la Figura 6.6 % del 100 % que nuestro buffer puede tocar sin distorsionar el sonido (8 bits.3: Barras de desplazamiento verticales.3. cuando el usuario act´ ua sobre la barra Arm 3 su valor es enviado a las funciones antes mencionadas y se visualiza un cambio de amplitud en la se˜ nal ubicada en el marco 54 . Cuando el usuario act´ ua sobre alguna de las barras verticales cambiar´a su valor. esto es por razones de normalizaci´on.3. este valor representa el 12. la cual es enviada a la tarjeta de sonido. Las barras pueden obtener un valor m´ınimo de cero y un m´aximo de diecis´eis. con una amplitud modificada. de 0 a 254). la amplitud m´axima de cada arm´onico es de treinta y dos. al mismo tiempo es enviado a una funci´on encargada de graficar la se˜ nal fundamental. siendo la se˜ nal fundamental la de mayor amplitud con un 37 %.

al mismo tiempo visualizamos un cambio en la se˜ nal resultante ubicada en el marco con t´ıtulo Resultante. 6. que encontramos en la esquina inferior derecha de la vista de nuestro proyecto como se muestra en la Figura 6. 55 . Cuando el usuario act´ ua sobre la barra Arm 5 el valor de ´este es enviado a la funci´on Graficador y se visualiza un cambio de amplitud en la se˜ nal ubicada en el marco con el t´ıtulo Quinto Arm´ onico.6. Controlando los arm´ onicos El usuario puede actuar sobre varias barras modificando diferentes arm´onicos.5.4. cuando esto ocurra los valores de las barras ser´an enviados a las funciones antes mencionadas y se visualizar´a un cambio en los marcos situados en la parte inferior de la vista principal de nuestro proyecto como se muestra en la Figura 6.4. como se muestra en la Figura 6. Figura 6.con el titulo Tercer Arm´ onico. al mismo tiempo visualizamos un cambio en la se˜ nal resultante ubicada en el marco con t´ıtulo Resultante. que se encuentra en la parte inferior izquierda de la vista principal del proyecto. que encontramos en la parte inferior izquierda de la vista principal del proyecto. que encontramos en la esquina inferior derecha de la vista de nuestro proyecto.4: Tercer arm´onico con amplitud modificada.

Figura 6.6: Todos los arm´onicos modificados 56 .5: Quinto arm´onico con amplitud modificada. Figura 6.

Figura 6. Control del teclado En la parte superior derecha encontramos un marco con el t´ıtulo Teclado como el que se muestra en la Figura 6. El teclado cuenta con una frecuencia central de 440 Hz. y su principal objetivo es que el usuario tenga una vista m´as amigable al interactuar con el proyecto. es a partir de ´esta que se calcula √ el valor de las dem´as teclas. multiplicando la frecuencia central por 12 2 para subir medio tono y se ubica en la tecla n´ umero 11 y multiplicar la frecuencia central por √ ( 12 2)−1 para bajar medio tono y se ubicar´a en la tecla n´ umero 9. que corresponde a la nota LA4 y se encuentra ubicada en la tecla n´ umero 10. para las dem´as √ teclas es necesario elevar el valor 12 2 a una potencia positiva o negativa dependiendo 57 .5. modificando el proyecto desde Visual C++).8.7: Vista del Teclado.7.La raz´on por la que utilizamos solamente cinco arm´onicos es por fines pr´acticos. 6. que con la ayuda de un par de mapas de bits simulan las teclas de un sintetizador. ya que uno de los principales objetivos es demostrar que se puede lograr una s´ıntesis de audio mediante la serie de Fourier (usted puede adicionar o quitar el n´ umero de arm´onicos que desee. ya sean en estado de reposo o presionadas como se muestran en la Figura 6. El teclado est´a conformado por 13 botones.

8: a)Tecla en reposo.6. Estos valores son enviados a la funci´on fillplaybuffer mencionada en cap´ıtulos anteriores. modelo CT-680: Tabla 6. 58 .1: Valores de las barras de desplazamiento IN T RU M EN T O OBOE Organo de Jazz 6. b)Tecla pulsada. el sonido fue comparado con un sintetizador marca CASIO. con los valores que deben tener las barras ´ para asemejarse a un Oboe ´o a un Organo de Jazz.de la tecla (para mayor informaci´on consulte el cap´ıtulo 4). se utiliza audio anal´ogico digitalizado. para realizar el llenado del buffer y enviarlo a la salida de la tarjeta de sonido. Af inador 450 450 Arm2 Arm3 Arm4 Arm5 Arm3 12 10 0 8 8 16 0 0 14 11 Resumen En este cap´ıtulo presentamos la utilizaci´on de nuestro proyecto mostrando gr´afica y textualmente los principales pasos a seguir para su funcionamiento b´asico. Figura 6. Cabe mencionar que en este proyecto no se utiliza MIDI (Music Interfaz Digital Instrument). A continuaci´on se muestra una tabla.

las bases de nuestro proyecto estuvieron planteadas: crear 59 . ya que lo u ´nico que se necesita para usarlo es una computadora digital (p.e. Para iniciar con la elaboraci´on de nuestro proyecto.Cap´ıtulo 7 Conclusiones y Trabajos Futuros Esta tesis present´o el dise˜ no elemental de un sintetizador de notas musicales. el dise˜ no de nuestro sintetizador se ha realizado con medios comunes en el mercado. el cual nos ofreci´o adem´as de su f´acil manejo. F´ısicamente estos elementos son costosos y ocupan grandes espacios. fue el lenguaje de programaci´on Visual C++. El resultado de esta elecci´on. De esta manera. Este lenguaje deber´ıa ser accesible para el programador a fin de que los resultados obtenidos pudieran observarse en una computadora est´andar.NET. como ya se ha mencionado. filtros. primero debimos elegir un lenguaje de programaci´on que permitiera dise˜ nar la interfase de usuario. etc. tales como osciladores. que pr´acticamente es necesaria en la vida cotidiana de toda persona. la oportunidad de crear objetos bastante amigables para los usuarios. Desde un principio. lo cual puede llegar a ser molesto para el usuario. Pensando en esto u ´ltimo. mezcladores de se˜ nales. el cual describimos en un programa de computadora digital. nos dimos cuenta que un modelo por software puede igualar a un modelo por hardware y no ser estorboso. Este dispositivo de software produce sonidos mediante la generaci´on de se˜ nales peri´odicas y funciones matem´aticas con la ayuda de elementos electr´onicos programados. PC).

Algunas de las instrucciones de audio m´as importantes son. Esto nos ayud´o enormemente en nuestra investigaci´on. Una vez generada la s´ıntesis. el art´ıculo est´a escrito en ingl´es. previamente grabado. a la tarjeta de sonido. Hecho lo anterior. en otras palabras. Sin embargo. pero lo anterior no era suficiente. sin embargo. a otro buf f er que se encuantra asociado al driver de la tarjeta de sonido (una Sound Blaster). con esto obtuvimos un n´ umero bastante grande de valores. los siguientes pasos fueron sencillos. programamos nuestra Serie de Fourier para comprobar las s´ıntesis de onda. Con estas funciones. Encontramos varios libros y notas que hablaban acerca de c´omo enviar un archivo WAVE. que pudimos avanzar en nuestro proyecto. algunas veces llamadas primitivas. El resultado deber´ıa ser visible en la ventana principal del proyecto para ver la forma de onda que se estar´ıa mandando a la tarjeta de sonido. fue hasta que se consult´o el art´ıculo de una revista que hablaba acerca de la generaci´on de audio por medio de una onda senoidal. el siguiente paso fue enviar los datos almacenados en nuestro buf f er. lo cual reafirmaba la poca informaci´on disponible en este pa´ıs al respecto. algunas de estas funciones fueron la suma. y WaveOutWrite() que se encarga de sacar los datos de la tarjeta de sonido a los altavoces de la PC. que representa 60 .se˜ nales senoidales para representar una sumatoria. programar una Serie de Fourier. al iniciar este proceso nos dimos cuenta de la poca informaci´on que existe sobre c´omo programar drivers de sonido. Para la distribuci´on de las notas del teclado utilizamos el valor matem´atico ra´ız doceava de dos. estos procesos se explican m´as detalladamente en el cap´ıtulo 4 de esta tesis.lib. ocupamos instrucciones de audio de bajo nivel que se encuentran en la biblioteca de funciones multimedia mmlib. los cuales ten´ıamos que almacenar en memoria operativa (buf f er de audio) con el fin de tener un mejor control de los datos. WavePrepareHeader() que se encarga de preparar al buffer para ser enviado a la tarjeta de sonido. Lo anterior fue logrado programando funciones matem´aticas en Visual C++. la multiplicaci´on y el seno. Para enviar los datos almacenados en el buffer a la tarjeta de sonido.NET.

Pensamos que es posible implementar una serie de elementos. 61 .el intervalo existente entre una nota y la siguiente (un semitono). sino tambi´en ver su forma de onda al mismo tiempo. De esta manera es posible no solo escuchar alg´ un instrumento como una trompeta o un oboe. presentamos algunas sugerencias en cuanto a trabajos futuros. Y por u ´ltimo. un sintetizador virtual para PC cap´az de ejecutarse en sistemas windows 95 o superior.NET. funcionalidad. La generaci´on de audio anal´ogico por medio de una suma de se˜ nales. y as´ı sucesivamente. Cada uno de estos valores fueron asignados a un bot´on ubicado en la vista principal y as´ı darle el sonido de la nota correspondiente. asign´andole el valor de dichas barras a las amplitudes y frecuencias que se encuentran en la formula de la s´ıntesis de onda. en cuanto a est´etica. las principales contribuciones de esta tesis son las siguientes: La realizaci´on de una Serie de Fourier con algoritmos de programaci´on y m´etodos num´ericos. La programaci´on de instrucciones de audio de bajo nivel con lo cual se facilitar´a la construcci´on software de drivers de sonido. T´ecnicas de graficaci´on en Visual C++. Trabajos Futuros Continuando con los resultados de nuestra investigaci´on. En resumen.1. controlamos las formas de onda senoidales en su amplitud y frecuencia. esto se consigui´o por medio de barras de desplazamiento. 7. Para cambiar el timbre de nuestro sintetizador. El resultado de esta operaci´on fue multiplicado por la frecuencia central utilizada (LA4 =440Hz) con el fin de encontrar la frecuencia de la siguiente nota (LA#). y aplicaci´on cient´ıfica.

as´ı mismo. si cuenta con cuatro octavas. se pueden efectuar varias acciones para el mejoramiento del proyecto. Se puede perfeccionar el teclado. mediante la implementaci´on de perillas giratorias en tercera dimensi´on. pueda seleccionar el instrumento o los instrumentos que se deseen 62 . que simulen instrumentos musicales. En cuanto a funcionalidad. diente de sierra. Esto permite la simulaci´on din´amica de los instrumentos musicales. la principal funci´on de un sintetizador es generar una gran variedad de sonidos. perfeccionar la apariencia del teclado. para que puedan ejecutarse acordes. que son se˜ nales senoidales. mediante el control del ataque. tener configurado el sistema para que con una perilla. tono y timbre. Para resolver esta limitante se puede implementar una mayor cantidad del contenido arm´onico a nuestro sistema. Por ello. Adem´as. Esto permite obtener una mayor variedad de instrumentos musicales. aumentar el n´ umero de teclas que se tocan al mismo tiempo. mediante la integraci´on de formas de onda cuadrada. se puede mejorar la apariencia de las barras verticales y la barra horizontal. sostenimiento y la relajaci´on tal como se ha descrito en el cap´ıtulo tres. se puede agregar una funci´on para que el sintetizador pueda dividir el teclado en dos partes. esto es. ya que cada forma de onda cuenta con diferente contenido arm´onico. Es decir. etc. Ya que en nuestro trabajo cuenta s´olo con una octava en el teclado. esto es. Por ejemplo. es posible crecer la funcionalidad de nuestro sintetizador en cuanto a la amplitud. las primeras dos tocar´ıan un instrumento. Como ya se sabe. cosenoidal. integrando generadores de ruido (blanco o rosa) y envolventes de onda. por ejemplo el piano y las dos octavas restantes tocar´ıan un acorde´on como lo hacen los sintetizadores profesionales. en el futuro se pueden implementar cuatro o m´as octavas para obtener un rango mayor de frecuencias. a este proyecto se puede agregar un selector de instrumentos. Adem´as es posible mejorar la graficaci´on de las se˜ nales mediante la implementaci´on de color y aumento de la resoluci´on de la gr´afica. decaimiento. s´olo se cuenta con la frecuencia fundamental y cinco de sus arm´onicos. As´ı mismo.Respecto a la est´etica.

Por otra parte. generadores de funciones. Se tiene pensado realizar una versi´on comercial que pueda competir con la industria de los sintetizadores realizados por software. reconocimiento de patrones de im´agenes. en la educaci´on musical puede ser de gran ayuda como material did´actico. por ejemplo. Por u ´tlimo. por ejemplo un piano. ya que donde quiera que ´el se encuentre haciendo su trabajo (tocando). medidores de ruido. para un m´ usico puede ser de gran utilidad. aprender el orden de las notas en un teclado e iniciarse dentro de la m´ usica. una flauta. un viol´ın. e instrumentos de ultrasonido. Actualmente se encuentran desarrollando m´as proyectos en ciencia y tecnolog´ıa ac´ ustica. Adem´as. Jos´e de Jes´ us Negrete. 63 .tocar. e instrumentos de medici´on como osciloscopios. Maximino Pe˜ na Guerrero y el Ing. cabe mencionar que esta tesis se ha desarrollado conjuntamente con el Dr. etc. en cuanto al costo y a la transportabilidad. profesores de la academia de ac´ ustica de la ESIME-Zacatenco. reconocimiento de patrones de sonido. si cuenta con una PC podr´a tener a su alcance un sintetizador de sonidos. Respecto a las aplicaciones en la ciencia y en la tecnolog´ıa los resultados obtenidos pueden ser aprovechados en algunas ´areas como: Procesamiento de Se˜ nales Digitales (DSPs).

v.. 1479 pgs. “MIDI: Musical Instrument Digital Interface”. 200-206. 1999. Centro de Investigaci´on y de Estudios Avanzados del Instituto Polit´ecnico Nacional. 717 pgs. (p: 38) [3] Ceballos. (p: 17) [5] Moog Robert A. 852 pgs. Fco. Tesis presentada para aspirar al grado de Doctor en Ciencias en Ingenier´ıa El´ectrica. Journal of the Audio Engeering Society. (p: 33) [4] Floyd.. Agosto de 1998. PC Magazine. Thomas. may 1986. Visual C++ Aplicaciones para Win 32. 1. 34 No. New York. 16 No. 5. M´exico 2004. Particular. M´exico D. November 26. C ¸ aptura de M´ ultiples Eventos MIDI en Tiempo de Ejecuci´on”. (p: 10) [2] Ceballos. pp. Javier. Javier. Fco. 394-404. R. Charles. (p: 35) [7] Pe˜ na G. pp 505-510. M´exico. 2005. 1996. LIMUSA Noriega Editores. Alfaomega Ra-Ma. M. 160 pgs. Sergio. (p: 32) [9] Petzold. Charles. AUDIO Ed.. Journal of the Audio Engeering Society. Trumansburg. vol. Programing Windows. january. Colecci´on Textos Polit´ecnicos. 1991. (p: 11) [8] Petzold. “Voltaje-Controlled Electronic Music Modules”. Microsoft Press. pp. Dispositivos Electr´ onicos. In´edita.. 974 pgs. Alfaomega Ra-Ma. Moog Co.F. M´exico 2000. ”Exploring Wave Form Audio Generating Sine Waves in Software”. (p: 28) 64 .Bibliograf´ıa [1] Berist´ain. A. 201 pgs.. Visual C++ Programaci´ on Avanzada en Win 32. 1968. (p: 36) [6] Moog Bob.

los cuales env´ıan notas musicales en forma de comandos para reproducir la m´ usica de acuerdo con la informaci´on que tiene un archivo MIDI. Generador de tonos: Dispositivo electr´onico digital que puede generar una gran variedad de sonidos musicales de acuerdo con las notas que recibe. Protocolo de comunicaciones de hardware y sof tware est´andar dise˜ nado por los fabricantes de instrumentos musicales electr´onicos. Pentagrama: Grupo de cinco l´ıneas horizontales para escribir s´ımbolos gr´aficos que tiene el lenguaje musical y que determina una melod´ıa. que puede generar una gran variedad de sonidos musicales. o tambi´en por aquellas que recibe a trav´es de su interfaz MIDI interconstruida y conectada con computadoras digitales u otros dispositivos similares. Es un sintetizador de sonidos similares a los producidos por instrumentos musicales. a computadoras digitales o cualquier otro controlador MIDI. MIDI: Musical Instrument Digital Interface. partituras. Se conecta. incluyendo toda clase de sonidos. interfaz digital para instrumentos musicales. Composici´on Asistida con Computadora. 65 . KL: Kernel for a musical Language. n´ ucleo para un lenguaje musical. u otra forma de almacenamiento digital. La salida son gr´aficas. Colecci´on de programas de sof tware agrupados en un medio ambiente de computadora digital que interact´ ua con el usuario para estudiar. simular e interpretar m´ usica de cualquier tipo. similar a un piano..) de las notas musicales (solfeo). a trav´es de la interfaz MIDI.. La entrada es un programa fuente que tiene cadenas de texto escritas en lenguaje natural (do re mi[ fa sol sil fa]. y/o el sonido de una canci´on escrita en el programa fuente. desarrollar. Las notas son activadas por el sistema de teclas.Glosario CAC: Computer Aided Composer. Compilador de estructuras musicales desarrollado por el autor para estudiar el procesamiento electr´onico de la m´ usica. Sistema de tiempo real: Dispositivo que controla una aplicaci´on dedicada la cual tiene restricciones temporales bien definidas. Sintetizador: Dispositivo electr´onico digital.

mi. Tiempo real: Momento actual de respuesta al procesamiento inmediato de datos que interact´ uan con procesos f´ısicos.250 Bauds lo que permite enviar y recibir. re. para ense˜ nar m´ usica cantando. T´ecnica de fabricaci´on de circuitos integrados electr´onicos en espacios bastantes reducidos. La velocidad de transferencia. UART: Unasynchronous Asynchronous Reciver Transmitter. cuando se utiliza en instrumentos musicales electr´onicos.Solfeo: Lenguaje natural musical. transmisor y receptor s´ıncrono as´ıncrono. la y si. sol. VLSI: Very Large Scale Integration (integraci´on a escala muy elevada). es de 32. en promedio. compuesto por las s´ılabas do. hasta 142 notas musicales en un segundo. Dispositivo electr´onico digital de comunicaciones serial que transforma datos con formato serie a paralelo para recibir o transmitir informaci´on. 66 . f a.

Φ 67 .