76
INSTITUTO POLIT ´ ECNICO NACIONAL ESCUELA SUPERIOR DE INGENIER ´ IA MECANICA Y EL ´ ECTRICA DEPARTAMENTO DE INGENIER ´ IA EN COMUNICACIONES Y ELECTR ´ ONICA ACADEMIA DE AC ´ USTICA Dise ˜ no Elemental de un Sintetizador de Notas Musicales 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 exico D.F. Octubre 2005

INSTITUTO POLITECNICO NACIONAL¶max.esimez.ipn.mx/publicas/Sintetizador.pdfAng elica Correa Cid y Alejandra Correa Cid, les agradezco por mostrarme el camino para llegar hasta donde

  • Upload
    others

  • View
    9

  • Download
    0

Embed Size (px)

Citation preview

Page 1: INSTITUTO POLITECNICO NACIONAL¶max.esimez.ipn.mx/publicas/Sintetizador.pdfAng elica Correa Cid y Alejandra Correa Cid, les agradezco por mostrarme el camino para llegar hasta donde

INSTITUTO POLITECNICO NACIONAL

ESCUELA SUPERIOR DE INGENIERIA MECANICA Y ELECTRICA

DEPARTAMENTO DE INGENIERIA EN COMUNICACIONES Y ELECTRONICA

ACADEMIA DE ACUSTICA

Diseno Elemental de un Sintetizador de Notas Musicales

T E S I S

Que para obtener el Tıtulo de

Ingeniero en Comunicaciones y Electronica

Presentan:

Victor Hugo Correa Cid

Ivan Guadalupe Contreras Mendez

Asesores:

Dr. Maximino Pena Guerrero

Ing. Jose de Jesus Negrete Redondo

Mexico D.F. Octubre 2005

Page 2: INSTITUTO POLITECNICO NACIONAL¶max.esimez.ipn.mx/publicas/Sintetizador.pdfAng elica Correa Cid y Alejandra Correa Cid, les agradezco por mostrarme el camino para llegar hasta donde

Trabajo de tesis que forma parte de los resultadosobtenidos con nuestro proyecto de investigacion, MAN:Red Internet II de Audio Multimedia con Servidores yClientes Incrustados, numero de registro 20040733 asig-nado por la Coordinacion General de Posgrado e Investi-gacion del Instituto Politecnico Nacional durante febrero2004 a marzo 2005, desarrollado en el laboratorio de laacademia de acustica de la ESIME Zacatenco, y dirigidopor el Dr. Maximino Pena Guerrero.

ii

Page 3: INSTITUTO POLITECNICO NACIONAL¶max.esimez.ipn.mx/publicas/Sintetizador.pdfAng elica Correa Cid y Alejandra Correa Cid, les agradezco por mostrarme el camino para llegar hasta donde

iii

Page 4: INSTITUTO POLITECNICO NACIONAL¶max.esimez.ipn.mx/publicas/Sintetizador.pdfAng elica Correa Cid y Alejandra Correa Cid, les agradezco por mostrarme el camino para llegar hasta donde

RESUMEN

Actualmente los sintetizadores son instrumentos musicales que generan sonidos

controlando osciladores electronicos con un teclado de piano, o bien con dispositivos

electronicos digitales o analogicos. De esta forma es posible crear nuevos sonidos, o

bien sintetizar por ejemplo el sonido de una trompeta, flauta, o un saxofon. Para

lograr un sonido particular, la forma de onda que producen estos osciladores se puede

modificar cambiando los parametros que definen una nota musical (frecuencia), su

volumen (amplitud), y el timbre que permite identificar un instrumento de otro (fase

y cantidad de armonicos).

Esta tesis presenta el diseno basico de un sintetizador electronico digital de notas

musicales. Las caracterısticas que lo definen se describen dentro de un programa

que corre en una PC (Personal Computer). Nuestro sintetizador trabaja con base

en las series matematicas de Fourier. Sus “osciladores” son generadores de formas

de onda simples (funciones seno), los cuales se pueden modificar (timbre de una

nota) con barras y controles graficos en la pantalla de la computadora. La frecuencia

fundamental (nota) del conjunto de osciladores del sintetizador es controlada con

un teclado virtual de 12 notas, las cuales simulan las teclas fısicas de un piano de

concierto.

Los resultados que se obtienen son: nuestro sintetizador funcionando en un am-

biente grafico que genera un programa en Visual C++.NET y que tambien muestra

una serie de ventanas, las cuales contienen las formas de onda de los osciladores;

asımismo, un teclado grafico y barras que controlan la amplitud y frecuencia de los

osciladores. Por otra parte, el sonido que se produce cuando se activan las teclas

del sintetizador es reproducido con el sistema de audio estandar de la computadora.

Cabe mencionar que solo utilizamos seis osciladores, pero que esta restriccion, no ha

impedido la investigacion del funcionamiento basico de dicho dispositivo.

iv

Page 5: INSTITUTO POLITECNICO NACIONAL¶max.esimez.ipn.mx/publicas/Sintetizador.pdfAng elica Correa Cid y Alejandra Correa Cid, les agradezco por mostrarme el camino para llegar hasta donde

OBJETIVO

Disenar un sintetizador basico de notas musicales para PC (Personal Computer),

utilizando algoritmos de programacion (en Visual C++.NET) y metodos numericos.

JUSTIFICACION

En la actualidad existen varios tipos de modelos de sintetizadores por hardware,

con los cuales es posible obtener sonidos de diversos instrumentos musicales, sin em-

bargo, para esto se necesita de multiples elementos electronicos, por lo que pueden

llegar hacer enormes, ocupar grandes espacios, ser estorbosos y poco practicos para

los usuarios. Al darnos cuenta de lo anterior observamos que un modelo por software

puede igualar o incluso superar a un modelo por hardware, ya que si se cuenta con una

PC, un musico o cualquier persona, puede tener acceso a un sintetizador en lugares

que normalmente no seria posible (avion, tren, autobus, etc.).

v

Page 6: INSTITUTO POLITECNICO NACIONAL¶max.esimez.ipn.mx/publicas/Sintetizador.pdfAng elica Correa Cid y Alejandra Correa Cid, les agradezco por mostrarme el camino para llegar hasta donde

Agradecimientos

A mis padres:

Marıa Magdalena Cid Flores y Salomon Correa Medina, quienes con su apoyo

constante me han dado fuerzas para seguir adelante y nunca detenerme. Se que no

necesito escribir todo lo que significan para mı, pero quiero que sepan que siempre

estare para ustedes, ası como ustedes siempre han estado para mı. Nunca olviden que

los amo.

A mis hermanas:

Angelica Correa Cid y Alejandra Correa Cid, les agradezco por mostrarme el

camino para llegar hasta donde estoy, ya que sin su ejemplo y apoyo nunca lo hubiera

logrado. No encuentro palabras para expresar la bendicion que significa tener unas

hermanas como ustedes.

A mis profesores:

Agradezco a todos mis profesores, pero en especial al Dr. Maximino Pena Guerrero

y al Ing. Jose de Jesus Negrete Redondo, quienes me confiaron este trabajo de tesis

y me impulsaron a cumplir con el objetivo. Espero no haberlos defraudado!!!.

A la Virgen de Guadalupe:

Por que siempre estas cuando te necesito y se que ahı seguiras!!!.

Victor Hugo Correa Cid

vi

Page 7: INSTITUTO POLITECNICO NACIONAL¶max.esimez.ipn.mx/publicas/Sintetizador.pdfAng elica Correa Cid y Alejandra Correa Cid, les agradezco por mostrarme el camino para llegar hasta donde

”El hombre es el unico ser de la naturalezaque tiene conciencia de que va a morir,por eso —y solo por eso— tengo un pro-fundo respeto por la raza humana, y creoque en un futuro sera mucho mejor queen el presente. Aun sabiendo que sus dıasestan contados y que todo acabara cuandomenos se lo espera, hace de la vida unalucha digna de un ser eterno. Lo que laspersonas llaman vanidad —dejar obras,hijos, hacer que su nombre no se olvide—yo lo considero la maxima expresion de ladignidad humana.

Paulo Coelho

El Peregrino (Diario de un mago).

vii

Page 8: INSTITUTO POLITECNICO NACIONAL¶max.esimez.ipn.mx/publicas/Sintetizador.pdfAng elica Correa Cid y Alejandra Correa Cid, les agradezco por mostrarme el camino para llegar hasta donde

Agradezco infinitamente a Dios por darme la oportunidad de; vivir en este tiempo

y conocer a las personas que han marcado mi vida para siempre. A todas esas personas

gracias, por compartir conmigo momentos de alegrıas y tristezas.

A mis padres, Julia Mendez y Silvestre Contreras les agradezco el apoyo y pacien-

cia que me han brindando durante todos estos anos. Ası como tambien agradezco a

mi hermana Veronica que me brindo su apoyo en lo que necesitaba. Y muy especial-

mente le agradezco a mi abuela Delfina Hernandez (q.p.d), que en vida siempre se

preocupo por mis estudios y mi bienestar. No podıa faltar toda mi gratitud a, mi tıa

Marıa de la Cruz Mendez, a mi tıo Benito Cureno Mendez y familia.

A mis amigos: Arturo Inigo, Arturo Nava, Raul Hernandez, Leonel Rios y Denys

Basurto, humildemente les agradezco su confianza, su amistad y su companıa durante

todos estos anos. De la misma manera agradezco a: Lalo, Ulises, Oscar, Chucho,

Moreno, Hugo, Karla y Cristina, porque con todos ellos compartı momentos muy

agradables y siempre conte con ellos en los momentos difıciles.

Quiero brindarles toda mi gratitud y respeto a mis profesores, que saben valorar

su profesion y dıa con dıa dan lo mejor de sı mismos. Muy en especialmente al Dr.

Maximino Pena Guerrero y al Ing. Jose de Jesus Negrete Redondo, por la confianza

y el apoyo para la realizacion de esta tesis, igualmente a mis amigos Victor Hugo

Correa y Juan Simuta.

Al Instituto Politecnico Nacional y a la E.S.I.M.E.-Zacatenco... ¡simplemente mil

gracias! porque en ellos no solamente aprendı; matematicas y fısica, tambien aprendı;

que un buen ser humano es; humilde, sencillo y respeta al projimo.

Ivan Guadalupe Contreras Mendez.

viii

Page 9: INSTITUTO POLITECNICO NACIONAL¶max.esimez.ipn.mx/publicas/Sintetizador.pdfAng elica Correa Cid y Alejandra Correa Cid, les agradezco por mostrarme el camino para llegar hasta donde

Quien ama la ciencia, la co-rreccion ama; mas aquel que escomo bruto, odia el reproche.

(Proverbios 12, 1)

Para el necio es recto su camino; masel hombre prudente oye el consejo.

(Proverbios 12, 15)

Hay quienes pretenden ser ricos,sin tener nada; hay quienes pre-tenden ser pobres, siendo muy ricos.

(Proverbios 13, 7)

ix

Page 10: INSTITUTO POLITECNICO NACIONAL¶max.esimez.ipn.mx/publicas/Sintetizador.pdfAng elica Correa Cid y Alejandra Correa Cid, les agradezco por mostrarme el camino para llegar hasta donde

Indice general

1. Introduccion 5

1.1. Antecedentes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

1.2. Nuestro trabajo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

1.3. Organizacion del documento . . . . . . . . . . . . . . . . . . . . . . . 7

2. Instrumentos Musicales Electronicos y Digitales 9

2.1. Principios de funcionamiento . . . . . . . . . . . . . . . . . . . . . . . 9

2.2. El sintetizador como instrumento musical . . . . . . . . . . . . . . . . 11

2.3. Metodos de programacion de nuestro sistema . . . . . . . . . . . . . . 12

2.4. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

3. Aspectos del Diseno de Sintetizadores de Musica 17

3.1. Generadores electronicos de formas de onda . . . . . . . . . . . . . . 17

3.2. Tipos de osciladores . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

3.3. Anatomıa de un sintetizador . . . . . . . . . . . . . . . . . . . . . . . 20

3.4. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

4. Diseno de Nuestro Sintetizador de Notas 25

4.1. Computadoras digitales . . . . . . . . . . . . . . . . . . . . . . . . . . 25

4.2. Estructuras del controlador (driver) de sonido . . . . . . . . . . . . . 27

4.3. Programacion de las funciones de onda . . . . . . . . . . . . . . . . . 31

4.4. Visualizacion de las formas de onda . . . . . . . . . . . . . . . . . . . 33

4.5. Anatomıa de una tarjeta de sonido . . . . . . . . . . . . . . . . . . . 35

4.6. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

5. Diseno de la Interfaz Grafica 37

5.1. Pixeles y mapas de bits . . . . . . . . . . . . . . . . . . . . . . . . . . 37

5.2. Ventanas, barras, y otros controles graficos . . . . . . . . . . . . . . . 38

5.3. Programando la interfase grafica . . . . . . . . . . . . . . . . . . . . . 38

5.4. Programando el controlador driver de sonido . . . . . . . . . . . . . . 48

1

Page 11: INSTITUTO POLITECNICO NACIONAL¶max.esimez.ipn.mx/publicas/Sintetizador.pdfAng elica Correa Cid y Alejandra Correa Cid, les agradezco por mostrarme el camino para llegar hasta donde

5.5. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50

6. Pruebas y Resultados 51

6.1. Ambiente de compilacion y generacion de codigo . . . . . . . . . . . . 51

6.2. Aspecto visual del sintetizador . . . . . . . . . . . . . . . . . . . . . . 53

6.3. Control de parametros del sintetizador . . . . . . . . . . . . . . . . . 54

6.4. Controlando los armonicos . . . . . . . . . . . . . . . . . . . . . . . . 55

6.5. Control del teclado . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57

6.6. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58

7. Conclusiones y Trabajos Futuros 59

7.1. Trabajos Futuros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61

2

Page 12: INSTITUTO POLITECNICO NACIONAL¶max.esimez.ipn.mx/publicas/Sintetizador.pdfAng elica Correa Cid y Alejandra Correa Cid, les agradezco por mostrarme el camino para llegar hasta donde

Indice de figuras

3.1. Sintetizador elemental . . . . . . . . . . . . . . . . . . . . . . . . . . 21

4.1. Numero de muestras por cada ciclo. . . . . . . . . . . . . . . . . . . . 32

4.2. Representacion grafica de la Serie de Fourier, mediante un programa

disenado en C++. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

4.3. Diagrama a bloques de una tarjeta de sonido. . . . . . . . . . . . . . 36

5.1. Jerarquıa de ventanas. . . . . . . . . . . . . . . . . . . . . . . . . . . 39

5.2. Interfaz grafica de la aplicacion. . . . . . . . . . . . . . . . . . . . . . 40

6.1. Vista principal del sintetizador. . . . . . . . . . . . . . . . . . . . . . 52

6.2. Valores mınimo, central y maximo de la barra horizontal. . . . . . . . 53

6.3. Barras de desplazamiento verticales, con una amplitud modificada. . . 54

6.4. Tercer armonico con amplitud modificada. . . . . . . . . . . . . . . . 55

6.5. Quinto armonico con amplitud modificada. . . . . . . . . . . . . . . . 56

6.6. Todos los armonicos modificados . . . . . . . . . . . . . . . . . . . . . 56

6.7. Vista del Teclado. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57

6.8. a)Tecla en reposo. b)Tecla pulsada. . . . . . . . . . . . . . . . . . . . 58

3

