ecni- l´´´exico deral. · 2017-08-07 · kl : 5 cunciona´ • r dise˜m´usica. •...
TRANSCRIPT
Conecting MIDI to KL ponkl.tex pg: 1
CONNECTING MIDI TO KL
Maximino Pena Guerrero1
Escuela Superior de Ingenierıa Mecanica y Electrica del Instituto Politecni-co Nacional, Unidad Profesional Adolfo Lopez Mateos, Zacatenco, MexicoDistrito Federal.
1[ponkl.tex : portada.tex][MPG220914]
Conecting MIDI to KL ponkl.tex pg: 2
OBJETIVO
Describir como funciona el lenguaje KL.
Presentar una descripcion del sistema MIDI
Describir una metodologıa para ampliar KL con interfase MIDI.
Explicar como funciona el sonido MIDI.
Presentar codigo fuente de las funciones MIDI.
Describir los drivers de sonido para diversos sistemas operativos.
• Presentar el diseno y descripcion formal de KL (Kernel for a mu-sic Language) un lenguaje computacional orientado al procesamiento deelementos musicales y senales acusticas.
Conecting MIDI to KL ponkl.tex pg: 3
• Proporcionar al compositor profesional, al investigador, al desarrolladorde musica, y a la ensenanza, un medio ambiente de desarrollo musical CAC(Computer Aided Composer).
• Proporcionar un laboratorio para la la simulacion de una orquesta conmusicos digitales MIDI (Musical Instrument Digital Interface) conecta-dos en red, procesamiento de partituras y la generacion de los sonidos decada instrumento musical.
Conecting MIDI to KL ponkl.tex pg: 4
PROBLEMATICA:
Los problemas que se presentan tanto al compositor musical profesio-nal como a los investigadores del procesamiento digital de partituras eningenierıa musical son los siguientes:
• Un compositor no cuenta con un simulador orquestal automatico quele permita comprobar sus partituras.
• Una orquesta de “carne y hueso” consume muchos recursos durante eldesarrollo de una composicion.
• Los ingenieros musicales no cuentan con un lengueje orientado a lasimulacion orquestal de tal forma que sea posible controlar la dinamica decada musico electronico-digital.
• Los lenguajes existentes no son de codigo abierto (FINALE, PROTO-OLS, CAKEWALK, QBASE, entre otros).
Conecting MIDI to KL ponkl.tex pg: 5
COMO FUNCIONA
• KL es un lenguaje KL (Kernel for a music Languaje), es un compiladordisenado para el procesamiento digital de la musica.• Consiste de un nucleo de software (kernel) que contiene todas las fun-
ciones basicas necesarias para realizar dicho trabajo.• KL esta dividido en tres bloques principales: el analizador lexico, anali-
zador sintactico, y el analizador semantico.• KL permite generar instrucciones para MusicTeX, y este a su vez genera
instrucciones para TeX, el cual permite mostrar una partitura y enviarla ala impresora.• Puede funcionar como interprete de comandos. Con esta opcion, el
usuario interactua mediante una terminal de consola de tal forma que losresultados se muestran inmediatamente.• La entrada a KL puede ser un archivo.kl que puede contener la descrip-
cion de una cancion (p.e. do do mi sol do do! reb), o bien escribir las notascon el teclado de la consola• La salida de KL es el sonido de una melodıa y su pentagrama grafico.
Conecting MIDI to KL ponkl.tex pg: 6
BLOQUES DE KL:
Conecting MIDI to KL ponkl.tex pg: 7
CODIGO FUENTE PARA KL:
Conecting MIDI to KL ponkl.tex pg: 8
CODIGO FUENTE PARA KL:
titulo(POLITECNICO)autor(Perez Prado)date(2-12-76)inst(Sax Alto)tempo(c)tono(fa mayor)clave ( sol )-- inicio de cancion
--compas 0sbeam(s, 1, 0, do)ebeam(1) do
--compas 1barra(lr)setbarra(1)dacapo(up)
Conecting MIDI to KL ponkl.tex pg: 9
CODIGO DE SALDA KL:
Conecting MIDI to KL ponkl.tex pg: 10
DEFINICION BAKUS NAUR FORM DE KL:
1
Descripcion formal dellenguaje KL
<statment> :: <notas>*|<commands>*<notes> :: <notac><accidente> :: b|#<numero> :: <-integer>..<+integer><digito> :: 0|1|2|3|4|5|6|7<tiempo> :: w|h|n|c|f|sf<volumen> :: p|pp|ppp|f|ff|fff<plica> :: up|dn<bcuadro> :: bc<flat> :: tst<circunf> :: cir<puntos> :: pt|rp<tbarra> :: s|d|rl|rr|rlr<modificadores> :: (<numero>,<tiempo>,<volumen>
,<plica>,<bcuadro>,<flat>,<circunf>,<puntos>)
<nota> :: do|re|mi|fa|sol|la|si<notac> :: nota[accidente]
[modificadores]<commands> :: <command><command> :: <autor><barra><casilla>
<clave><comment><cresendo><dacapo><date><decresendo><dupla><ebeam><etie><exit><inst><liga><melodia><newline><ojo><repite><sil>/<rest><sbeam><setbarra><setclave><setplica><stie><tempo><titulo><tono><triada><tupla>
<autor> :: <autor><(><string><)><barra> :: <barra>[<(><tbarra><)>]<casilla> :: <casilla><(><1|2><)><clave> :: <clave><(><sol|fa><)><comment> :: <comment><string><cresendo> :: <cresendo><(><1|2|3|4><)><dacapo> :: <dacapo><(><up|md|dn><)><date> :: <date><(><string><)><decresendo> :: <decresendo><(><1|2|3|4><)><dupla> :: <dupla><(><s|d|t><plica>
<nota><nota><)><ebeam> :: <ebeam><(><numero><,>
<nota><)><etie> :: <etie><(><1|2|3|4|5|6|7|8|
9|0><)><exit> :: <exit><inst> :: <inst><(><string><)><liga> :: <liga><(><statment><)><melodia> :: <melodia><(><statment><)><newline> :: <newline><ojo> :: <ojo><(><plica><)><repite> :: <repite><sil>/<rest> :: <sil>/<rest><(><timepo><)><sbeam> :: <sbeam><(><s|d|t><numero>
<numero><nota><)><setbarra> :: <setbarra><(><numero><)><setclave> :: <setclave><(><sol|fa><)><setplica> :: <setplica><(><up|dn><)><stie> :: <stie><(><numero><notac><)><tempo> :: <tempo><(><num/num|c|C><)><titulo> :: <titulo><(><string><)><tono> :: <tono><(><nota>[<accidente>]
<mayor|memor><)><triada> :: <triada><(><tbarra><notac>
<notac><notac><)><tupla> :: <tupla><(><s|d|t><notac>
<notac><notac><notac><)>
Conecting MIDI to KL ponkl.tex pg: 11
DECLARACION statment
/*=============================================** statment -declaracion de entrada.**=============================================*/int statment()/*** <statment>::=[<notas>]|[<commands]*/
Conecting MIDI to KL ponkl.tex pg: 12
{tipoToken=BEGINLINE;for(;;){tokenAnt=tipoToken;getToken();notas();commands();if (match(COMENTARIO)) break;if (match(ENDLINE)) break;if (match(SCANEOF)) break;
}
}
Conecting MIDI to KL ponkl.tex pg: 13
ANALISIS DE NOTAS
• Cada nota puede tener un accidente (bemol o sostenido).• Pueden venir algunos parametros opcionales, todos ellos encerrados
entre parentesis redondos separados por comas como por ejemplo: do, re,do!, re(1,w,!), mi"(2,h,!,p) etc.
• La representacion general de una nota compuesta es:
<notac>::=<nota> [<accidente>][(<modificadores>)]
donde nota puede ser do, re, mi fa, sol, la, si. La palabra accidentepuede ser un sostenido (!) o un bemol ("). Los modificadores estan en-cerrados entre parentesisis redondos separados por comas que pueden serel valor de una nota como redonda (w), blanca (h) corchea (n) forte (f,)medio forte (!,) fortisimo (!f), piano (p), pianito (pp) o pianisimo(ppp).
Conecting MIDI to KL ponkl.tex pg: 14
DECLARACION statment
/*=============================================** notas -entrada al analisis sintactico notas.**=============================================*/int notas(){/*** <notas>::=<nota>[<accidente>][(<modificadores>)]*/
if (match(COMMAND)) return(OK);
if (match(NOTA)&&tokenAnt==COMMAND) {doCommands();nota();return(OK);}
Conecting MIDI to KL ponkl.tex pg: 15
if (match(NOTA)&&tokenAnt==BEGINLINE) {if (TEX) printf("\\notes");nota();return(OK);}
if (match(NOTA)&&tokenAnt==RPAREN) {nota();return(OK);}
if (match(NOTA)&&tokenAnt==NOTA) {doNotas();nota();return(OK);}
Conecting MIDI to KL ponkl.tex pg: 16
if (match(ACCIDENTE)&&tokenAnt==NOTA){accidente();return(OK);}
if (match(LPAREN)&&tokenAnt==NOTA){modificadores();return(OK);}
if (match(LPAREN)&&tokenAnt==ACCIDENTE){modificadores();return(OK);}
Conecting MIDI to KL ponkl.tex pg: 17
if (match(ENDLINE)&&tokenAnt==NOTA) {doNotas();if (TEX) printf("\\enotes");printf("\n");return(OK);}
if (match(ENDLINE)&&tokenAnt==ACCIDENTE) {doNotas();if (TEX) printf("\\enotes");printf("\n");return(OK);}
if (match(ENDLINE)) return(OK);if (match(SCANEOF)) return(OK);return(ERROR);}
Conecting MIDI to KL ponkl.tex pg: 18
INTERFACE DE COMANDOS KL:
Conecting MIDI to KL ponkl.tex pg: 19
CONEXION TIPICA DEL SISTEMA MIDI:
MIDICONTROLADOR
OUTIN TRUE
MIDI MIDI MIDI MIDI MIDI
TRUETRUETRUETRUETRUEININININ IN
CNXTIP.FIG
INST 1 INST 2 INST 3 INST 4 INST n
322 notas/seg. 3,225 bytes/seg.
Conecting MIDI to KL ponkl.tex pg: 20
PROBLEMA: EXTRACCION DE DATOS:
ANALOX.FIG
G1
G2
G3
G5
G4
G6
G7
G8
G9
A
GRABACION
CONVERTIDORANALOGICO
DIGITAL
Punto comun a todas las fuentes.
1011 1000 1100 1100
Conecting MIDI to KL ponkl.tex pg: 21
ESPECIFICACION HARDWARE MIDI:
+ 5V
+5V
4
35
2
1
14
25
3
35
2
14
MIDIIN
MIDITRUE
MIDIOUT
D1 1N914
PC−9001
2Vo
5V
5
NC
NC
NC
NC
NC
NC
NC
Rc 220
Ra 220
Rc 220
Rd 270 Rb 220
A
A
Tx
Rx
UART6850
HARDWARE ESTANDARD PARA MIDI
Ra 220
ESPHRD.FIG
Conecting MIDI to KL ponkl.tex pg: 22
ESPECIFICACION SOFTWARE MIDI:
Conecting MIDI to KL ponkl.tex pg: 23
ACTVACION Y APAGADO DE NOTA:
8 0 34 6 59 0 34 6 5
EVENOTA.FIG
ENCENDER NOTA (NoteOn) APAGAR NOTA (NoteOff)
NOTA VOLUMEN NOTEOFF NOTA VOLUMENNOTEON
Tiempo de Nota (delta time)
Conecting MIDI to KL ponkl.tex pg: 24
Hilo principal
H0
H12
H6
H11
H7
H14
H1
H5
H3
H4
H10
H2
Hn H13
H8 H9
[hilos1.ppt - ps]�
Conecting MIDI to KL ponkl.tex pg: 25
MUCHOS PROCESOS/HILOS DEDICADOS EN PARALELO
1
1hilos.tex, hilos2.ps. MPG081013
1
Conecting MIDI to KL ponkl.tex pg: 26
TARJETA DE SONIDO
Dr. Maximino Peña Guerrero
Sistema MIDI MidiIn MidiOut
D/A A/D Sistema WAV
Driver WAV
Driver MIDI BUS BUS
M A
Conecting MIDI to KL ponkl.tex pg: 27
Cómo funciona el driver de audio
Mezclador por Software
Mezclador por Hardware
Buffer Primario Buffers por Software
Buffers por Hardware
Tarjeta
de
Sonido
(secundarios)
Fuente: bargen98 p. 192
Altavoces
Conecting MIDI to KL ponkl.tex pg: 28
SISTEMA DE SONIDO NATIVO: CoreAudio
• CoreAudio es una interfase de software de bajo nivel que permite desa-rrollar aplicaciones de entrada y salida de audio digital en el sistema ope-rativo Mac OSX de Apple.• Funciona con base en la tecnica de flujo de datos (streams) la cual
permite procesar en paralelo varios canales de audio para implementar unaconsola mezcladora con varios sonidos independientes.• Desafortunadamente las funciones desarrolladas con CoreAudio no son
transportables a otros sistemas operativos: solamente corren en sistamasdesarrollados por Apple.• Para resolver este problema de transportabilidad utilizamos una biblio-
teca de funciones abierta: OpenAL.1
1[ di t ][MPG071313]
Conecting MIDI to KL ponkl.tex pg: 29
BIBLIOTECA DE FUNCIONES DE SONIDO: OpenAL
• OpenAL (Open Audio Library) es un sistema abierto que contiene unconjunto de funciones que permite programar la entrada y salida de audiosobre varios sistema operativos: UNIX, Mac OSX, Linux, MS-Windows,entre otros.• OpenAL trabaja con tres objetos basicos. (1) una fuente (source), (2)
un oyente (listener), y (3) una zona de memoria (bu!er).• Una fuente contiene apuntadores a una o varias zonas de memoria, si
como la velocidad, orientacion, e intensidad del sonido a procesar.• Un oyente contiene parametros necesarios para la reproduccion del soni-
do como son velocidad, posicion, orientacion, y volumen. Es posible definirvarios oyentes, pero solo uno de ellos se activo.• Una zona de memoria contiene muestras de audio de 8 o 16 bits (mo-
nofonico o estereo) en formato PCM, y se encuentra vinculada al hardwaredel sistema de sonido de la computadora.
1
1[ l t ][MPG071313]
Conecting MIDI to KL ponkl.tex pg: 30
DEVICE No. 1
SOURCE 2 SOURCE 3 SOURCE 4SOURCE 1
BUFFER 1 BUFFER 2 BUFFER 3 BUFFER 4
CONTEXT No. 1LISTENER
Conecting MIDI to KL ponkl.tex pg: 31
BUFFER S1
BUFFER S2
BUFFER Sn
BUFFER Hn
BUFFER H2
BUFFER H1
DEVICE No. 1
PRIMARY BUFFER
SOU
ND
DR
IVER
S
SOFTWARE BUFFERS
HARDWARE BUFFERS
SOFWAREMIXER
(CIRCULAR BUFFER)
MIXER(CIRCULAR BUFFER)
drvsonido.fig
HARDWARE
Conecting MIDI to KL ponkl.tex pg: 32
Xcode: Ejemplo de programacion
1
1senoal.tex, psenoAl.ps. MPG081013
1
Conecting MIDI to KL ponkl.tex pg: 33
DEVICE No. 1
SOURCE 2 SOURCE 3 SOURCE 4SOURCE 1
BUFFER 1 BUFFER 2 BUFFER 3 BUFFER 4
CONTEXT No. 1LISTENER
Conecting MIDI to KL ponkl.tex pg: 34
FUNCIONAMIENTO• Para generar un tono de 1000 Hz se utiliza la seccion de codigo que
se encuentra entre las lıneas 35 y 41 donde se utiliza el vector de memoriavecData, el cual contiene una coleccion de datos x0, x1, x2,cdots , xn,para n = N-1 donde N=20000.• Para genarar un dato se utiliza la funcion sin(x) cuyo resultado se
multiplica por 32267 para tener datos de audio de 16 bits con rango de-32267 a + 32267 (0000H a FFFFH). El periodo que corresponde a 1000Hz en 11025 muestras es un incremento de 0.09 seg• alcOpenDevice() (lınea 43) abre uno de los dispositivos de audio.• Un dispositivo es una abstraccion representativa del sistema de hardware
de sonido de una iMac.• alcCreateContext() (lınea 46) crea un contexto (context) para vincular a
un un oyente (listen) y la fuente de sonido (source) a efecto de proporcionaralgunas caracterısticas del audio.• alcMakeContextCurrent() (lınea 49) crea un contexto especıfico del
sonido que se va a reproducir.1
1[funs1.tex][MPG071313]
1
Conecting MIDI to KL ponkl.tex pg: 35
FUNCIONAMIENTO (cont ...)• alGenBu!ers() (lınea 53), genera y prepara uno de los bu!ers internos
al sistema de hardware de sonido en el cual se depositaran los datos quecontiene el vector vecData.• alBu!erData() lınea (56) realiza una copia de los datos de vecData y
los coloca en iuno de los bu!ers creados por alGenBu!ers, ademas colo-ca tambien los parametros de la reproduccion digital como bits/dato, lacantidad de datos del bu!er, y la frecuencia de muestreo.• alGenSources() (lınea 62) crea una fuente de sonido (pueden ser mas).
Para esteblecer algunas propiedades extras del sonido, como por ejemplopunto flotante, ganacia, y maxima ganancia, se utiliza la funcion alSourcef()(lınea 65),• alSourceQueueBu!ers() coloca uno junto a otro cada bu!er (aquı solo
se utiliza un unico bu!er) en una fuente (lınea 68).• alSourcePlayv() realiza la reproduccion del sonido (lınea 71) durante
un segundo proporcionado por la funcion sleep() (lınea 74).1
1[funs2.tex][MPG071313]
1
Conecting MIDI to KL ponkl.tex pg: 36
FUNCIONAMIENTO (cont ...)
• Finalmente la funcion alSourceStop() (lınea 76) detiene el sonido y serestablece el sistema de audio de la computadora;
• Se borran las fuentes con alDeleteSources() (lınea 77) y los bu!ers conalDeleteBu!ers() (lınea 78),
• Se destruye el contexto con alcDestroyContext() (lınea 79), y por ulti-mo se cierra el dispositivo con alcCloseDevice() (lınea 80), y se libera lamemoria que ocupa el vector vecData.
1
1[funs3.tex][MPG071313]
1
Conecting MIDI to KL ponkl.tex pg: 37
CONCLUSIONES:
• Se presento lo mas relevante del diseno del lenguaje KL para escrituraen lenguaje natural notas musicales tal como un alumno ”solfea”duranteel aprendizaje de los primeros conceptos musicales.• La ventaja de escribir notas con sus nombres naturales (no con sımbolos
especiales) es la facilidad que tiene un musico para escribir una partiturasin tener que aprender caracteres especiales.• El lenguaje KL y su compilador es una interfase entre el escritor de
partituras y un sistema de impresion grafica.• Un compositor escribe un programa fuente el cual describe una partitu-
ra, traduce este programa con el compilador KL a sımbolos en MusicTeX,se genera un programa fuente en TeX el cual genera codigo binario paragraficos de pantalla o una impresora.
Conecting MIDI to KL ponkl.tex pg: 38
• KL integra todo un medio ambiente para facilitar la composicion demusica.• KL visualiza pentagramas en una terminal grafica como Xwindows
(UNIX/Linux), OpenGL, MS-Windows.• KL cepta y genera archivos en formato MIDI a sintetizadores para
reproducir el sonido, entre otras funciones especiales.
Conecting MIDI to KL ponkl.tex pg: 39
GRACIAS...
http://www.max.esimez.ipn.mx