Page 13: INSTITUTO POLITECNICO NACIONAL¶max.esimez.ipn.mx/publicas/Sintetizador.pdfAng elica Correa Cid y Alejandra Correa Cid, les agradezco por mostrarme el camino para llegar hasta donde

Indice de tablas

6.1. Valores de las barras de desplazamiento . . . . . . . . . . . . . . . . . 58

4

Page 14: INSTITUTO POLITECNICO NACIONAL¶max.esimez.ipn.mx/publicas/Sintetizador.pdfAng elica Correa Cid y Alejandra Correa Cid, les agradezco por mostrarme el camino para llegar hasta donde

Capıtulo 1

Introduccion

1.1. Antecedentes

Un dispositivo que genera los sonidos a partir de la combinacion de elementos

simples (normalmente senales periodicas y funciones matematicas) es conocido como

sintetizador. Con este artefacto se pueden crear nuevos sonidos ası como reproducir

los de los instrumentos musicales conocidos, la forma de la onda generada, es al-

terada en su duracion, altura y timbre, mediante el uso de dispositivos tales como

amplificadores, mezcladores, filtros, reverberadores, secuenciadores y moduladores de

frecuencia. Para encontrar los primeros sintetizadores de sonido debemos remontarnos

a 1906, ano de invencion del Telharmonium, mientras que en los anos veinte surge el

Theremin. Estos primeros aparatos eran analogicos y utilizaban osciladores electricos

como fuente sonora.

Sin embargo fue en la decada de 1960 que aparecio uno de los sintetizadores mas

famosos, el Moog, llamado ası por su inventor, el ingeniero estadounidense Robert

Moog. Este se controla con uno o mas teclados y con el es posible crear un numero

casi infinito de sonidos y pueden imitarse muchos instrumentos. El sintetizador Moog

no tiene memoria, lo que significa mover cerca de 60 botones para lograr el sonido

de algun instrumento, como un violın o una trompeta. Las posiciones de los botones

se apuntan en un cuaderno, ya que para hacer el sonido de un instrumento deben

desorganizarse las posiciones del instrumento anterior.

5

Page 15: INSTITUTO POLITECNICO NACIONAL¶max.esimez.ipn.mx/publicas/Sintetizador.pdfAng elica Correa Cid y Alejandra Correa Cid, les agradezco por mostrarme el camino para llegar hasta donde

Una de las controversias que se han tenido en los ultimos anos, es si los sinte-

tizadores por software podıan desplazar a los modelos por hardware. Viendo que el

sonido de algunos modelos software, los han ido igualando, se decıa que la falta de

control sobre sus parametros, el hecho de tener fastuosos interfaces de pantalla pero

ningun potenciometro a mano, los ponıan en clara desventaja. Sin embargo hay que

decir que la mayorıa de los modelos digitales y estaciones de trabajo que se usan

actualmente, tienen complejas arquitecturas y grandes cantidades de parametros que

imposibilitan construir paneles de potenciometros que cubran todas las opciones (a

no ser que midiesen un par de metros cuadrados). De esta manera hay que tener

en cuenta, que en general las arquitecturas de los modelos por software actuales son

mucho mas amplias y ambiciosas.

1.2. Nuestro trabajo

Lo anterior expuesto nos llevo a crear el diseno basico de un sintetizador ele-

mental para PC (Personal Computer), el cual se basa en la manipulacion de senales

analogicas, llamadas formas de onda, que en nuestro caso seran de tipo sinusoidal.

Estas senales seran manipuladas mediante un proceso para obtener sonido por medio

de una sıntesis, llamado series de fourier. De esta manera sumando las salidas de

varios osciladores de forma de onda sinusoidal, se obtendran diversos timbres, segun

la amplitud que se le da a la frecuencia fundamental (la nota) y sus armonicos (notas

multiplos de la fundamental), los cuales permiten diferenciar un timbre de otro, por

ejemplo un violın de una flauta.

En la actualidad existen diferentes software que se enfocan en el desarrollo de

aplicaciones para Windows, tales como: C, C++, Borland, entre otros. Sin embargo,

las aplicaciones utilizadas en Windows, eran sencillas de usar para el usuario pero

difıciles de desarrollar para el programador. Por este motivo en febrero de 1993,

fue introducido uno de los mas conocidos y eficientes lenguajes de programacion

orientada a objetos, Visual C++, el cual ha ido evolucionando hasta llegar a su mas

6

Page 16: INSTITUTO POLITECNICO NACIONAL¶max.esimez.ipn.mx/publicas/Sintetizador.pdfAng elica Correa Cid y Alejandra Correa Cid, les agradezco por mostrarme el camino para llegar hasta donde

reciente version, Visual C++ .Net o version 7 del mismo. Desarrollar aplicaciones en

un entorno de este tipo se vuelve una tarea un poco mas sencilla, el programador puede

crear la interfaz grafica (ventanas, barras de desplazamiento, botones, entre otras

cosas), sin necesidad de escribir nada de codigo. Tomando en cuenta lo anterior hemos

decidido usar para el desarrollo de este sintetizador, el software antes mencionado,

Visual C++ .Net.

1.3. Organizacion del documento

Esta tesis se encuentra estructurada de la siguiente manera. El capıtulo 2 presenta

los conceptos basicos que deben ser tomados en cuenta, para el desarrollo de nuestro

sintetizador, tales como: sonido, tipos de sıntesis, generacion de sonido en PC’s, entre

otros. El capıtulo 3 presenta los aspectos de diseno para el desarrollo de nuestro

sintetizador, de esta forma tomamos en cuenta el funcionamiento de los dispositivos

que pueden ser empleados para generar formas de onda (osciladores), tales como: los

tipo Hartley, Colpitts, LC, RC, VCO, 555, entre otros. Cabe mencionar que los disenos

anteriores son de caracter explicativo, ya que no seran implementados en nuestro

diseno. El capıtulo 4 presenta el proceso de diseno de las sıntesis de ondas, en el que

veremos las estructuras de audio mas importantes utilizadas para la comunicacion

entre el software y la tarjeta de sonido de la PC. Al mismo tiempo desarrollaremos

y explicaremos la funcion encargada de realizar la sıntesis de ondas, almacenandolas

en un buffer de audio. El capıtulo 5 presenta el diseno de la interfaz grafica, donde se

explicara paso a paso los diferentes puntos a seguir para el desarrollo del software y

definiremos algunos conceptos basicos tales como pıxel, mapa de bits, recurso grafico,

entre otros, necesarios para su mejor comprension. El capıtulo 6 presenta algunas

pruebas y resultados de nuestro proyecto final, describiremos su operacion y la forma

de obtener un archivo ejecutable del proyecto, para que este sea universal. Por ultimo

el capıtulo 7 presenta las conclusiones a las que llegamos al termino de este proyecto,

ası como algunas propuestas para la mejora del mismo.

7

Page 17: INSTITUTO POLITECNICO NACIONAL¶max.esimez.ipn.mx/publicas/Sintetizador.pdfAng elica Correa Cid y Alejandra Correa Cid, les agradezco por mostrarme el camino para llegar hasta donde

Φ

8

Page 18: INSTITUTO POLITECNICO NACIONAL¶max.esimez.ipn.mx/publicas/Sintetizador.pdfAng elica Correa Cid y Alejandra Correa Cid, les agradezco por mostrarme el camino para llegar hasta donde

Capıtulo 2

Instrumentos MusicalesElectronicos y Digitales

En este capıtulo trataremos algunos conceptos que son basicos para la comprension

de los demas capıtulos, como son ondas sonoras, caracterısticas del sonido, armonicos,

analisis de Fourier, sintetizadores, tecnicas de sıntesis, muestreo, modulacion, ge-

neracion de sonido en PC (Personal Computer), captura de sonido y lenguajes de

programacion.

2.1. Principios de funcionamiento

Cuando un cuerpo es excitado de alguna manera, las moleculas 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, a esto se le conoce

como Sonido. A partir de este movimiento se desarrolla una onda sonora, cuando al

moverse las moleculas que estan en contacto con la fuente, ponen en movimiento a las

que se encuentran a continuacion y estas a su vez a las siguientes, produciendo una

reaccion en cadena y que continua de acuerdo al movimiento de la fuente en ambas

direcciones, generando aumento y disminucion de presion, haciendo que su efecto se

propague en todas direcciones.

Las principales caracterısticas del sonido son: frecuencia, amplitud, tono y timbre.

La frecuencia, es el numero de oscilaciones que se cumplen en un segundo dentro de

9

Page 19: INSTITUTO POLITECNICO NACIONAL¶max.esimez.ipn.mx/publicas/Sintetizador.pdfAng elica Correa Cid y Alejandra Correa Cid, les agradezco por mostrarme el camino para llegar hasta donde

un movimiento vibratorio y es expresada en Hertz (Hz.), las frecuencias que percibe

el oıdo humano se encuentran entre los 20 Hz y 20,000 Hz. La amplitud esta definida,

como el grado de movimiento de las moleculas de aire en una onda. El tono nos permite

diferenciar un sonido grave de un sonido agudo, mientras mas ciclos completos ocurren

mas alto sera el tono. El timbre, es el atributo de la sensacion auditiva por el cual,

un escucha puede juzgar dos sonidos similares como diferentes entre sı [1].

Existen diferentes formas de onda, como la onda sinusoidal, cuadrada, diente

de sierra, etc, estas ondas nos permiten distinguir una nota musical de la misma

frecuencia e intensidad, producida por instrumentos diferentes. La forma de onda

viene determinada por una serie de vibraciones subsidiarias, que acompanan a una

vibracion primaria o fundamental del movimiento ondulatorio (especialmente en los

instrumentos musicales) llamados armonicos. Normalmente al hacer vibrar un cuerpo,

no obtenemos un sonido puro, sino un sonido compuesto de sonidos de diferentes

frecuencias. La frecuencia de los armonicos, siempre es un multiplo de la frecuencia

mas baja, llamada frecuencia fundamental o primer armonico.

En 1807, el matematico frances Joseph Fourier (1768-1830), envio un artıculo a

la Academia de Ciencias en Parıs. En el, presentaba una descripcion matematica de

problemas relacionados con la conduccion de calor. Una de las sorprendentes ramifica-

ciones del trabajo de Fourier, fue que muchas de las funciones mas conocidas podıan

expandirse en series infinitas e integrales que involucraban funciones trigonometricas,

llamadas series de Fourier. La idea es importante hoy en dıa, en el modelamiento de

muchos de los fenomenos en Fısica e Ingenierıa.

Un metodo matematico para obtener el espectro de potencia, como funcion de la

frecuencia para una forma de onda de la senal dada, es la transformada de Fourier,

que es utilizada para transformar una senal representada en el dominio del tiempo, al

dominio de la frecuencia, sin alterar su contenido de informacion, solamente es una

forma diferente de representarla.

Astronomo y matematico aleman nacido en Minden, Friedrich Bessel (1784-1846),

10

Page 20: INSTITUTO POLITECNICO NACIONAL¶max.esimez.ipn.mx/publicas/Sintetizador.pdfAng elica Correa Cid y Alejandra Correa Cid, les agradezco por mostrarme el camino para llegar hasta donde

introdujo en matematicas las funciones de Bessel como solucion a ciertas ecuaciones

diferenciales. Las funciones son de gran importancia para determinar la distribucion

y el flujo del calor o la electricidad, y para la solucion de problemas relacionados con

el movimiento ondulatorio, la elasticidad y la hidrodinamica.

Llamadas funciones Splines, su gran popularidad se debe a que sus propiedades las

hacen ideales, para atacar problemas muy variados en diversas areas de la matematica,

tambien son muy utiles en el diseno grafico y en la solucion numerica de ecuaciones

diferenciales.

Constituye un proceso importante en diferentes areas de la ingenierıa, la con-

volucion representa una operacion y un concepto matematico, que constituyen una

aplicacion que permite la obtencion, de una solucion real que plantea la transmision de

informacion, la interaccion de dos cantidades en el tiempo y espacio, es la convolucion

de esas dos cantidades.

2.2. El sintetizador como instrumento musical

Aparecido en la decada de los sesentas, el sintetizador, es un dispositivo electronico

digital similar a un piano, que puede generar una gran variedad de sonidos musicales.

Se denominan sintetizadores porque obtienen el sonido por medio de una sıntesis

(proceso artificial), la cual se puede realizar por diferentes medios. Por ejemplo, los

primeros sintetizadores se basaban en la teorıa del analisis de Fourier y sumando

las salidas de varios osciladores de forma de onda senoidal, obtenıan diversos timbres

segun la amplitud que se le daba a la frecuencia fundamental (la nota) y sus armonicos.

Tambien utilizaban formas de onda del tipo diente de sierra, triangular y cuadrada,

cada una de las cuales tiene un rico y particular contenido armonico [7].

Robert Moog, construyo el primer sintetizador analogico que aun lleva su nombre,

el clasico Moog, el cual es un generador electronico de formas de onda, que puede

producir casi cualquier clase de senal periodica de audiofrecuencia.

Actualmente podemos encontrar diversas formas de generar senales de audio, a

11

Page 21: INSTITUTO POLITECNICO NACIONAL¶max.esimez.ipn.mx/publicas/Sintetizador.pdfAng elica Correa Cid y Alejandra Correa Cid, les agradezco por mostrarme el camino para llegar hasta donde

continuacion mencionaremos las mas conocidas tecnicas de sıntesis: 1) Sıntesis Adi-

tiva, parte de la idea contenida en el teorema de Fourier, segun la cual todo sonido

periodico, por complejo que sea, es el resultante de la suma de ondas sinusoidales

sencillas de frecuencias multiplo, de una frecuencia base. El proceso de esta sıntesis,

fabrica sonidos mediante el modelo matematico, buscando la composicion armonica;

partiendo de pequenas series armonicas y precisando la frecuencia y la amplitud de

cada componente en cada instante. 2) Sıntesis Analoga o Substractiva, es la opcion

mas antigua y duradera, se fundamenta en lo contrario de la aditiva, en lugar de

ensamblar un sonido a partir de sus componentes, se sintetiza el resultado eliminando

los componentes no deseados de un sonido parcial muy rico.

La idea esencial es poder representar las variaciones de presion del sonido, en

forma de variaciones de tension. Los timbres se obtienen a partir de formas de onda

complejas (ricas en armonicos) a las que se les sustraen, mediante filtros, ciertas partes

de su estructura armonica. 3) Sıntesis Virtual, nace como la fusion de tres desarrollos

tecnicos de dinamica relacion, primero la formal constitucion del sintetizador como

instrumento expresivo y la busqueda de nuevas posibilidades para generar sonido,

segundo, el constante desarrollo de microchips, unidades complejas de circuitos di-

gitales, computacion multimedia y finalmente el desarrollo de sofisticadas piezas de

software, encontrandose ası, que una computadora posee las caracterısticas necesarias

para generar audio, modularlo y que es posible usar sonido previamente digitalizado

(samples).

2.3. Metodos de programacion de nuestro sistema

Para la generacion de sonido en la PC (Personal Computer) existen tecnicas uti-

lizadas en la Multimedia, multi (variedad) y media (medios). Se ha definido como

la herramienta que emplea la PC para integrar y controlar diferentes sistemas elec-

tronicos tales como: videodiscos, videocamaras, videocasetes, sintetizadores de video

y audio, etc. Podemos mencionar que en un entorno multimedia, los elementos basicos

12

Page 22: INSTITUTO POLITECNICO NACIONAL¶max.esimez.ipn.mx/publicas/Sintetizador.pdfAng elica Correa Cid y Alejandra Correa Cid, les agradezco por mostrarme el camino para llegar hasta donde

de hardware son: 1) La unidad de CD-ROM (Compact Disc Read Only Memory) y

2) La tarjeta de sonido.

Se pueden utilizar diferentes tecnicas de programacion, para controlar los dispo-

sitivos multimedia sin ningun tipo de limitacion. Por ejemplo, para tener acceso a

la unidad de CD-ROM o a la tarjeta de sonido, el hardware, y los controladores de

los dispositivos a utilizar, deberan estar instalados y configurados para la PC. La

siguiente lista menciona el hardware que es necesario para los tipos de dispositivos

MCI (Media Control Interfase) mas utilizados en el ambiente de programacion Visual

C++: 1) El CD de audio es controlado por la unidad de CD-ROM, 2) El secuenciador

es controlado por la tarjeta de sonido, 3) El audio por forma de onda es controlado

por la tarjeta de sonido.

Para la administracion de recursos multimedia de una forma apropiada, deben

cerrarse los dispositivos MCI que se encuentren abiertos antes de salir de la aplicacion

o cerrar la ventana que contiene dichos dispositivos, podemos utilizar para ello la

funcion OnDestroy con el mensaje SetCommand (close). Estas son las principales

instrucciones, que se utilizan para cancelar la reproduccion de audio y video [2].

En algoritmos computacionales a la representacion electrica del sonido, se le conoce

como Audio. En el proceso de conversion de la forma analoga a la forma digital de una

senal y viceversa aparecen tres terminos matematicos: 1)el muestreo, 2)la cuantizacion

y 3)la codificacion. El muestreo, es el proceso de tomar medidas instantaneas de una

senal analoga cambiante en el tiempo, tal como la amplitud de una forma de onda

compleja, el Teorema de Muestreo o Teorema de Nyquist, establece que es posible

capturar toda la informacion de la forma de onda, si se utiliza una frecuencia de

muestreo del doble de la frecuencia mas elevada contenida en la forma de onda. La

cuantizacion, es el siguiente proceso para la reduccion de la senal analoga compleja;

este permite aproximar la muestra a uno de los niveles de una escala designada. La

codificacion, es la representacion de informacion analogica en una senal digital.

El sistema PCM (Modulacion por codificacion de Pulsos) convierte la informacion

13

Page 23: INSTITUTO POLITECNICO NACIONAL¶max.esimez.ipn.mx/publicas/Sintetizador.pdfAng elica Correa Cid y Alejandra Correa Cid, les agradezco por mostrarme el camino para llegar hasta donde

de dos canales de audio a forma digital. Una portadora puede modularse de diferentes

modos, dependiendo del parametro de la misma sobre el que se actue. Se modula en

amplitud (AM) una onda que llamaremos portadora, 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 maximo o mınimo se altera. La modulacion de frecuencia (FM) consiste en

variar la frecuencia de la onda portadora de acuerdo con la intensidad de la onda de

informacion. La amplitud de la onda modulada es constante e igual que la de la onda

portadora.

Para el procesamiento informatico del sonido es necesario realizar su captura me-

diante una PC y almacenarlo en memoria o disco. El proceso basico para la captura de

sonido es el siguiente: 1) El sonido se transmite por el aire hasta el microfono, el cual

transforma la senal acustica a niveles electricos, 2) La senal analogica pasa a traves

de un convertidor analogico/digital. Sus caracterısticas establecen la frecuencia y el

numero de bits por cada muestra, 3) Mediante un canal se copia cada muestra a la

memoria de la PC.

Cualquier lenguaje artificial que puede utilizarse para definir, una secuencia de

instrucciones para su procesamiento por una computadora, es llamado lenguaje de

programacion. Vistos a muy bajo nivel, los microprocesadores procesan exclusiva-

mente senales electronicas binarias (0 y 1). Dar una instruccion a un microprocesador,

es en realidad enviar series de unos y ceros con un espacio en el tiempo de una forma

determinada. Esta secuencia de senales se denomina codigo de maquina. El codigo

representa datos, numeros e instrucciones para manipularlos. Una manera mas facil

de comprender el codigo de maquina es dando a cada instruccion un mnemonico, como

por ejemplo STORE, ADD o JUMP. Esta abstraccion da como resultado el lenguaje

ensamblador, el cual es de muy bajo nivel y es especıfico de cada microprocesador.

Hay un alto nivel de abstraccion entre lo que se pide a la computadora y lo que

realmente comprende. Existe tambien una relacion compleja entre los lenguajes de

alto nivel y el codigo de maquina. Los lenguajes de alto nivel son normalmente faciles

14

Page 24: INSTITUTO POLITECNICO NACIONAL¶max.esimez.ipn.mx/publicas/Sintetizador.pdfAng elica Correa Cid y Alejandra Correa Cid, les agradezco por mostrarme el camino para llegar hasta donde

de comprender, porque estan formados por elementos de lenguajes naturales, como

el ingles. En BASIC, el lenguaje de alto nivel mas conocido, 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.

Por otra parte, el lenguaje de programacion C, fue desarrollado en 1972 por el

estadounidense Dennis Ritchie en los laboratorios Bell, el cual es un lenguaje de

programacion de proposito general que ofrece; economıa de sıntesis, control de flujo,

estructuras sencillas y un buen conjunto de operadores, tiene un campo de aplicacion

ilimitado por que no es un lenguaje de muy alto nivel, mas bien es pequeno y sencillo

y no esta especializado en ningun tipo de aplicacion, esto lo hace un lenguaje potente,

y se aprende en poco tiempo. Ahora hablemos del lenguaje C++, que es una version

orientada a objetos del lenguaje de programacion llamado C, este fue desarrollado

por Bjarne Stroustrup a comienzos de la decada de 1980 en los laboratorios Bell.

Ası mismo, en febrero de 1993, fue creado Microsoft Visual C++ 1.0, el cual

es un entorno de desarrollo disenado especialmente para crear aplicaciones graficas

orientadas a objetos, introduce la biblioteca MFC (Microsoft Foundation Class). Ac-

tualmente se cuenta con la version Visual C++.Net, la cual cuenta con una mayor

integracion; MFC, ATL (Active Template Library) y una nueva clase de servicios

web, convirtiendose en el entorno de desarrollo, si se quiere combinar el control y

el rendimiento de C++ con la compatibilidad con windows y el entorno .Net, tam-

bien permite numerosas caracterısticas de nivel profesional y con el podemos crear

aplicaciones para windows y la web muy eficaces.

Ahora hablaremos del sistema unix, el cual es un sistema operativo multitarea

y multiusuario. Esto quiere decir que el sistema puede ejecutar varios programas a

la vez, y que puede gestionar a varios usuarios simultaneamente. Fue desarrollado

originalmente por Ken Thompson y Dennis Ritchie en los laboratorios Bell en el

ano de 1969. Unix tiene diversas variantes (p.e. Linux) y se considera potente, mas

transportable e independiente de equipos concretos que otros sistemas operativos,

15

Page 25: INSTITUTO POLITECNICO NACIONAL¶max.esimez.ipn.mx/publicas/Sintetizador.pdfAng elica Correa Cid y Alejandra Correa Cid, les agradezco por mostrarme el camino para llegar hasta donde

porque esta escrito en lenguaje C.

2.4. Resumen

En el desarrollo de este capıtulo tratamos conceptos basicos como: ondas sonoras,

caracterısticas del sonido, armonicos, analisis de Fourier, sintetizadores, tecnicas de

sıntesis, muestreo, modulacion, generacion de sonido en PC, captura de sonido y

lenguajes de programacion (C, C++, Visual C++, Unix).

16

Page 26: INSTITUTO POLITECNICO NACIONAL¶max.esimez.ipn.mx/publicas/Sintetizador.pdfAng elica Correa Cid y Alejandra Correa Cid, les agradezco por mostrarme el camino para llegar hasta donde

Capıtulo 3

Aspectos del Diseno deSintetizadores de Musica

En este capıtulo presentaremos los aspectos de diseno de sintetizadores de musica,

ya que es necesario conocer su funcionamiento antes de ser implementado en algorit-

mos computacionales, por lo que mencionaremos varios tipos de osciladores basicos,

los cuales usan transistores y amplificadores operacionales, tales como: osciladores

RC, LC, VCO, Colpitts, Clapp, Hartley y el circuito integrado 555, describiendo cada

uno de ellos.

3.1. Generadores electronicos de formas de onda

Un oscilador, es un circuito que produce una forma de onda repetitiva en su salida,

con solo el voltaje de alimentacion de DC (Direct Current) como entrada, no requiere

de una senal de entrada repetitiva. Diferentes tipos de osciladores producen diversos

tipos de salidas, incluyendo ondas sinusoidales, cuadradas, triangulares y de diente

de sierra, estos se aplican ampliamente en casi todos los sistemas de comunicacion,

sistemas digitales y computadoras para generar frecuencias y senales de sincronizacion

requeridas. Un oscilador basico consta de: 1) Un amplificador para obtener la ganancia

(transistor o amplificador operacional) y 2) Un circuito de realimentacion positiva,

que produce desfasamiento y nos introduce atenuacion [4].

Mencionaremos ahora los principios de los osciladores: 1) La realimentacion po-

17

Page 27: INSTITUTO POLITECNICO NACIONAL¶max.esimez.ipn.mx/publicas/Sintetizador.pdfAng elica Correa Cid y Alejandra Correa Cid, les agradezco por mostrarme el camino para llegar hasta donde

sitiva, se caracteriza por la condicion en que una parte del voltaje de salida de un

amplificador, se realimenta a la entrada sin desfasamiento neto, con esto se reforza la

senal de salida, esto es, se crea un lazo en donde la senal se sostiene a sı misma y se

produce una salida en forma sinusoidal continua, por lo tanto se produce la oscilacion.

2) Las condiciones para que ocurra la oscilacion son dos: la primera, el desfasamiento

alrededor del lazo de realimentacion debe ser 0◦, la segunda, la ganancia de volta-

je alrededor del lazo cerrado de realimentacion debe ser igual a la unidad. Y 3) La

condicion de arranque dice; que para que se inicie la oscilacion, la ganancia de voltaje

alrededor del lazo de realimentacion positiva debe ser mayor que 1, de tal manera

que para que la amplitud de salida pueda alcanzar un nivel deseado, la ganancia debe

decrecer enseguida hasta 1, con el fin de conservar ese nivel.

3.2. 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, su parte fundamental es una red de adelanto-atraso formada por

resistencias y capacitores y que se usa en el lazo de realimentacion positiva, esta

red tiene una frecuencia de resonancia, en donde el desfasamiento a traves de la red

es 0◦ y la atenuacion es 1/3. Por abajo de la frecuencia de resonancia predomina

la red de adelanto y la salida se adelanta a la entrada, por arriba de la frecuencia

de resonancia predomina la red de atraso y la salida se atrasa con respecto a la

entrada. 2) El oscilador de corrimiento de fase, consta de tres redes RC en el lazo

de realimentacion, que puede proporcionar un desfasamiento maximo que tiende a

90◦, la oscilacion ocurre a la frecuencia en donde el desfasamiento total a traves de

las tres redes RC es de 180◦. Y 3) El oscilador de T gemela, se conoce ası debido a

los dos filtros RC de tipo T, que son usados en el lazo de realimentacion negativa,

uno de los filtros T tiene una respuesta pasa-bajas y el otro una pasa-altas, estos

filtro son conectados en paralelo y producen una respuesta de un supresor de banda,

18

Page 28: INSTITUTO POLITECNICO NACIONAL¶max.esimez.ipn.mx/publicas/Sintetizador.pdfAng elica Correa Cid y Alejandra Correa Cid, les agradezco por mostrarme el camino para llegar hasta donde

con frecuencia central igual a la frecuencia de oscilacion deseada. Comunmente estos

osciladores se usan para frecuencias hasta de 1MHz (Mega Hertz).

En osciladores que requieren frecuencias mas altas de oscilacion, normalmente se

usan elementos de realimentacion tipo LC (Bobina-Capacitor), a menudo se emplean

transistores como elementos de ganancia en estos osciladores, a continuacion nos

introduciremos en varios tipos de osciladores LC resonantes tales como: 1) El oscilador

Colpitts, denominado ası en honor de su inventor, en este tipo se usa un circuito LC

en el lazo de realimentacion, para proporcionar el desfasamiento necesario y poder

operar como filtro resonante que va a pasar solamente la frecuencia de oscilacion que

se requiere. 2) El oscilador Clapp es una variante del Colpitts, la diferencia basica es un

capacitor adicional en serie con el inductor, en el circuito resonante de realimentacion.

3) El oscilador Hartley, es semejante al Colpitts, salvo que la red de realimentacion

esta formada por dos inductores en serie y un capacitor en paralelo. 4) El oscilador

Armstrong, usa un acoplamiento por transformador, con lo cual se realimenta una

parte del voltaje de senal, algunas veces se le denomina oscilador de reaccion en

referencia al secundario del transformador, no es muy comun en comparacion con los

anteriormente mencionados, en principio por la desventaja que presenta el tamano

y el costo del transformador. Y 5) Los osciladores controlados por cristal, son muy

estables y exactos, por que usan un cristal piezoelectrico en el lazo de realimentacion,

con el fin de poder controlar la frecuencia.

Hemos tratado osciladores que a su salida la forma de onda es sinusoidal, sin

embargo, existen osciladores que la forma de onda a su salida puede ser una on-

da triangular, diente de sierra, o cuadrada, algunos de estos tipos se refieren como

generadores de senal o multivibradores.

Continuando con los osciladores existe un tipo que es controlado por voltaje

(VCO), cuya frecuencia puede cambiarse mediante un voltaje de control variable de

DC, los VCO’s pueden ser sinusoidales o no sinusoidales. Por ejemplo, para construir

un oscilador de diente de sierra controlado por voltaje, se puede emplear un inte-

19

Page 29: INSTITUTO POLITECNICO NACIONAL¶max.esimez.ipn.mx/publicas/Sintetizador.pdfAng elica Correa Cid y Alejandra Correa Cid, les agradezco por mostrarme el camino para llegar hasta donde

grador con un amplificador operacional, que use un dispositivo de conmutacion PUT

(transistor de unı juntura programable) que se conecte en paralelo con el capacitor de

realimentacion. El PUT contiene un anodo, un catodo y una terminal de compuerta.

La compuerta esta siempre polarizada positivamente con respecto al catodo, cuando

el voltaje del anodo excede al de la compuerta en aproximadamente 0.7 V (Volts), el

PUT se enciende y opera como diodo polarizado directamente, si el voltaje del anodo

cae por debajo de este nivel, el PUT se apaga, al cumplirse estas condiciones junto

con la carga y descarga del capacitor obtenemos un generador de diente de sierra.

Por otra parte, tenemos a un circuito integrado muy versatil y con muchas apli-

caciones, el temporizador 555, el cual se vera como oscilador. Este oscilador consta

de dos comparadores, un circuito multivibrador biestable (flip-flop), un transistor de

descarga y un divisor de voltaje resistivo. El multivibrador biestable, es un dispositi-

vo digital de dos estados, cuya salida puede estar en un nivel alto de voltaje (set) o

en un nivel bajo de voltaje (reset), estos estados pueden cambiarse mediante senales

de entrada apropiadas. El 555 se puede conectar, para que opere en el modo astable

como oscilador no sinusoidal de carrera libre.

3.3. Anatomıa de un sintetizador

Trataremos ahora los componentes elementales de un sintetizador. Conforme van

pasando los anos la tecnologıa va progresando en el campo de la electronica, por

ejemplo, tenemos el caso del desarrollo y evolucion del transistor, con esto es posible

la construccion de generadores de sonido mas finos. Ası en 1964 Robert Moog, en

colaboracion con un musico llamado Herbert Deutsch, desarrollaron los primeros VCO

y VCA (Amplificador Controlado por Tension), un ano mas tarde, desarrolla los

filtros controlados VCF (Filtro Controlado por Tension), de pasa-bajas y pasa-altas,

de igual manera los ADSR (generador de envolvente), esto dio paso al nacimiento del

sintetizador analogico modular (llamado Moog en honor a su inventor). Mas adelante

se explicaremos los terminos anteriormente mencionados.

20

Page 30: INSTITUTO POLITECNICO NACIONAL¶max.esimez.ipn.mx/publicas/Sintetizador.pdfAng elica Correa Cid y Alejandra Correa Cid, les agradezco por mostrarme el camino para llegar hasta donde

Figura 3.1: Sintetizador elemental

En la Figura 3.1 se muestra el diagrama a bloques de un sintetizador elemental, a

continuacion se describen cada uno de sus bloques: El teclado controlador esta com-

puesto por una fuente la cual va a suministrar tensiones que son proporcionales a la

tecla que se oprime, estas tensiones se utilizan para iniciar los generadores de envol-

vente. El VCO, es en este caso la fuente de sonido basica, la frecuencia de la senal

que genera se obtiene como suma algebraica de las tensiones de control aplicadas a

sus entradas, se usan con respuesta exponencial normalizada a 1V/Octava y disponen

de varias formas de onda, sinusoidal, diente de sierra, triangular y cuadrada, y cada

una de ellas dara un tipo de sonido peculiar y diferente, dado el distinto contenido

armonico que tienen.

El mezclador de audio, es un dispositivo que permite la combinacion de una serie

de senales de entrada deseadas, de manera que se obtiene otra senal que es la combi-

nacion de aquellas. El ADSR (Attack Decay Sustain Release), se refiere a cuatro zonas

21

Page 31: INSTITUTO POLITECNICO NACIONAL¶max.esimez.ipn.mx/publicas/Sintetizador.pdfAng elica Correa Cid y Alejandra Correa Cid, les agradezco por mostrarme el camino para llegar hasta donde

caracterısticas de la amplitud de una senal de control, la zonas ADR se refiere a tiem-

pos, mientras que S se refiere a un nivel, estos generadores de envolvente controlaran

tanto la amplitud de la senal sonora como la respuesta del filtro. El VCA se combina

con un generador ADSR, para impartir a los sonidos que modifica unas determinadas

caracterısticas de ataque y decaimiento en su intensidad, de tal manera que permita

la simulacion de la dinamica de diversos instrumentos musicales, tambien es posible

modular en amplitud la senal que se procesa para anadir tremolos y otros efectos que

dependeran mucho de la frecuencia de la senal moduladora.

Por otro lado, el VCF es un elemento que permite el paso de determinadas frecuen-

cias de la senal de entrada y es el equivalente electrico de los resonadores acusticos de

los instrumentos tradicionales, como la caja del violın, que da el sonido caracterıstico

del instrumento, este se puede configurar en varios modos, pasa bajo, pasa alto, pasa

banda y supresor de banda, segun sea el efecto que deseamos resaltar o atenuar de la

onda basica generada por los VCO, se tiene que los parametros caracterısticos de un

filtro son la frecuencia de corte y la pendiente del filtro, que determina la atenuacion

de los sucesivos armonicos de la senal de entrada.

Ya por ultimo, el LFO (Low Frecuency Ocilator) generalmente se compone de

varios osciladores independientes controlados por tension, con varias formas de onda

cada uno y que se situan en la banda de bajas frecuencias, hasta unos 20Hz, su salida

puede usarse tanto para controlar la amplitud (tremolo), como la frecuencia (vibrato),

de los VCO, obteniendo sonoridades muy variadas. Por ultimo mencionaremos que

existen tecnicas para la generacion de ruido, por ejemplo, la de un algoritmo computa-

cional o un arreglo de dispositivos electronicos, los cuales suelen proporcionar ruido

blanco o rosa, ası como una salida de tension de control aleatoria, pero ajustable en

ciertos parametros, estas tres senales sirven para producir sonidos no convencionales

similares a los naturales, como el mar, el trueno y el siseo del aire.

22

Page 32: INSTITUTO POLITECNICO NACIONAL¶max.esimez.ipn.mx/publicas/Sintetizador.pdfAng elica Correa Cid y Alejandra Correa Cid, les agradezco por mostrarme el camino para llegar hasta donde

3.4. Resumen

En este capıtulo presentamos varios tipos de osciladores, tales como: osciladores

RC, LC, VCO, Colpitts, Clapp, Hartley, describiendo cada uno de ellos, tambien se

presento un circuito integrado muy popular, llamado temporizador 555 en su forma

de oscilador, ası mismo describimos el diagrama de un sintetizador elemental, estos

conceptos son la antesala para el diseno basico de un sintetizador elemental, que mas

adelante presentaremos.

23

Page 33: INSTITUTO POLITECNICO NACIONAL¶max.esimez.ipn.mx/publicas/Sintetizador.pdfAng elica Correa Cid y Alejandra Correa Cid, les agradezco por mostrarme el camino para llegar hasta donde

Φ

24

Page 34: INSTITUTO POLITECNICO NACIONAL¶max.esimez.ipn.mx/publicas/Sintetizador.pdfAng elica Correa Cid y Alejandra Correa Cid, les agradezco por mostrarme el camino para llegar hasta donde

Capıtulo 4

Diseno de Nuestro Sintetizador deNotas

En este capıtulo presentaremos el diseno de nuestro sintetizador de notas mu-

sicales. Explicaremos con mas detalle la programacion de la sıntesis de onda y las

estructuras de sonido mas importantes que se requieren para la programacion del

driver que controla la tarjeta de sonido de una computadora digital PC.

4.1. Computadoras digitales

Una computadora digital funciona con base al procesamiento de numeros digitales,

y son el tipo de computadoras en el que se ha centrado el progreso moderno. Estas

se dividen en cuatro principales generaciones que son; 1) Primera generacion (1951-

1958), en la cual se usaron bulbos para almacenar la informacion y tarjetas perforadas

para cargar datos y programas. 2) Segunda generacion (1959-1964), con el invento del

transistor llego esta nueva generacion de computadoras, las cuales utilizaron cintas

y discos magneticos para almacenar informacion y disponıan de celdas fotoelectricas

para la mejor lectura de las tarjetas perforadas. 3) Tercera generacion (1964-1971),

aquı se da la llegada de los circuitos integrados a las computadoras, con lo cual se

incrementa el rendimiento de las maquinas, pudiendo ası trabajar a tal velocidad que

se podıa correr mas de un programa de manera simultanea. Las computadoras se

hicieron mas pequenas, mas rapidas y desprendıan menos calor. 4) Cuarta generacion

25

Page 35: INSTITUTO POLITECNICO NACIONAL¶max.esimez.ipn.mx/publicas/Sintetizador.pdfAng elica Correa Cid y Alejandra Correa Cid, les agradezco por mostrarme el camino para llegar hasta donde

(1971-a la fecha), la colocacion de componentes mas pequenos en un chip, permite

crear el microprocesador, el cual rige las funciones principales en una computadora. Se

crean memorias electronicas, las cuales desechan a las memorias de nucleo magnetico

que se usaban anteriormente, aumentando ası su rapidez. Con la llegada de estas

tecnologıas, se hizo posible la creacion de la PC (Personal Computer).

Las computadoras siguen avanzando hasta nuestros dıas, creando mejores tecnicas

y desarrollando nuevas tecnologıas. Una parte importante de las computadoras hoy

en dıa es la Internet, que puede ser definida como red de redes, es decir, una red que

interconecta redes de computadoras entre sı. Una red de computadoras es un conjunto

de maquinas que se comunican a traves de algun medio (cable coaxial, fibra optica,

radiofrecuencia, lıneas telefonicas, etc.) con el objeto de compartir recursos.

Aunque se pueda pensar que internet inicio hace pocos anos, no es ası, sus inicios

nos remontan a la decada de los 60’s. En plena guerra frıa Estados Unidos creo una

red de uso exclusivamente militar, para que en caso de un ataque se pudiera tener

acceso a la informacion desde cualquier parte del paıs. El envio de datos deberıa

descansar en un mecanismo que pudiera manejar la destruccion parcial de la red, de

esta manera se decidio enviar la informacion en pequenos mensajes o paquetes, los

cuales contendrıan la direccion de destino, pero no una ruta especıfica para su arribo,

cada paquete buscarıa una ruta y al final el destinatario reensamblarıa el mensaje

original. Esta red se creo en 1969 y fue llamada ARPANET (Advanced Research

Projects Agency Network).

Esta red fue situada en diferentes universidades del paıs y crecio tanto que su

protocolo NCP (Network Control Protocol), quedo obsoleto. Entonces con el tiempo

se dio paso a un protocolo mas sofisticado, el TCP/IP (Transmission Control Pro-

tocol / Internet Protocol), que es el protocolo utilizado hasta nuestros dıas. TCP se

encarga de convertir los mensajes a paquetes en la maquina emisora y los reensambla

en la maquina destino, mientras que IP se encarga de buscar la ruta destino. En 1983

el segmento militar decide separarse de ARPANET y formar su propia red conocida

26

Page 36: INSTITUTO POLITECNICO NACIONAL¶max.esimez.ipn.mx/publicas/Sintetizador.pdfAng elica Correa Cid y Alejandra Correa Cid, les agradezco por mostrarme el camino para llegar hasta donde

como MILNET (Militar Network). En 1984 la National Science Foundation, crea una

nueva red llamada NSFNET (National Science Foundation Network) y con un incre-

mento continuo de transmision de datos de la misma, logro absorber a ARPANET.

Sin embargo, el continuo crecimiento de nuevas redes de libre acceso, terminaron en

la union de estas con NSFNET, formando ası el embrion de lo que ahora es Internet.

Con la creacion de las paginas web y del primer explorador, Internet no ha dejado de

crecer y paso de ser una red de investigacion militar, a un negocio y eso ha sido lo

que impulsa su desarrollo.

4.2. Estructuras del controlador (driver) de sonido

Por otra parte, para el diseno de sıntesis de ondas, necesitamos conocer el fun-

cionamiento y caracterısticas principales de algunas funciones y estructuras que se

utilizaran posteriormente. Empecemos con la estructura WAVEFORMATEX, la cual

contiene la informacion mas comun de la forma de onda y define su formato, cuan-

do se requiere mayor informacion, esta sera incluida como primer miembro en otra

estructura con la informacion adicional. La siguiente es su estructura:

typedef struct {WORD wFormatTag;WORD nChannels;DWORD nSamplesPerSec;DWORD nAvgBytesPerSec;WORD nBlockAlign;WORD wBitsPerSample;WORD cbSize;}WAVEFORMATEX;

Donde, wFormatTag especifica el tipo de formato de la forma de onda; nChannels

especifica el numero de canales a utilizar, que puede ser monoaural para un canal

o estereo para dos canales; nSamplesPerSec es el numero de muestras por segun-

do que en cada canal se reproduciran o grabaran, si wFormatTag tiene especifica-

do WAVE FORMAT PCM, entonces los valores comunes de muestras por segundo

27

Page 37: INSTITUTO POLITECNICO NACIONAL¶max.esimez.ipn.mx/publicas/Sintetizador.pdfAng elica Correa Cid y Alejandra Correa Cid, les agradezco por mostrarme el camino para llegar hasta donde

son: 8.0 KHz, 11.025 KHz, 22.05 KHz y 44.1 KHz; nAvgBytesPerSec requiere ha-

cer 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; wBitsPerSam-

ple 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 informacion 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 funcion

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 direccion de la estructura WAVEFORMATEX,

la cual identifica los datos de la forma de onda que seran enviados al dispositivo,

esta estructura sera vaciada inmediatamente despues que se pase a la funcion wave-

OutOpen; dwCallback es una direccion que asegura que la funcion regrese, ya sea

de un manejador de eventos, de un manejador de ventana, etc., esto dependera de

la bandera que se utilice (fdwOpen), si esta funcion no es usada, su valor puede

ser cero; dwCallbackInstance se usa para pasar datos al mecanismo de llamada de

regreso; fdwOpen es un parametro que usa banderas para abrir el dispositivo, las

28

Page 38: INSTITUTO POLITECNICO NACIONAL¶max.esimez.ipn.mx/publicas/Sintetizador.pdfAng elica Correa Cid y Alejandra Correa Cid, les agradezco por mostrarme el camino para llegar hasta donde

banderas son las siguientes: CALLBACK EVENT permite manejar eventos; CALL-

BACK FUNCTION regresa algun procedimiento a una direccion; CALLBACK NULL

no tiene mecanismo de regreso y solo cuenta con los parametros iniciales; CALL-

BACK 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 llevara acabo las conversiones en los datos de audio;

WAVE FORMAT QUERY indica a waveOutOpen preguntar al dispositivo determina-

do si soporta el formato dado, pero el dispositivo no estara abierto; WAVE MAPPED

indica al parametro uDeviceID especificar un dispositivo de forma de onda para ser

mapeado.

Para detener el dispositivo de salida y reiniciar la corriente de posicion a cero, es

utilizada la funcion 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 parametros 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 direccion 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 numero de veces que la funcion se repite,

dentro de una iteracion; dwFlags son las banderas de abastecimiento de informacion

acerca del buffer: WHDR BEGINLOOP es el primer buffer en un lazo y solo puede

29

Page 39: INSTITUTO POLITECNICO NACIONAL¶max.esimez.ipn.mx/publicas/Sintetizador.pdfAng elica Correa Cid y Alejandra Correa Cid, les agradezco por mostrarme el camino para llegar hasta donde

ser usado con buffer de salida; WHDR DONE es colocada en el controlador del dis-

positivo para indicar que ha finalizado el buffer y esta regresando a la aplicacion;

WHDR ENDLOOP es el ultimo buffer en el lazo y solo es usada con buffer de salida;

WHDR INQUEUE es puesto por windows para indicar que el buffer esta en cola para

tocar; WHDR PREPARED tambien es puesto por windows para preparar al buffer,

ya sea con una funcion de entrada o una de salida.

Para preparar un bloque de datos de la forma de onda y despues tocarlos utilizamos

la funcion 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 direccion de la estructura WAVEHDR, que define los bloques de datos para

prepararlos; cbwh es el tamano en bytes de la estructura WAVEHDR.

Una parte importante es la funcion 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 direccion de una estructura WAVEHDR, la cual contiene informacion acerca del

bloque de datos; cbwh es el tamano en bytes de la estructura WAVEHDR.

Para limpiar la preparacion llevada a cabo por la funcion waveOutPrepareHeader

es utilizada la funcion waveOutUnprepareHeader, esta funcion debe ser llamada des-

pues de que el dispositivo haya finalizado con un bloque de datos y antes de liberar

el buffer. Su estructura es la siguiente:

30

Page 40: INSTITUTO POLITECNICO NACIONAL¶max.esimez.ipn.mx/publicas/Sintetizador.pdfAng elica Correa Cid y Alejandra Correa Cid, les agradezco por mostrarme el camino para llegar hasta donde

MMRESULT waveOutUnprepareHeader(HWAVEOUT hwo,LPWAVEHDR pwh,UINT cbwh );

Donde, hwo es el manejador del dispositivo de salida de forma de onda; pwh

es la direccion de una estructura WAVEHDR, para identificar los datos que seran

limpiados; cbwh es el tamano en bytes de la estructura WAVEHDR.

Por ultimo tenemos a la funcion waveOutClose, que es la encargada de cerrar el

dispositivo de salida de forma de onda y su estructura es la siguiente:

MMRESULT waveOutClose( HWAVEOUT hwo );

Donde, hwo es el manejador del dispositivo de salida de forma de onda.

4.3. Programacion de las funciones de onda

Para la generacion de sonido en nuestro diseno, una de las funciones mas impor-

tantes es la que llamaremos FillBuffer. Esta funcion es la encargada de manipular las

diferentes formas de onda con las que trabajaremos, y tiene la siguiente estructura:

VOID FillBuffer ( LPBYTE pBuffer, int iFreq ){static double fAngle;

int i;for ( i = 0 ; i < BUFFER_SIZE ; i ++ ){pBuffer [i] = (BYTE) (127 + 127 * sin (fAngle));fAngle += 2 * PI * iFreq / SAMPLE_RATE ;if (fAngle > 2 * PI)fAngle - = 2 * PI;

}}

La funcion anterior genera datos digitales (bytes) que corresponden a una senal

analogica (en este caso un seno), que debe estar en el rango de frecuencias audibles

para el oıdo humano (de 20-20 KHz), esta sera almacenada en memoria con una razon

de muestras digitales que llamaremos SAMPLE RATE. Para generar una onda de 20

KHz es necesario que en cada ciclo se tomen mınimo dos muestras, por esta razon

31

Page 41: INSTITUTO POLITECNICO NACIONAL¶max.esimez.ipn.mx/publicas/Sintetizador.pdfAng elica Correa Cid y Alejandra Correa Cid, les agradezco por mostrarme el camino para llegar hasta donde

el SAMPLE RATE toma el valor de 44100 Hz. Por ejemplo para generar una forma

de onda con una frecuencia de 8820 Hz por cada ciclo se tomaran 5 muestras, como

se muestra en la Figura 4.1, esto significa que el numero de muestras por segundo es

el SAMPLE RATE divido entre la frecuencia de la forma de onda. El seno de cada

muestra sera almacenado en la localidad de un buffer previamente definido.

Figura 4.1: Numero de muestras por cada ciclo.

Se puede aprovechar que la senal con la que se esta trabajando es una senal

periodica, de esta manera se puede trabajar con un solo ciclo incrementando las

localidades de memoria y repitiendo los angulos de fase. El primer angulo sera 0,

despues la variable fAngle es incrementada 2π veces la frecuencia dividida entre el

SAMPLE RATE, este procedimiento continua hasta que fAngle es mayor que 2π,

entonces sera decrementado en 2π para volver a retomar los angulos que ahora seran

almacenados en diferentes localidades de memoria de nuestro buffer. Cada localidad

de memoria es de 8 bits por esta razon la funcion seno esta dada entre 0 y 254 (00 a

FF) [8].

Por otro lado tenemos que, un seno es una porcion fundamental en la trigonometrıa,

en un triangulo rectangulo el valor del seno de un angulo agudo, es igual a la longi-

tud del cateto opuesto al angulo, dividida por la longitud de la hipotenusa. El valor

numerico del seno esta comprendido entre -1 y 1, la curva de este es el prototipo o

modelo de todas las sinusoides. Se tiene que un angulo representa la apertura de dos

lıneas que tienen un origen comun (vertice); un arco se define como la lınea circular

32

Page 42: INSTITUTO POLITECNICO NACIONAL¶max.esimez.ipn.mx/publicas/Sintetizador.pdfAng elica Correa Cid y Alejandra Correa Cid, les agradezco por mostrarme el camino para llegar hasta donde

que rodea al angulo por el extremo de dos segmentos, las medidas de un angulo se

pueden expresar en radianes; el radian es el angulo cuyo arco tiene una longitud igual

al radio. Por lo tanto tenemos que, 1◦ = 0.01745 radianes y 1 radian = 57.3 grados, el

grado esta definido en trigonometrıa como el arco igual a 1/360 de la circunferencia

de un cırculo.

4.4. Visualizacion de las formas de onda

Mediante la sumatoria de senales simples, podemos obtener una senal compleja

que sea semejante a la forma de onda caracterıstica de algun instrumento musical.

Tomando en cuenta el teorema de Fourier, que dice: que por medio de la suma de

funciones periodicas de distinta frecuencia es posible obtener una senal compleja,

hemos creado un programa en Visual C++ que muestra graficamente el teorema de

Fourier [3].

En la Figura 4.2 se muestra el resultado de nuestro programa, que se encuentra

dividido en cuatro ventanas; en la primera se representa la frecuencia mas baja lla-

mada frecuencia fundamental; en las ventanas dos y tres se representan el tercer y

noveno armonico respectivamente, los cuales son multiplos de la frecuencia funda-

mental; en la ventana cuatro podemos observar una forma de onda compleja, la cual

es el resultado de la sumatoria de las tres ventanas anteriores.

Tenemos que una serie de Fourier esta representada por una sumatoria de senos

y cosenos, su representacion matematica es la siguiente:

f(t) = a0

∞∑

n=1

cos(kw0t) + bk

∞∑

n=1

sen(kw0t) (4.1)

Una senal por compleja que sea se puede representar mediante la funcion f(t),

las funciones pueden ser pares e impares, las funciones pares tienen una grafica que

debe ser geometrica respecto al eje vertical, las funciones impares tienen su grafica

simetrica con el origen, tambien existen funciones que no cumplen con la definicion

de funcion par e impar.

33

Page 43: INSTITUTO POLITECNICO NACIONAL¶max.esimez.ipn.mx/publicas/Sintetizador.pdfAng elica Correa Cid y Alejandra Correa Cid, les agradezco por mostrarme el camino para llegar hasta donde

En las ventanas de la Figura 4.2 tenemos dos barras de desplazamiento, la barra

horizontal representa la frecuencia (kw0t), la barra vertical representa la amplitud de

la senal (a0, ak,bk). Si la senal es par entonces, bk = 0, y la senal estara represen-

tada por cosenos. Si la senal es impar entonces, a0 y ak = 0, por lo tanto la senal

estara representada por senos. En la ventana superior izquierda tenemos representada

a la senal: a seno(w0t); la ventana superior derecha representa: ak seno(3w0t); la ven-

tana inferior izquierda representa: ak seno(9w0t); y por ultimo en la ventana inferior

derecha, queda representada graficamente la sumatoria de las ventanas anteriormente

Figura 4.2: Representacion grafica de la Serie de Fourier, mediante un programadisenado en C++.

34

Page 44: INSTITUTO POLITECNICO NACIONAL¶max.esimez.ipn.mx/publicas/Sintetizador.pdfAng elica Correa Cid y Alejandra Correa Cid, les agradezco por mostrarme el camino para llegar hasta donde

mencionadas, dando la funcion: f(t) = a seno(w0t)+akseno(3w0t)+akseno(9w0t), que

es la representacion de la Ecuacion 4.1.

Estas ventanas se implementan con un buffer y algunas estructuras de audio,

para obtener el sonido de las senales que representan dichas ventanas, por lo tanto,

vamos a obtener la respuesta grafica y el audio, que pueden ser semejantes a cualquier

instrumento musical.

4.5. Anatomıa de una tarjeta de sonido

Una parte muy importante de este proyecto es la tarjeta de sonido, ya que per-

mitira implementar la parte de audio en nuestro proyecto. En un principio la PC

(Personal Computer) no fue disenada para trabajar con sonido, sin embargo, con el

desarrollo de nuevas aplicaciones (video juegos, musica electronica, etc.), tuvo que ser

desarrollado un hardware disenado para controlar el sonido y que fuese compatible

con la PC, de esta manera en la decada de los 80’s aparece la tarjeta de sonido.

En la actualidad las tarjetas de sonido se encuentran divididas en dos partes: la

parte analogica y la parte MIDI (Musical Instrument Digital Interface) [6]. En la

Figura 4.3 se muestra el diagrama a bloques de una tarjeta de sonido.

Se puede observar que la parte analogica se encuentra subdividida en tres bloques;

el primero es un convertidor analogico-digital, que es el encargado de transformar los

datos analogicos de la entrada (microfono, guitarra, etc.) a datos digitales, ya que la

PC solo trabaja con este tipo de datos; en el segundo bloque se encuentran los drivers

de audio, que usa windows para manipular los datos que le pasara el primer bloque;

y por ultimo el tercer bloque es un convertidor digital-analogico, que realiza una

operacion inversa al primer bloque, para que el escucha pueda interpretar el sonido.

La segunda parte se encuentra dividida en cuatro bloques; los bloques de entrada

y salida son un receptor universal, los cuales se encargan de mandar y recibir datos;

el bloque del sintetizador de sonido, consta de dos formas de sintetizacion de datos,

una es sintetizacion FM, la cual se encarga de imitar el sonido por medio de formulas

35

Page 45: INSTITUTO POLITECNICO NACIONAL¶max.esimez.ipn.mx/publicas/Sintetizador.pdfAng elica Correa Cid y Alejandra Correa Cid, les agradezco por mostrarme el camino para llegar hasta donde

Figura 4.3: Diagrama a bloques de una tarjeta de sonido.

matematicas y la otra es la sıntesis por tabla de onda, en la cual ya no se crea

musica computarizada, sino que se busca en una tabla con muestras de ondas del

instrumento deseado [5]. Cabe mencionar que la parte de MIDI no sera requerida

para este proyecto.

4.6. Resumen

En este capıtulo presentamos lo mas relevante del diseno de nuestro sintetizador de

notas musicales, tambien presentamos la programacion de las estructuras de audio,

ası como el metodo que utilizamos para realizar la sıntesis de onda y por ultimo

describimos como se encuentra estructurada una tarjeta de sonido. En el siguiente

capıtulo presentaremos el diseno de la interfaz la grafica de nuestro sistema.

36

Page 46: INSTITUTO POLITECNICO NACIONAL¶max.esimez.ipn.mx/publicas/Sintetizador.pdfAng elica Correa Cid y Alejandra Correa Cid, les agradezco por mostrarme el camino para llegar hasta donde

Capıtulo 5

Diseno de la Interfaz Grafica

En este capıtulo presentaremos el diseno la interfaz grafica, la cual es el medio

de comunicacion entre el usuario y las estructuras utilizadas en el diseno de sıntesis

de ondas. Se plantearan conceptos necesarios para su comprension, tales como: pıxel,

mapa de bits, recurso grafico, ventana madre, ventana hija, sistema de coordenadas,

entre otros.

5.1. Pixeles y mapas de bits

Para dibujar sobre dispositivos graficos se utiliza la GDI (Graphics Device In-

terface), la cual se encarga de llamar las rutinas de diversos dispositivos (drivers de

video, impresora, y trazadores graficos). Las aplicaciones graficas utilizan un sistema

de coordenadas (x, y) en el area de dibujo, para saber la ubicacion de cada punto

que se encuentre en pantalla, el valor x da la ubicacion del punto sobre el eje x,

con la ubicacion predeterminada 0 en el extremo izquierdo, desplazandose de izquier-

da a derecha, el valor de y es la ubicacion del punto en el eje y, con la ubicacion

predeterminada 0 en el extremo superior, desplazandose de arriba hacia abajo.

Un punto que representa la menor unidad grafica de medida de una pantalla es

llamado pıxel. La imagen digital de algun dibujo es conocida como mapa de bits, la

imagen esta constituida por pıxeles, donde cada uno corresponde a uno o mas bits

del mapa, por ejemplo: un mapa de bits de un solo color requiere un bit por pıxel,

37

Page 47: INSTITUTO POLITECNICO NACIONAL¶max.esimez.ipn.mx/publicas/Sintetizador.pdfAng elica Correa Cid y Alejandra Correa Cid, les agradezco por mostrarme el camino para llegar hasta donde

mientras que un mapa de bits de mas de un color requiere varios bits por pıxel.

5.2. Ventanas, barras, y otros controles graficos

Existen elementos que interactuan directamente con el usuario, tales como: cajas

de dialogo, ıconos, cursores, mapas de bits, etc., estos elementos son conocidos como

recursos. La lista de todos los recursos que utilice alguna aplicacion se encuentra en

un archivo con extension .rc, los recursos se guardan en un directorio y pueden ser

editados directamente (colocar barras de desplazamiento, cajas de texto, botones de

pulsacion, etc.), con los editores de recursos de Visual C++ [2].

Una ventana sirve de fondo para los controles y para los graficos, se pueden utilizar

tantas ventanas como se necesiten y dependiendo de la utilidad que se les de, estas

pueden ser de diferentes tipos. Se pueden crear ventanas desde el editor de dialogos de

Visual C++ o escribir el codigo en un archivo .cpp, como se muestra a continuacion:

CVentanaPpal::CVentanaPpal(){

// Crear la ventana principalCreate( NULL, "Windows - C++", WS_OVERLAPPEDWINDOW,CRect( 175, 100, 465, 300), NULL, NULL, 0, NULL );

}

Las ventanas estan organizadas jerarquicamente; una ventana padre o marco prin-

cipal, ventana cliente o area de cliente y ventana hija o ventana marco de documento,

la ventana padre es una ventana convencional; esto es, tiene una barra de tıtulo, una

barra de herramientas, un menu de control, un borde que permite redimensionar la

ventana y botones para maximizar, minimizar y cerrar la ventana, el area de cliente

de la ventana padre es denominada ventana cliente, en esta se contienen las ventanas

hijas, cada una de las cuales visualizan un documento(Figura 5.1).

5.3. Programando la interfase grafica

Una clase es una estructura de datos cuyos campos son metodos. Los metodos

tambien son conocidos como funciones, estos son la base de las aplicaciones y se

38

Page 48: INSTITUTO POLITECNICO NACIONAL¶max.esimez.ipn.mx/publicas/Sintetizador.pdfAng elica Correa Cid y Alejandra Correa Cid, les agradezco por mostrarme el camino para llegar hasta donde

Figura 5.1: Jerarquıa de ventanas.

encuentran declaradas en diversos archivos de cabecera incluidos en Visual C++. Para

indicarle a una aplicacion en ejecucion, que ha sucedido algun evento (clic sobre un

boton, mover el raton, pulsar una tecla) es necesario enviar una notificacion la cual es

conocida como mensaje. La aplicacion responde con una accion, que esta determinada

por la ejecucion del codigo en una funcion, esto significa que enviar un mensaje

equivale a ejecutar una funcion dentro de una aplicacion.

Para la implementacion de la interfase de nuestra aplicacion contaremos con una

ventana como la que se muestra en la Figura 5.2, la cual mezclara una senal funda-

mental con cinco de sus armonicos, estas senales se visualizaran en la ventana ası como

la senal resultante. Contara tambien con una serie de botones, los cuales simularan

las teclas del piano y al hacer clic en ellas se escuchara la senal antes mencionada.

A continuacion explicamos el procedimiento para la realizacion del software antes

mencionado en el lenguaje de programacion Visual.C++.

Inicialmente necesitamos crear un documento vacio (esqueleto de la aplicacion),

para esto de clic en la orden new del menu file, esto invocara a Class Wizard, en la

pestana projects se elige una aplicacion MFC (Microsoft Foundation Class) AppWizard

[exe] y ponga el nombre del proyecto (en este caso lo llamaremos Sintetizador) y la

39

Page 49: INSTITUTO POLITECNICO NACIONAL¶max.esimez.ipn.mx/publicas/Sintetizador.pdfAng elica Correa Cid y Alejandra Correa Cid, les agradezco por mostrarme el camino para llegar hasta donde

Figura 5.2: Interfaz grafica de la aplicacion.

localizacion, las otras opciones en esta ventana son las dadas por omision. En ese

momento comienzan los pasos que genera Class Wizard; en el paso 1 se elige un

documento simple; en los pasos 2 y 3 se toman las opciones por omision; en el paso 4

se desactivan las tres primeras casillas (Docking Toolbar, Inicial Status Bar y Printing

and Print Preview), dejando solo los controles 3D; en el paso 5 se toman las opciones

por omision; y en el paso 6 se elige la opcion CFormView del menu Base Class,

para obtener un formulario como vista principal. Al dar clic en el boton finalizar, se

muestra la informacion del proyecto que se realizara cuando demos clic en el boton

OK de esta ventana.

El paso siguiente es dibujar sobre la vista cinco barras verticales, las cuales contro-

laran la amplitud de los armonicos de la frecuencia fundamental, una barra horizontal

que servira como afinador y una caja de texto por cada barra, en donde se visua-

lizara en valor de la misma al ser pulsada. Cada objeto cuenta con un identificador

40

Page 50: INSTITUTO POLITECNICO NACIONAL¶max.esimez.ipn.mx/publicas/Sintetizador.pdfAng elica Correa Cid y Alejandra Correa Cid, les agradezco por mostrarme el camino para llegar hasta donde

que es llamado ID, para modificarlo es necesario: entrar al cuadro de propiedades del

objeto y asignarle un nombre que sea comodo para ser manipulado. Cabe mencionar

que usted puede acomodar los botones como mas le convenga.

Para facilitar la entrada y salida de datos a traves de controles se utilizan variables

miembro que los representen, para que el codigo trabaje sobre esas variables y se olvide

de los controles. Ejecute Class Wizard (Ctrl.+ w), de clic en la pestana Member

Variables y seleccione el ID de la barra que desee, ahora pulse el boton Add Variable..

y anada para la barra horizontal la variable m CtrlBarraH1, para las barras verticales

agregue las variables m CtrlBarraV1 hasta m CtrlBarraV5, todas de categorıa Control

y tipo CScrollBar, 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, todas estas de

tipo int.

Para inicializar las barras de desplazamiento es necesario modificar la funcion

miembro OnInitialUpdate, ya que es la primera funcion de la vista en ejecutarse,

esta se encuentra en el archivo fuente sintetizadorview.cpp. Edite la funcion como se

muestra a continuacion:

void CSintetizadorView::OnInitialUpdate(){

CFormView::OnInitialUpdate();GetParentFrame()->RecalcLayout();ResizeParentToFit(false);

m_CtrlBarraH1.SetScrollRange(415, 466, false);m_CtrlBarraH1.SetScrollPos(440, false);

m_CtrlBarraV1.SetScrollRange(0, 16, false);m_CtrlBarraV1.SetScrollPos(0, false);.........

m_CtrlBarraV5.SetScrollRange(0, 16, false);m_CtrlBarraV5.SetScrollPos(0, false);

UpdateData(false);}

La funcion SetScrollRange asigna los valores mınimo y maximo para la barra de

41

Page 51: INSTITUTO POLITECNICO NACIONAL¶max.esimez.ipn.mx/publicas/Sintetizador.pdfAng elica Correa Cid y Alejandra Correa Cid, les agradezco por mostrarme el camino para llegar hasta donde

desplazamiento especificada. La funcion SetScrollPos situa el cuadro de desplazamien-

to en la posicion indicada.

Cuando el usuario actue sobre una de las barras de desplazamiento se genera un

mensaje, si la barra es horizontal el mensaje sera WM HSCROLL y si la barra es

vertical el mensaje sera WM VSCROLL, esto hara que se ejecute la funcion asocia-

da OnHScroll o OnVScroll. Para esto invoque Class Wizard y de clic en la ventana

Message Maps, enseguida seleccionando la clase CSintetizadorView, el objeto CSinte-

tizadorView y el mensaje WM HSCROLL, de clic en el boton Add Fuction y despues

en el boton Edit Code y edite la funcion OnHScroll de la siguiente forma:

void CSintetizadorView::OnHScroll(UINT nSBCode, UINT nPos,CScrollBar* pScrollBar)

{int nNuevaPo = pScrollBar->GetScrollPos();

switch( nSBCode ){

case SB_LEFT:nNuevaPo = 415;break;

case SB_RIGHT:nNuevaPo = 466;break;

case SB_PAGERIGHT:nNuevaPo = min(466, nNuevaPo + 5);break;

case SB_PAGELEFT:nNuevaPo = max(415, nNuevaPo - 5);break;

case SB_LINERIGHT:nNuevaPo = min(466, nNuevaPo + 1);break;

case SB_LINELEFT:nNuevaPo = max(415, nNuevaPo - 1);break;

case SB_THUMBTRACK:nNuevaPo = nPos;break;default:;

}pScrollBar->SetScrollPos( nNuevaPo );

42

Page 52: INSTITUTO POLITECNICO NACIONAL¶max.esimez.ipn.mx/publicas/Sintetizador.pdfAng elica Correa Cid y Alejandra Correa Cid, les agradezco por mostrarme el camino para llegar hasta donde

aH1 = m_CtrlBarraH1.GetScrollPos();Graficador();

CFormView::OnHScroll(nSBCode, nPos, pScrollBar);}

Un procedimiento similar se hace para la funcion OnVScroll, esta funcion se ejecu-

ta igual que la anterior pero ahora con el mensaje WM VSCROLL, y a continuacion

edıtela de la siguiente forma:

void CSintetizadorView::OnVScroll(UINT nSBCode, UINT nPos,CScrollBar* pScrollBar)

{int nNuevaPos = pScrollBar->GetScrollPos();l

switch( nSBCode ){

case SB_LEFT:nNuevaPos = 0;break;

case SB_RIGHT:nNuevaPos = 16;break;

case SB_PAGERIGHT:nNuevaPos = min(16, nNuevaPos + 2);break;

case SB_PAGELEFT:nNuevaPos = max(0, nNuevaPos - 2);break;

case SB_LINERIGHT:nNuevaPos = min(16, nNuevaPos + 1);break;

case SB_LINELEFT:nNuevaPos = max(0, nNuevaPos - 1);break;

case SB_THUMBTRACK:nNuevaPos = nPos;break;

CFormView::OnVScroll(nSBCode, nPos, pScrollBar);}

pScrollBar->SetScrollPos( nNuevaPos );aV1 = m_CtrlBarraV1.GetScrollPos();aV2 = m_CtrlBarraV2.GetScrollPos();aV3 = m_CtrlBarraV3.GetScrollPos();aV4 = m_CtrlBarraV4.GetScrollPos();aV5 = m_CtrlBarraV5.GetScrollPos();

43

Page 53: INSTITUTO POLITECNICO NACIONAL¶max.esimez.ipn.mx/publicas/Sintetizador.pdfAng elica Correa Cid y Alejandra Correa Cid, les agradezco por mostrarme el camino para llegar hasta donde

Graficador();

CFormView::OnVScroll(nSBCode, nPos, pScrollBar);}

Las variables miembro aH1 y aV’s son igualadas con la posicion en la que se

encuentre la barra de desplazamiento para ser mandadas a la caja de texto y a la

funcion Graficador que mas tarde sera declarada. Para una mejor manipulacion de

estas variables, borre su declaracion que se encuentra en el archivo sintetizadorview.h

y declarelas como variables globales en el archivo sintetizadorview.cpp.

Al final de cada codigo estamos llamando a una funcion Graficador, esta funcion

es la encargada de dibujar la senal fundamental, los armonicos y la resultante en la

vista principal. Para darla de alta ocuparemos AppWizard, esto lo hacemos dando clic

en la pestana ClassView de la ventana WorkSpace, desplegamos el menu sintetizador

classes y damos clic derecho sobre la clase CSintetizadorView, al hacerlo aparecera un

menu y daremos clic sobre la opcion Add Member Function, aparecera una ventana

en donde preguntara el tipo de funcion, que sera void y la declaracion o nombre de

funcion, que sera Graficador. Edite esta funcion de la manera siguiente:

void CSintetizadorView::Graficador(){

CClientDC dc(this);CClientDC dc2(this);CClientDC dc3(this);CClientDC dc4(this);CClientDC dc5(this);CClientDC dc6(this);CClientDC dc7(this);

dc.SetMapMode(MM_ISOTROPIC);dc.SetViewportExt(630,20);dc.SetViewportOrg(47,400);

dc2.SetMapMode(MM_ISOTROPIC);dc2.SetViewportExt(630,20);dc2.SetViewportOrg(47,560);

dc3.SetMapMode(MM_ISOTROPIC);dc3.SetViewportExt(630,20);dc3.SetViewportOrg(250,416);

44

Page 54: INSTITUTO POLITECNICO NACIONAL¶max.esimez.ipn.mx/publicas/Sintetizador.pdfAng elica Correa Cid y Alejandra Correa Cid, les agradezco por mostrarme el camino para llegar hasta donde

dc4.SetMapMode(MM_ISOTROPIC);dc4.SetViewportExt(630,20);dc4.SetViewportOrg(250,560);

dc5.SetMapMode(MM_ISOTROPIC);dc5.SetViewportExt(630,20);dc5.SetViewportOrg(450,416);

dc6.SetMapMode(MM_ISOTROPIC);dc6.SetViewportExt(630,20);dc6.SetViewportOrg(450,560);

dc7.SetMapMode(MM_ISOTROPIC);dc7.SetViewportExt(630,20);dc7.SetViewportOrg(700,420);

RedrawWindow();for(x=0;x<=2000; x ++){

w = (440*2*3.14);w2 = (880*2*3.14);w3 = (1320*2*3.14);w4 = (1760*2*3.14);w5 = (2200*2*3.14);w6 = (2640*2*3.14);

ysen=(int)(87+87*sin(x*w/440));ysen2=(int)(8+aV1*sin(x*w2/880));ysen3=(int)(8+aV2*sin(x*w3/1320));ysen4=(int)(8+aV3*sin(x*w4/1760));ysen5=(int)(8+aV4*sin(x*w5/2200));ysen6=(int)(8+aV5*sin(x*w6/2640));

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)));

dc.SetPixel(x*8,ysen*50,RGB(0,0,0));dc2.SetPixel(x*8,ysen2*300,RGB(0,0,0));dc3.SetPixel(x*8,ysen3*300,RGB(0,0,0));dc4.SetPixel(x*8,ysen4*300,RGB(0,0,0));dc5.SetPixel(x*8,ysen5*300,RGB(0,0,0));dc6.SetPixel(x*8,ysen6*300,RGB(0,0,0));dc7.SetPixel(x*12,resul*80,RGB(0,0,0));

}

UpdateData( false );}

Declare las variables ysen a ysen6, x y resul, como tipo int y las variables w a w6

de tipo double, todas como variables globales. La funcion RedrawWindow se encarga

de limpiar la pantalla cada vez que movemos las barras y se dibuja la funcion seno.

45

Page 55: INSTITUTO POLITECNICO NACIONAL¶max.esimez.ipn.mx/publicas/Sintetizador.pdfAng elica Correa Cid y Alejandra Correa Cid, les agradezco por mostrarme el camino para llegar hasta donde

El CClientDC nos sirve para obtener el contexto de dispositivo del area de cliente y

acceder a sus atributos a traves de la funcion miembro de la clase del contexto de

dispositivo. La funcion SetMapMode se encarga de ajustar el sistema de coordenadas

a algun modo de proyeccion que en este caso es MM ISOTROPIC, el cual es un modo

que se puede personalizar, permitiendonos manipular el tamano de las figuras cuando

se redimensione la ventana. SetViewportExt establece la medida del ancho del dibujo.

SetViewportOrg situa el origen logico 0,0 de coordenadas, en algun punto del area

de cliente (las funciones expuestas en la funcion Graficador son opcionales). SetPixel

dibuja un punto en la pantalla, las coordenadas que utiliza son referidas por un for y

por el resultado de las operaciones matematicas, para que estas operaciones se lleven

a cabo se necesita declarar la librerıa math.h al inicio de sintetizadorview.cpp.

Siguiendo con la aplicacion se pretende visualizar la octava de un teclado en la

vista principal. El primer paso es dibujar trece botones en el formulario, acomodelos de

tal forma que aparenten el tamano de una tecla blanca y una tecla negra como las del

teclado. Cuando creamos un boton de mapa de bits es necesario poner su propiedad

Owner Draw a valor true, esto hace que se visualice el mapa de bits dependiendo del

estado del boton, enseguida anadiremos dos mapas de bits por cada boton para que

aparenten una tecla, una para cuando la tecla este pulsada y otra para cuando este en

reposo, los mapas de bits deben ser creados por usted en cualquier programa de edicion

de imagenes (Paint Brush, Corel Draw, etc.) en nuestro caso usamos Macromedia

Flash. Ahora abra el editor de recursos para importar estas imagenes como recursos

de tipo bitmap, asigne a cada una de las imagenes un ID compuesto por el titulo del

boton (en nuestro caso BOTON) mas una letra U o D (Up, Down) correspondiente al

estado del boton, ponga los ID entre comillas para sean considerados como cadenas y

no como constantes (BOTONU, BOTOND). En el archivo sintetizadorview.h declare

un objeto miembro de CBitmapButton.

class CSintetizadorView : public CFormView{

public:

46

Page 56: INSTITUTO POLITECNICO NACIONAL¶max.esimez.ipn.mx/publicas/Sintetizador.pdfAng elica Correa Cid y Alejandra Correa Cid, les agradezco por mostrarme el camino para llegar hasta donde

CBitmapButton Boton1;// Overrides

}

Por ultimo, para cargar los recursos mapa de bits, el boton debe recibir el mensaje

AutoLoad, el cual tiene dos parametros: el ID del boton y la direccion al objeto. Esta

operacion se realiza desde la funcion miembro OnInitialUpdate.

void CSintetizadorView::OnInitialUpdate(){

CFormView::OnInitialUpdate();GetParentFrame()->RecalcLayout();ResizeParentToFit(false);

Boton1.AutoLoad(IDC_BOTON1, this);UpdateData(false);

}

Repita los pasos anteriores para los demas botones.

Cada vez que se pulsa un boton es generado el mensaje WM COMMAND, este

mensaje es manipulado por la funcion OnCommand, la cual se encargara de llamar a

la funcion fillplaybuffer y asignarle un valor dependiendo del boton pulsado. Ahora eje-

cute Class Wizard, seleccione la clase CSintetizadorView, el objeto CSintetizadorView

y el mensaje OnCommand, oprima el boton Add Function.. y enseguida Edit Code y

edite esta funcion de la siguiente manera, siguiendo la secuencia:

BOOL CSintetizadorView::OnCommand(WPARAM wParam, LPARAM lParam){

switch (wParam){case IDC_BOTON1:

raiz = pow(cua, -9);fillplaybuffer();break;

case IDC_BOTON2:raiz = pow(cua, -8);fillplaybuffer();break;

...

...

...case IDC_BOTON10:

raiz = 1;fillplaybuffer();

47

Page 57: INSTITUTO POLITECNICO NACIONAL¶max.esimez.ipn.mx/publicas/Sintetizador.pdfAng elica Correa Cid y Alejandra Correa Cid, les agradezco por mostrarme el camino para llegar hasta donde

break;.........

case IDC_BOTON13:raiz = pow(cua, 3);fillplaybuffer();break;

}

return CFormView::OnCommand(wParam, lParam);}

5.4. Programando el controlador driver de sonido

El parametro wParam, contiene el elemento del recurso que ha hecho que se envıe

este mensaje, de esta manera mediante el uso de un switch, se puede identificar el

boton sobre el que se ha pulsado. El valor raiz es enviado a la funcion fillplaybuffer,

este valor determinara la nota que tocara cada boton, esto se explicara mas adelante.

La funcion fillplaybuffer es la encargada de llenar un buffer con los datos de la

senal fundamental y sus armonicos, y de mandarlos de la tarjeta de sonido. Utilizan-

do AppWizard declare la funcion fillplaybuffer de tipo void y edıtela de la siguiente

manera:

void CSintetizadorView::fillplaybuffer(){

HWAVEOUT fd;WAVEFORMATEX wf;WAVEHDR wh;wf.wFormatTag = WAVE_FORMAT_PCM;wf.nChannels = 1;wf.nSamplesPerSec = SAMPLE_RATE;wf.wBitsPerSample = 8;wf.nBlockAlign = 1;wf.nAvgBytesPerSec = SAMPLE_RATE;wf.cbSize = 0;

waveOutOpen(&fd, WAVE_MAPPER, &wf, 0, 0, CALLBACK_NULL);

for(i=0;i<MAXBUF;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)));

48

Page 58: INSTITUTO POLITECNICO NACIONAL¶max.esimez.ipn.mx/publicas/Sintetizador.pdfAng elica Correa Cid y Alejandra Correa Cid, les agradezco por mostrarme el camino para llegar hasta donde

fAngle += 2 * pi * aH1*raiz/SAMPLE_RATE;fAngle2 += 2 * pi * aH1*2*raiz/SAMPLE_RATE;fAngle3 += 2 * pi * aH1*3*raiz/SAMPLE_RATE;fAngle4 += 2 * pi * aH1*4*raiz/SAMPLE_RATE;fAngle5 += 2 * pi * aH1*5*raiz/SAMPLE_RATE;fAngle6 += 2 * pi * aH1*6*raiz/SAMPLE_RATE;

if(fAngle > 2*pi){

fAngle -= 2*pi;}

if(fAngle2 > 2*pi){

fAngle2 -= 2*pi;}

if(fAngle3 > 2*pi){

fAngle3 -= 2*pi;}

if(fAngle4 > 2*pi){

fAngle4 -= 2*pi;}

if(fAngle5 > 2*pi){

fAngle5 -= 2*pi;}

if(fAngle6 > 2*pi){

fAngle6 -= 2*pi;}

}wh.lpData = son;wh.dwBufferLength = MAXBUF;wh.dwFlags = 0L;wh.dwLoops = 0L;

waveOutPrepareHeader(fd, &wh, sizeof(WAVEHDR));waveOutWrite(fd, &wh, sizeof(WAVEHDR));Sleep(150);waveOutReset(fd);waveOutUnprepareHeader(fd, &wh, sizeof(WAVEHDR));waveOutClose(fd);

}

Declare las variables; i como tipo entero, fAngle a fAngle6 como tipo double y

son[MAXBUF] como tipo CHAR. La estructura utilizada para el llenado de buffer es

49

Page 59: INSTITUTO POLITECNICO NACIONAL¶max.esimez.ipn.mx/publicas/Sintetizador.pdfAng elica Correa Cid y Alejandra Correa Cid, les agradezco por mostrarme el camino para llegar hasta donde

parecida a la funcion fillbuffer explicada en el capitulo 4, solo que en esta ocasion rea-

liza una serie de Fourier con los parametros antes mencionados. El parametro fAngle

recibe el valor de la barra horizontal, el cual tiene por default 440 Hz, al mismo tiempo

es multiplicado por un valor que corresponde al armonico en el que se encuentra y por

un valor raiz que es enviado por el boton que se pulso. Defina un parametro cua con

un valor de raız doceava de dos, este valor es el que determina el intervalo que hay de

una tecla a la siguiente, de esta manera en la funcion OnCommand, el parametro cua

es elevado a cierta potencia dependiendo del boton en el que se encuentre (nuestra

tecla central es la nota LA4) y se iguala a raiz (Ecuacion 5.1), el cual es enviado a

fAngle para determinar la nota. La frecuencia 440 Hz, se encuentra en el boton 10 y

es a partir de esta que se determinan las demas notas de la octava.

raiz = pow(cua,Boton); (5.1)

Defina las variables SAMPLE RATE con un valor de 11025, pi con un valor de

3.14159 y MAXBUF con un valor de 3200. Las estructuras utilizadas en esta fun-

cion ya han sido explicadas en el capıtulo 4, no olvide incluir el archivo de cabecera

mmsystem.h e incluir en las opciones de link la librerıa winmm.lib.

5.5. Resumen

En este capıtulo presentamos conceptos importantes para el diseno, tales como

sistema de coordenadas, pıxel, mapas de bits, recursos, entre otros. Al mismo tiempo

desarrollamos y explicamos los pasos a seguir para la implementacion del sintetizador,

mostrando cada uno de los principales programas para la manipulacion de audio

analogico.

50

Page 60: INSTITUTO POLITECNICO NACIONAL¶max.esimez.ipn.mx/publicas/Sintetizador.pdfAng elica Correa Cid y Alejandra Correa Cid, les agradezco por mostrarme el camino para llegar hasta donde

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, tales como el rango a las barras de

desplazamiento, el sonido que se produce al pulsar los diferentes botones, dibujar las

diferentes senales ocupadas, etc. En este capıtulo presentamos algunos resultados de

nuestro sistema Sintetizador y describiremos su operacion.

6.1. Ambiente de compilacion y generacion de codi-

go

Usando el lenguaje de programacion Visual C++, realizamos un tipo de com-

pilacion llamado release, con esto conseguimos generar un archivo ejecutable Sinte-

tizador.exe que podra ser ejecutado en cualquier sistema operativo Windows (95 o

superior). Para generar un archivo ejecutable .exe de tipo release, es necesario llevar

acabo los siguientes pasos; a) Seleccione la configuracion Win32 Release de la caja de

herramientas Set Active Project Configuration, que se encuentra en el menu Build de

la barra de herramientas, b) Al cambiar de un tipo de compilacion a otra, debera es-

pecificar en las opciones de linker la librerıa winmm.lib, para esto presione ALT+F7,

seleccione la pestana Link, escriba la librerıa en la caja de texto Object/library modu-

les y presione el boton OK para hacerla valida, c) Y por ultimo en el menu Build

de la barra de herramientas, de clic en la opcion Build Sintetizador.exe. Cabe men-

51

Page 61: INSTITUTO POLITECNICO NACIONAL¶max.esimez.ipn.mx/publicas/Sintetizador.pdfAng elica Correa Cid y Alejandra Correa Cid, les agradezco por mostrarme el camino para llegar hasta donde

Figura 6.1: Vista principal del sintetizador.

52

Page 62: INSTITUTO POLITECNICO NACIONAL¶max.esimez.ipn.mx/publicas/Sintetizador.pdfAng elica Correa Cid y Alejandra Correa Cid, les agradezco por mostrarme el camino para llegar hasta donde

cionar que con el tipo de compilacion Debug, el archivo ejecutable no operara en

PC’s (Personal Computer) que no cuenten con el software Visual C++ instalado.

Una vez creado el archivo ejecutable este se encontrara en la carpeta release, la cual

esta ubicada en la carpeta principal de nuestro proyecto.

6.2. Aspecto visual del sintetizador

Al dar doble clic en el archivo Sintetizador.exe se visualizara nuestra aplicacion ya

terminada, esta tendra un aspecto similar al mostrado en la Figura 6.1. En la esquina

superior izquierda de esta figura se encuentra un marco con el tıtulo Afinador que

contiene; una barra horizontal y una caja de texto. La barra horizontal tiene un valor

inicial de 440 Hz, un valor maximo de 466 Hz y un valor mınimo de 415 Hz, como se

muestra en la Figura 6.2, cuando el usuario actue sobre la barra esta modificara su

valor, el cual se visualizara en la caja de texto y sera enviado a la funcion que esta rea-

lizando la sıntesis (fillplaybuffer). Esta funcion es la encargada de llenar el buffer de

audio para ser enviado a la tarjeta de sonido, lo cual significa que de acuerdo con los

valores maximos y mınimos en la barra, las teclas pueden llegar a subir o a bajar un

tono, por lo tanto, la barra nos servira como un afinador. Cuando el usuario actue

sobre la barra podra modificar el tono de las teclas para que este sea de su agrado.

Figura 6.2: Valores mınimo, central y maximo de la barra horizontal.

Debajo del marco Afinador, se encuentra un marco con el tıtulo Amplitud que

contiene cinco barras verticales y cinco cajas de texto. Las barras representan la

amplitud de los armonicos de la senal fundamental utilizados, los cuales se pueden

visualizar en la parte inferior izquierda de la vista. En la parte inferior derecha se

53

Page 63: INSTITUTO POLITECNICO NACIONAL¶max.esimez.ipn.mx/publicas/Sintetizador.pdfAng elica Correa Cid y Alejandra Correa Cid, les agradezco por mostrarme el camino para llegar hasta donde

visualiza la senal resultante de la suma de los armonicos, la cual es enviada a la tarjeta

de sonido. Cuando el usuario actua sobre alguna de las barras verticales cambiara su

valor, el cual se visualizara en su respectiva caja de texto situada debajo de cada barra

como se muestra en la Figura 6.3. Las barras pueden obtener un valor mınimo de cero

y un maximo de dieciseis, esto es por razones de normalizacion, ya que en nuestro

programa fuente, la amplitud maxima de cada armonico es de treinta y dos, este

valor representa el 12.6% del 100% que nuestro buffer puede tocar sin distorsionar el

sonido (8 bits, de 0 a 254), siendo la senal fundamental la de mayor amplitud con un

37%. Cuando sumamos la senal fundamental con la amplitud maxima de los cinco

armonicos nos da el 100% de nuestro buffer.

Figura 6.3: Barras de desplazamiento verticales, con una amplitud modificada.

6.3. Control de parametros del sintetizador

Cuando el usuario actue sobre alguna de las barras su valor es enviado a la funcion

que se encarga de realizar la sıntesis para el llenado del buffer, al mismo tiempo es

enviado a una funcion encargada de graficar la senal fundamental, los armonicos

y la resultante (la funcion Graficador fue mostrada en el capıtulo 4). Por ejemplo,

cuando el usuario actua sobre la barra Arm 3 su valor es enviado a las funciones antes

mencionadas y se visualiza un cambio de amplitud en la senal ubicada en el marco

54

Page 64: INSTITUTO POLITECNICO NACIONAL¶max.esimez.ipn.mx/publicas/Sintetizador.pdfAng elica Correa Cid y Alejandra Correa Cid, les agradezco por mostrarme el camino para llegar hasta donde

con el titulo Tercer Armonico, que encontramos en la parte inferior izquierda de la

vista principal del proyecto, al mismo tiempo visualizamos un cambio en la senal

resultante ubicada en el marco con tıtulo Resultante, que encontramos en la esquina

inferior derecha de la vista de nuestro proyecto, como se muestra en la Figura 6.4.

Figura 6.4: Tercer armonico con amplitud modificada.

Cuando el usuario actua sobre la barra Arm 5 el valor de este es enviado a la

funcion Graficador y se visualiza un cambio de amplitud en la senal ubicada en el

marco con el tıtulo Quinto Armonico, que se encuentra en la parte inferior izquierda

de la vista principal del proyecto, al mismo tiempo visualizamos un cambio en la senal

resultante ubicada en el marco con tıtulo Resultante, que encontramos en la esquina

inferior derecha de la vista de nuestro proyecto como se muestra en la Figura 6.5.

6.4. Controlando los armonicos

El usuario puede actuar sobre varias barras modificando diferentes armonicos,

cuando esto ocurra los valores de las barras seran enviados a las funciones antes

mencionadas y se visualizara un cambio en los marcos situados en la parte inferior de

la vista principal de nuestro proyecto como se muestra en la Figura 6.6.

55

Page 65: INSTITUTO POLITECNICO NACIONAL¶max.esimez.ipn.mx/publicas/Sintetizador.pdfAng elica Correa Cid y Alejandra Correa Cid, les agradezco por mostrarme el camino para llegar hasta donde

Figura 6.5: Quinto armonico con amplitud modificada.

Figura 6.6: Todos los armonicos modificados

56

Page 66: INSTITUTO POLITECNICO NACIONAL¶max.esimez.ipn.mx/publicas/Sintetizador.pdfAng elica Correa Cid y Alejandra Correa Cid, les agradezco por mostrarme el camino para llegar hasta donde

La razon por la que utilizamos solamente cinco armonicos es por fines practicos,

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 numero de

armonicos que desee, modificando el proyecto desde Visual C++).

6.5. 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.7. El teclado esta conformado por 13 botones, que con

la ayuda de un par de mapas de bits simulan las teclas de un sintetizador, ya sean

en estado de reposo o presionadas como se muestran en la Figura 6.8, y su principal

objetivo es que el usuario tenga una vista mas amigable al interactuar con el proyecto.

Figura 6.7: Vista del Teclado.

El teclado cuenta con una frecuencia central de 440 Hz, que corresponde a la nota

LA4 y se encuentra ubicada en la tecla numero 10, es a partir de esta que se calcula

el valor de las demas teclas, multiplicando la frecuencia central por 12√

2 para subir

medio tono y se ubica en la tecla numero 11 y multiplicar la frecuencia central por

( 12√

2)−1 para bajar medio tono y se ubicara en la tecla numero 9, para las demas

teclas es necesario elevar el valor 12√

2 a una potencia positiva o negativa dependiendo

57

Page 67: INSTITUTO POLITECNICO NACIONAL¶max.esimez.ipn.mx/publicas/Sintetizador.pdfAng elica Correa Cid y Alejandra Correa Cid, les agradezco por mostrarme el camino para llegar hasta donde

de la tecla (para mayor informacion consulte el capıtulo 4). Estos valores son enviados

a la funcion fillplaybuffer mencionada en capıtulos anteriores, para realizar el llenado

del buffer y enviarlo a la salida de la tarjeta de sonido.

Figura 6.8: a)Tecla en reposo. b)Tecla pulsada.

A continuacion se muestra una tabla, con los valores que deben tener las barras

para asemejarse a un Oboe o a un Organo de Jazz, el sonido fue comparado con un

sintetizador marca CASIO, modelo CT-680:

Tabla 6.1: Valores de las barras de desplazamiento

INTRUMENTO Afinador Arm2 Arm3 Arm4 Arm5 Arm3OBOE 450 12 10 0 8 8Organo de Jazz 450 16 0 0 14 11

6.6. Resumen

En este capıtulo presentamos la utilizacion de nuestro proyecto mostrando grafica

y textualmente los principales pasos a seguir para su funcionamiento basico. Cabe

mencionar que en este proyecto no se utiliza MIDI (Music Interfaz Digital Instru-

ment), se utiliza audio analogico digitalizado.

58

Page 68: INSTITUTO POLITECNICO NACIONAL¶max.esimez.ipn.mx/publicas/Sintetizador.pdfAng elica Correa Cid y Alejandra Correa Cid, les agradezco por mostrarme el camino para llegar hasta donde

Capıtulo 7

Conclusiones y Trabajos Futuros

Esta tesis presento el diseno elemental de un sintetizador de notas musicales,

el cual describimos en un programa de computadora digital. Este dispositivo de

software produce sonidos mediante la generacion de senales periodicas y funciones

matematicas con la ayuda de elementos electronicos programados, tales como osci-

ladores, filtros, mezcladores de senales, etc. Fısicamente estos elementos son costosos

y ocupan grandes espacios, lo cual puede llegar a ser molesto para el usuario. Pen-

sando en esto ultimo, nos dimos cuenta que un modelo por software puede igualar

a un modelo por hardware y no ser estorboso, ya que lo unico que se necesita para

usarlo es una computadora digital (p.e. PC), que practicamente es necesaria en la

vida cotidiana de toda persona.

Para iniciar con la elaboracion de nuestro proyecto, primero debimos elegir un

lenguaje de programacion que permitiera disenar la interfase de usuario. Este lengua-

je deberıa ser accesible para el programador a fin de que los resultados obtenidos

pudieran observarse en una computadora estandar. El resultado de esta eleccion,

como ya se ha mencionado, fue el lenguaje de programacion Visual C++.NET, el

cual nos ofrecio ademas de su facil manejo, la oportunidad de crear objetos bastante

amigables para los usuarios. De esta manera, el diseno de nuestro sintetizador se ha

realizado con medios comunes en el mercado.

Desde un principio, las bases de nuestro proyecto estuvieron planteadas: crear

59

Page 69: INSTITUTO POLITECNICO NACIONAL¶max.esimez.ipn.mx/publicas/Sintetizador.pdfAng elica Correa Cid y Alejandra Correa Cid, les agradezco por mostrarme el camino para llegar hasta donde

senales senoidales para representar una sumatoria, en otras palabras, programar una

Serie de Fourier. 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. Lo anterior

fue logrado programando funciones matematicas en Visual C++.NET, algunas de es-

tas funciones fueron la suma, la multiplicacion y el seno. Con estas funciones, algunas

veces llamadas primitivas, programamos nuestra Serie de Fourier para comprobar

las sıntesis de onda, con esto obtuvimos un numero bastante grande de valores, los

cuales tenıamos que almacenar en memoria operativa (buffer de audio) con el fin de

tener un mejor control de los datos.

Una vez generada la sıntesis, el siguiente paso fue enviar los datos almacenados en

nuestro buffer, a otro buffer que se encuantra asociado al driver de la tarjeta de

sonido (una Sound Blaster). Sin embargo, al iniciar este proceso nos dimos cuenta de

la poca informacion que existe sobre como programar drivers de sonido. Encontramos

varios libros y notas que hablaban acerca de como enviar un archivo WAVE, previa-

mente grabado, a la tarjeta de sonido, pero lo anterior no era suficiente; fue hasta que

se consulto el artıculo de una revista que hablaba acerca de la generacion de audio

por medio de una onda senoidal, que pudimos avanzar en nuestro proyecto. Esto nos

ayudo enormemente en nuestra investigacion, sin embargo, el artıculo esta escrito en

ingles, lo cual reafirmaba la poca informacion disponible en este paıs al respecto.

Para enviar los datos almacenados en el buffer a la tarjeta de sonido, ocupamos

instrucciones de audio de bajo nivel que se encuentran en la biblioteca de funciones

multimedia mmlib.lib. Algunas de las instrucciones de audio mas importantes son;

WavePrepareHeader() que se encarga de preparar al buffer para ser enviado a la

tarjeta de sonido, y WaveOutWrite() que se encarga de sacar los datos de la tarjeta

de sonido a los altavoces de la PC; estos procesos se explican mas detalladamente en

el capıtulo 4 de esta tesis.

Hecho lo anterior, los siguientes pasos fueron sencillos. Para la distribucion de las

notas del teclado utilizamos el valor matematico raız doceava de dos, que representa

60

Page 70: INSTITUTO POLITECNICO NACIONAL¶max.esimez.ipn.mx/publicas/Sintetizador.pdfAng elica Correa Cid y Alejandra Correa Cid, les agradezco por mostrarme el camino para llegar hasta donde

el intervalo existente entre una nota y la siguiente (un semitono). El resultado de esta

operacion fue multiplicado por la frecuencia central utilizada (LA4=440Hz) con el fin

de encontrar la frecuencia de la siguiente nota (LA#), y ası sucesivamente. Cada uno

de estos valores fueron asignados a un boton ubicado en la vista principal y ası darle

el sonido de la nota correspondiente.

Para cambiar el timbre de nuestro sintetizador, controlamos las formas de onda

senoidales en su amplitud y frecuencia, esto se consiguio por medio de barras de

desplazamiento, asignandole el valor de dichas barras a las amplitudes y frecuencias

que se encuentran en la formula de la sıntesis de onda. De esta manera es posible no

solo escuchar algun instrumento como una trompeta o un oboe, sino tambien ver su

forma de onda al mismo tiempo.

En resumen, las principales contribuciones de esta tesis son las siguientes:

La realizacion de una Serie de Fourier con algoritmos de programacion y meto-

dos numericos.

La generacion de audio analogico por medio de una suma de senales.

La programacion de instrucciones de audio de bajo nivel con lo cual se facili-

tara la construccion software de drivers de sonido.

Tecnicas de graficacion en Visual C++.NET.

Y por ultimo, un sintetizador virtual para PC capaz de ejecutarse en sistemas

windows 95 o superior.

7.1. Trabajos Futuros

Continuando con los resultados de nuestra investigacion, presentamos algunas

sugerencias en cuanto a trabajos futuros. Pensamos que es posible implementar una

serie de elementos, en cuanto a estetica, funcionalidad, y aplicacion cientıfica.

61

Page 71: INSTITUTO POLITECNICO NACIONAL¶max.esimez.ipn.mx/publicas/Sintetizador.pdfAng elica Correa Cid y Alejandra Correa Cid, les agradezco por mostrarme el camino para llegar hasta donde

Respecto a la estetica, se puede mejorar la apariencia de las barras verticales y la

barra horizontal, mediante la implementacion de perillas giratorias en tercera dimen-

sion, ası mismo, perfeccionar la apariencia del teclado. Ademas es posible mejorar

la graficacion de las senales mediante la implementacion de color y aumento de la

resolucion de la grafica.

En cuanto a funcionalidad, se pueden efectuar varias acciones para el mejoramien-

to del proyecto. Por ejemplo, solo se cuenta con la frecuencia fundamental y cinco

de sus armonicos, que son senales senoidales. Para resolver esta limitante se puede

implementar una mayor cantidad del contenido armonico a nuestro sistema, median-

te la integracion de formas de onda cuadrada, cosenoidal, diente de sierra, etc. Esto

permite obtener una mayor variedad de instrumentos musicales, ya que cada forma

de onda cuenta con diferente contenido armonico. Ası mismo, es posible crecer la

funcionalidad de nuestro sintetizador en cuanto a la amplitud, tono y timbre, inte-

grando generadores de ruido (blanco o rosa) y envolventes de onda. Esto permite la

simulacion dinamica de los instrumentos musicales, mediante el control del ataque,

decaimiento, sostenimiento y la relajacion tal como se ha descrito en el capıtulo tres.

Ya que en nuestro trabajo cuenta solo con una octava en el teclado, en el futuro se

pueden implementar cuatro o mas octavas para obtener un rango mayor de frecuen-

cias. Ademas, se puede agregar una funcion para que el sintetizador pueda dividir el

teclado en dos partes. Es decir, si cuenta con cuatro octavas, las primeras dos tocarıan

un instrumento, por ejemplo el piano y las dos octavas restantes tocarıan un acordeon

como lo hacen los sintetizadores profesionales. Se puede perfeccionar el teclado, para

que puedan ejecutarse acordes, esto es, aumentar el numero de teclas que se tocan al

mismo tiempo.

Como ya se sabe, la principal funcion de un sintetizador es generar una gran

variedad de sonidos, que simulen instrumentos musicales. Por ello, a este proyecto se

puede agregar un selector de instrumentos, esto es, tener configurado el sistema para

que con una perilla, pueda seleccionar el instrumento o los instrumentos que se deseen

62

Page 72: INSTITUTO POLITECNICO NACIONAL¶max.esimez.ipn.mx/publicas/Sintetizador.pdfAng elica Correa Cid y Alejandra Correa Cid, les agradezco por mostrarme el camino para llegar hasta donde

tocar, por ejemplo un piano, un violın, una flauta, etc. Se tiene pensado realizar una

version comercial que pueda competir con la industria de los sintetizadores realizados

por software, en cuanto al costo y a la transportabilidad.

Respecto a las aplicaciones en la ciencia y en la tecnologıa los resultados obtenidos

pueden ser aprovechados en algunas areas como: Procesamiento de Senales Digita-

les (DSPs), reconocimiento de patrones de imagenes, reconocimiento de patrones de

sonido, e instrumentos de medicion como osciloscopios, generadores de funciones, me-

didores de ruido, e instrumentos de ultrasonido.

Por otra parte, para un musico puede ser de gran utilidad, ya que donde quiera

que el se encuentre haciendo su trabajo (tocando), si cuenta con una PC podra tener

a su alcance un sintetizador de sonidos. Ademas, en la educacion musical puede ser

de gran ayuda como material didactico, por ejemplo, aprender el orden de las notas

en un teclado e iniciarse dentro de la musica.

Por utlimo, cabe mencionar que esta tesis se ha desarrollado conjuntamente con

el Dr. Maximino Pena Guerrero y el Ing. Jose de Jesus Negrete, profesores de la

academia de acustica de la ESIME-Zacatenco. Actualmente se encuentran desarro-

llando mas proyectos en ciencia y tecnologıa acustica.

63

Page 73: INSTITUTO POLITECNICO NACIONAL¶max.esimez.ipn.mx/publicas/Sintetizador.pdfAng elica Correa Cid y Alejandra Correa Cid, les agradezco por mostrarme el camino para llegar hasta donde

Bibliografıa

[1] Beristain, Sergio, AUDIO Ed. Particular, Mexico D.F., Agosto de 1998, 201 pgs.(p: 10)

[2] Ceballos, Fco. Javier, Visual C++ Aplicaciones para Win 32, Alfaomega Ra-Ma,Mexico 2004, 717 pgs. (p: 38)

[3] Ceballos, Fco. Javier, Visual C++ Programacion Avanzada en Win 32, Alfa-omega Ra-Ma, Mexico 2000, 852 pgs. (p: 33)

[4] Floyd, Thomas, Dispositivos Electronicos, LIMUSA Noriega Editores, 1996,Coleccion Textos Politecnicos, 974 pgs. (p: 17)

[5] Moog Robert A., “Voltaje-Controlled Electronic Music Modules”, R. A. MoogCo., Trumansburg, New York, Journal of the Audio Engeering Society, january,1968, vol. 16 No. 1. pp. 200-206. (p: 36)

[6] Moog Bob., “MIDI: Musical Instrument Digital Interface”, Journal of the AudioEngeering Society, may 1986, v. 34 No. 5. pp. 394-404. (p: 35)

[7] Pena G. M., Captura de Multiples Eventos MIDI en Tiempo de Ejecucion”.Inedita. Mexico. Tesis presentada para aspirar al grado de Doctor en Cienciasen Ingenierıa Electrica. Centro de Investigacion y de Estudios Avanzados delInstituto Politecnico Nacional, 2005. 160 pgs. (p: 11)

[8] Petzold, Charles, ”Exploring Wave Form Audio Generating Sine Waves in Soft-ware”, PC Magazine, November 26, 1991, pp 505-510. (p: 32)

[9] Petzold, Charles, Programing Windows, Microsoft Press, 1999, 1479 pgs. (p: 28)

64

Page 74: INSTITUTO POLITECNICO NACIONAL¶max.esimez.ipn.mx/publicas/Sintetizador.pdfAng elica Correa Cid y Alejandra Correa Cid, les agradezco por mostrarme el camino para llegar hasta donde

Glosario

CAC: Computer Aided Composer, Composicion Asistida con Computadora. Colec-

cion de programas de software agrupados en un medio ambiente de computadora

digital que interactua con el usuario para estudiar, desarrollar, simular e interpretar

musica de cualquier tipo, incluyendo toda clase de sonidos.

Generador de tonos: Dispositivo electronico digital que puede generar una gran

variedad de sonidos musicales de acuerdo con las notas que recibe. Es un sinteti-

zador de sonidos similares a los producidos por instrumentos musicales. Se conecta,

a traves de la interfaz MIDI, a computadoras digitales o cualquier otro controlador

MIDI, los cuales envıan notas musicales en forma de comandos para reproducir la

musica de acuerdo con la informacion que tiene un archivo MIDI, u otra forma de

almacenamiento digital.

KL: Kernel for a musical Language, nucleo para un lenguaje musical. Compilador

de estructuras musicales desarrollado por el autor para estudiar el procesamiento

electronico de la musica. La entrada es un programa fuente que tiene cadenas de texto

escritas en lenguaje natural (do re mi[ fa sol sil fa]...) de las notas musicales

(solfeo). La salida son graficas, partituras, y/o el sonido de una cancion escrita en el

programa fuente.

MIDI: Musical Instrument Digital Interface, interfaz digital para instrumentos mu-

sicales. Protocolo de comunicaciones de hardware y software estandar disenado por

los fabricantes de instrumentos musicales electronicos.

Pentagrama: Grupo de cinco lıneas horizontales para escribir sımbolos graficos que

tiene el lenguaje musical y que determina una melodıa.

Sintetizador: Dispositivo electronico digital, similar a un piano, que puede generar

una gran variedad de sonidos musicales. Las notas son activadas por el sistema de

teclas, o tambien por aquellas que recibe a traves de su interfaz MIDI interconstruida

y conectada con computadoras digitales u otros dispositivos similares.

Sistema de tiempo real: Dispositivo que controla una aplicacion dedicada la cual

tiene restricciones temporales bien definidas.

65

Page 75: INSTITUTO POLITECNICO NACIONAL¶max.esimez.ipn.mx/publicas/Sintetizador.pdfAng elica Correa Cid y Alejandra Correa Cid, les agradezco por mostrarme el camino para llegar hasta donde

Solfeo: Lenguaje natural musical, compuesto por las sılabas do, re, mi, fa, sol, la

y si, para ensenar musica cantando.

Tiempo real: Momento actual de respuesta al procesamiento inmediato de datos

que interactuan con procesos fısicos.

UART: Unasynchronous Asynchronous Reciver Transmitter, transmisor y receptor

sıncrono asıncrono. Dispositivo electronico digital de comunicaciones serial que trans-

forma datos con formato serie a paralelo para recibir o transmitir informacion. La

velocidad de transferencia, cuando se utiliza en instrumentos musicales electronicos,

es de 32,250 Bauds lo que permite enviar y recibir, en promedio, hasta 142 notas

musicales en un segundo.

VLSI: Very Large Scale Integration (integracion a escala muy elevada). Tecnica de

fabricacion de circuitos integrados electronicos en espacios bastantes reducidos.

66

Page 76: INSTITUTO POLITECNICO NACIONAL¶max.esimez.ipn.mx/publicas/Sintetizador.pdfAng elica Correa Cid y Alejandra Correa Cid, les agradezco por mostrarme el camino para llegar hasta donde

Φ

67