Escola Tècnica Supe io d’Enginye ia In o mà ica
Uni e si a Poli ècnica de València
Au oma ización de la salida de
con olado es MIDI no mo o izados
T abajo Fin de G ado
G ado en Ingenie ía In o má ica
Au o : Jaime Manuel Polo Es e e
Tu o : Luís José Saiz Adalid
CURSO ACADÉMICO 2014-2015
Au oma ización de la salida de con olado es MIDI no mo o izados
2
3
Resumen
Los con olado es MIDI pe mi en la ges ión ha dwa e del so wa e
musical. Como un eclado MIDI pe mi e la en ada de no as a un secuenciado
MIDI, cuando se ca ga un p oyec o en el secuenciado o cuando se cambian
alo es ges ionados po el con olado , como no se pueden mo e si no son
mo o izados, se pie de el alo . La solución que se p opone en es e p oyec o
consis e en in e cala un p og ama en e el con olado y el secuenciado , que
memo ice los alo es y pe mi a una ges ión pos e io más in eligen e del
con olado MIDI.
La solución que p opone es e p oyec o si e pa a pode u iliza
con olado es MIDI con con oles mo ibles sin es a mo o izados. Es a
p opues a se basa en un p og ama que in e p e a los alo es an e io es jun o
con los alo es apo ados po la en ada del con olado pa a o ece un alo
ap opiado.
Los alo es ap opiados son calculados según los dis in os algo i mos
p opues os en la solución:
Uno de es os algo i mos pe mi e ecoge el alo de en ada
independien emen e del alo an e io y mos a lo en el secuenciado .
O o algo i mo si e pa a hace que el alo sea buscado con el
con olado has a que sea encon ado y así sinc oniza los alo es de en ada y
salida.
Po úl imo, el más impo an e de los algo i mos, uno que pe mi e que el
alo del con olado en el secuenciado sea p opo cional al alo an e io que
iene el secuenciado eniendo en cuen a la posición inicial que iene el
con olado mo ible en el con olado MIDI de en ada.
Palab as cla e: Con olado MIDI, secuenciado MIDI, ha dwa e musical,
so wa e musical.
Au oma ización de la salida de con olado es MIDI no mo o izados
4
5
Resum
Els con olado s MIDI pe me en la ges ió del p og ama i musical pe
mi jà del maquina i. Com un ecla MIDI pe me l'en ada de no es a un
seqüenciado MIDI, quan es ca ega un p ojec e en el seqüenciado o quan es
can ien alo s ges iona s pel con olado , com no es poden mou e si no són
mo o i za s, es pe d el alo . La solució que es p oposa en es e p ojec e consis ix
a in e cala un p og ama en e el con olado i el seqüenciado , que memo i ze
els alo s i pe me a una ges ió pos e io més in el·ligen del con olado MIDI.
La solució que p oposa es e p ojec e se ix pe a pode u ili za
con olado s MIDI amb con ols mo ibles sense es a mo o i za s. Es a
p opos a es basa en un p og ama que in e p e a els alo s an e io s jun amb els
alo s apo a s pe l'en ada del con olado pe a o e i un alo ap opia .
Els alo s ap opia s són calcula s segons els dis in s algo i mes p oposa s
en la solució:
Un d'es os algo i mes pe me a eplega el alo d'en ada
independen men del alo an e io i mos a -ho en el seqüenciado .
Un al e algo i me se ix pe a e que el alo siga busca amb el
con olado ins que siga oba i així sinc oni za els alo s d'en ada i eixida.
Finalmen , el més impo an dels algo i mes, un que pe me que el alo
del con olado en el seqüenciado siga p opo cional al alo an e io que é el
seqüenciado enin en comp e la posició del con olado mo ible en el
con olado MIDI d'en ada.
Pa aules clau: Con olado MIDI, seqüenciado MIDI, maquina i
musical, p og ama i musical.
Au oma ización de la salida de con olado es MIDI no mo o izados
6
7
Abs ac
The MIDI ha dwa e con olle s allow music so wa e managemen . As a
MIDI keyboa d allows en y o no es o a MIDI sequence , when loading a
p ojec in he sequence o when alues managed by he con olle a e changed,
and hey canno be mo ed i hey a e no mo o ized, he alue is los alues a e
changed. The solu ion p oposed in his p ojec is o colla e a p og am be ween
he con olle and he sequence , o memo ize he alues and allow a mo e
in elligen MIDI con olle subsequen managemen .
The solu ion p oposed by his p ojec se es o use MIDI con olle s wi h
mo able non-mo o ized con ols. This p oposal is based on a p og am ha
in e p e s he abo e alues wi h he alues p o ided by he con olle inpu o
p o ide he app op ia e alue.
The app op ia e alues a e calcula ed o di e en algo i hms p oposed
in he solu ion:
One o hese algo i hms allows collec ing inpu alue ega dless o he
p e ious alue and displaying i in he sequence .
Ano he algo i hm is used o se he alue o be sea ched wi h he
con olle un il i is ound and hus synch onize he inpu and ou pu alues .
Finally, he mos impo an algo i hm, one ha allows he con olle
alue in he sequence being p opo ional o he p e ious alue o he sequence
conside ing he ini ial posi ion o he mo able con olle in he MIDI inpu
con olle .
Keywo ds: MIDI Con olle , MIDI Sequence , Music ha dwa e, Music
so wa e.
Au oma ización de la salida de con olado es MIDI no mo o izados
8
9
Tabla de con enidos
1 In oducción ........................................................................................ 13
1.1 Mo i ación .................................................................................... 13
1.2 Obje i os ....................................................................................... 16
2 Es ado ac ual ....................................................................................... 17
2.1 Al e na i as exis en es: en ajas y de iciencias ........................... 19
2.2 Concep os eó icos ........................................................................20
2.2.1 Sonido ......................................................................................20
2.2.2 Con e so es A/D y D/A ...........................................................20
2.2.3 Música ...................................................................................... 21
2.2.4 Sin e izado es .......................................................................... 21
2.2.5 Sample .................................................................................... 22
2.2.6 Con olado MIDI .................................................................... 23
2.2.7 Música po o denado . Ta je as de sonido. ............................ 25
2.2.8 Vi ualización de disposi i os audio y MIDI ........................... 25
3 Especi icación de equisi os ................................................................ 29
3.1 Requisi os ..................................................................................... 29
3.2 El P o ocolo MIDI ........................................................................ 30
3.2.1 Los mensajes MIDI .................................................................. 31
3.3 El sopo e mul imedia en Windows ............................................. 37
4 Diseño e implemen ación .................................................................... 43
4.1 Abs ación ..................................................................................... 44
4.2 Codi icación .................................................................................. 45
4.2.1 La clase win32 .......................................................................... 46
4.2.2 La clase Midiio ......................................................................... 51
4.3 Ejecución ...................................................................................... 59
4.4 Vídeo demos a i o ..................................................................... 60
5 Conclusiones y abajo u u o ............................................................. 61
5.1 Conclusiones ................................................................................. 61
5.2 T abajo u u o ............................................................................... 61
6 Bibliog a ía .......................................................................................... 63
Au oma ización de la salida de con olado es MIDI no mo o izados
16
1.2 Obje i os
El obje i o del p oyec o es la ealización de un p og ama que se si ua á
en e un secuenciado y un con olado median e comunicación MIDI. Po un
lado gua da á los alo es que se cambien en el secuenciado , es deci , se i á de
memo ia pa a alo es de con oles MIDI y po o o lado, ein e p e a á los
alo es que salen del con olado MIDI hacia el secuenciado dependiendo de
los alo es memo izados an e io men e desc i os.
He pensado en ealiza a ios ipos de in e p e ación de los alo es de
en ada al secuenciado en el caso de que se p oduzcan cambios en los alo es
de los con olado es de és e:
• Tipo no mal: Pa a es e caso el sis ema unciona á como si no
hubiese memo izado y el esul ado se á un cambio b usco en el
secuenciado . Como ocu e en el modelo ep esen ado en la
Ilus ación 1 pe o pa a el uso en la Ilus ación 3.
• Tipo busca : En el que no se en ia án da os al secuenciado has a
que se encuen e el alo que enía el secuenciado cuando se
cambió en él. Ve Ilus ación 3.
• Tipo p opo cional: En es e ipo se calcula á p opo cionalmen e el
alo a en ia al secuenciado eniendo en cuen a la di e encia
en e el alo del con olado MIDI y el del secuenciado . Ve
Ilus ación 3.
17
2 Es ado ac ual
La o ma que enemos de con ola los pa áme os de un secuenciado y
los módulos o plug-ins de e ec os e ins umen os es median e los con olado es
MIDI. Es os pueden se an o ha dwa e como so wa e, ísicos o i uales [1].
Ilus ación 4. Secuenciado , ins umen os y e ec os.
Los i uales necesi an de un sis ema in o má ico pa a unciona ,
mien as que los de ipo ha dwa e necesi an ene componen es elec ónicos en
o ma de bo ones, deslizan es, o a o ios, pads, e c.
Ilus ación 5. Mixe
Au oma ización de la salida de con olado es MIDI no mo o izados
18
Bo ones pa a pode simula conexiones o desconexiones, po ejemplo
ac i a o desac i a pis a, o pa a hace “mu e” o “solo”, e c. Pone la pis a en
modo “mu e” e i a en la ep oducción de la pis a cuando se ep oduce el
p oyec o. En cambio, aplica “solo” a la pis a hace que solo se ep oduzca dicha
pis a; el es o se silencia. En la Ilus ación 6 podemos e un con olado MIDI
de Ko g: Nano Kon ol[2].
Ilus ación 6. Nano Kon ol de Ko g
También podemos encon a deslizan es o o a o ios que comp enden
alo es en una escala de 0 a 127 pa a los dis in os alo es que pueden ene los
con olado es MIDI. Ve el p o ocolo MIDI en el apa ado 3.2. En la Ilus ación
7 podemos e el launch Con ol de No a ion[3].
Ilus ación 7. Launch Con ol de No a ion
19
También hay pads que pe mi en la ac i ación de una no a mien as se
es á pulsando y la desconexión de és a cuando se deja de pulsa , pa a
ep esen a la ejecución de una no a como en una ecla de piano o pe cusión.
Ve No e On y No e O en el apa ado 3.2.1. En la Ilus ación 8 podemos
encon a el MPD18 de Akai[4].
Ilus ación 8. MPD18 de Akai p o esional.
2.1 Al e na i as exis en es: en ajas y de iciencias
Hay muchas posibilidades ac ualmen e pe o odas ellas apo an en ajas
e incon enien es que siemp e hay que ene en cuen a.
Au oma ización de la salida de con olado es MIDI no mo o izados
20
Po un lado, enemos mesas con con olado es mo o izados que, como he
dicho an e io men e, pe mi en posiciona se in e p e ando el alo en el pun o
adecuado. Es e ipo de mesas son más ca as ya que los con olado es son más
ca os dado sus posibilidades y de los mo o es de los que es án compues as.
Po o o lado, exis en mesas que disponen de con olado es o a o ios
pe o de o ación in ini a y que ep esen an el alo median e algún led si uado
al ededo del con ol. El p oblema es que ese indicado led no es ino, no de ine
un alo cla amen e, y po lo an o más bien indica un in e alo de alo es.
En el caso que nos ocupa, hay mesas que disponen de con olado es con
limi ación de 0 a 127 (que es lo que se necesi a pa a ep esen a alo es MIDI) y
su alo ep esen ado se á el que ma quemos en ese momen o, el que es é en
ese momen o o p opo cional al que es é en ese momen o.
2.2 Concep os eó icos
2.2.1 Sonido
El sonido es la ansmisión de cambios de p esión en las moléculas del
ai e de una uen e que ib a al oído humano y la in e p e ación de es e po pa e
del ce eb o. Según el obje o y la mezcla de la ib ación de es os se p oducen los
dis in os sonidos. Además es a p opagación de las ondas sono as po el ai e
p oduce in e acciones con o os obje os. Se p oducen e lexiones en algunos
obje os y abso ciones en o os. Y al inal la suma de odo es o es lo que oímos e
in e p e amos como sonido.
2.2.1.1 Sonido analógico
Aquellos sonidos que son almacenados como di e encias de ol aje en
donde hay di e encias de p esión son analógicos. Es una o ma de almacena el
sonido median e una unción con inua del ol aje en el iempo.
2.2.1.2 Sonido digi al
Consis e en una ep esen ación disc e a del sonido (secuencia de alo es)
en el iempo. Pa a ello se oman un núme o de mues as cada segundo con una
esolución b de los dis in os canales. Po ejemplo, el sonido digi al en un CD
musical es á almacenado omando 44100 mues as de 16 bi s de amaño po
cada canal: 44100 x 16 x 2 = (ap ox.) 172 KBy es po segundo.
2.2.2 Con e so es A/D y D/A
Compues os de componen es elec ónicos que pe mi en la ansmisión
en e el sonido analógico y digi al
21
2.2.3 Música
La música es á o mada po los sonidos musicales. Los cuales ienen
dis in as aspec os íscos del sonido: al u as, imb es e in ensidades.
Las al u as es án de inidas po las escalas musicales que o man las no as
y po las oc a as. Son los doce semi onos que an desde do a do (do e mi a sol
la si do) con sus semi onos in e medios. La al u a iene que e con la ecuencia
del sonido
El imb e es como el ipo del sonido según la uen e. No es lo mismo el
sonido p oducido po un Do de lau a que un Do de gui a a. Tienen imb e
dis in o. El imb e es el colo del sonido.
La in ensidad se mide en decibelios y pod íamos deci que es “lo ue e
que es á el sonido”. La in ensidad se e ie e a la ampli ud del sonido.
2.2.3.1 Música elec ónica
Música gene ada con disposi i os elec ónicos. Véase los sin e izado es.
2.2.4 Sin e izado es
En la música adicional, los ins umen os gene an los dis in os ipos de
sonidos. Con la llegada de la música elec ónica apa ecen los sin e izado es. Los
sin e izado es son disposi i os elec ónicos que median e elemen os sencillos
gene an los dis in os sonidos. Es os elemen os sencillos es án compues os
no malmen e de oscilado es elec ónicos que combinados pueden incluso imi a
a los adicionales. Se aplican o os elemen os pa a consegui el en ol en e,
e ec os, il os, e c.
Ilus ación 9. Sin e izado Roland TB-303.
Au oma ización de la salida de con olado es MIDI no mo o izados
22
Se u ilizan algunas écnicas pa a gene a los sonidos que c ean los
sin e izado es.
Po ejemplo, la sín esis adi i a, u iliza la écnica de suma de ondas
sencillas (sinusoidales) pa a o ma el sonido. Se basa en el Teo ema de Fou ie .
Con la modulación de ecuencia (FM) ambién es posible gene a
sonidos que a eces esul an pa ecidos a cie os ins umen os.
La sín esis de abla de ondas consis e en la digi alización de sonidos
eales pa a almacena los y pos e io men e gene a ins umen os basados en
ellos. Es os sonidos son almacenados en la ROM de los disposi i os que
disponen de es a écnica. Incluso se oman mues as a dis in as al u as e
in ensidades de ins umen os na u ales pa a luego o ma los en la sín esis del
sonido de salida y da un esul ado de imi ación excelen e.
En la Ilus ación 9 podemos encon a una imagen del amoso
sin e izado y línea de bajo, Roland TR-303[ 5 ]. Tiene capacidades de
secuenciado y pe mi e aplica il os y e ec os. Incluso exis en e siones
i uales de es e como el ya obsole o ReBi h[6].
2.2.5 Sample
Los “sample s” son disposi i os elec ónicos que pe mi en ep oduci
sonidos. Es os sonidos deben se in oducidos p e iamen e en su memo ia. Es a
memo ia RAM puede se ca gada con bancos de sonidos e ins umen os.
Después, median e MIDI pueden se leídos esos sonidos y ep oduci los.
Ilus ación 10. Sample modula pa a ack. Akai p o esional.
23
2.2.6 Con olado MIDI
T as la c eación de los p ime os sin e izado es, se pensó como
conec a los en e sí pa a así ep oduci más sonidos y c ea ins umen os con
sonidos más icos. Con las posibilidades de la comunicación digi al se c eó un
p o ocolo de comunicación es anda izado pa a conec a disposi i os que lo
incluían. Así apa eció el MIDI (Musical Ins umen s Digi al In e ace): In e ace
digi al pa a ins umen os musicales.
Cualquie disposi i o que incluía la especi icación MIDI disponía de la
posibilidad de conec a se con o o disposi i o MIDI median e una se ie de
conec o es y unos cables especiales.
El MIDI p o ocó que muchos de los disposi i os que an es incluían
eclado, gene ado u oscilado es de sonido, e ec os, e c. se sepa a an. Es o
pe mi ía mayo modula idad y un dec emen o en el p ecio de los disposi i os.
Luego ya se uni ían median e los cables o mando un sis ema.
Los cables ienen un conec o de ipo DIN de 5 con ac os y los
disposi i os pueden dispone de di e en es conec o es.
Ilus ación 11. Conec o es MIDI.
Según la Ilus ación 11 podemos e los di e en es conec o es de en ada
o salida que puede ene un disposi i o MIDI. MIDI In pe mi e conec a o os
disposi i os MIDI de en ada. MIDI Ou pe mi e conec a disposi i os de salida
a los que an los da os después de se p ocesados en el disposi i o. MIDI Th u
pe mi e una conexión di ec a en e el disposi i o que es é conec ado en MIDI In
a la salida que es é conec ada en MIDI Ou , es deci , los da os que en en po
MIDI In se copian a MIDI Th u[7].
Au oma ización de la salida de con olado es MIDI no mo o izados
24
Fue on apa eciendo los dis in os disposi i os MIDI:
• Teclados MIDI: Disposi i o de da os de en ada. Al ca ece ,
no malmen e, de gene ado y/o p ocesado de sonido, se llaman
ambién eclados maes os. Solo gene an no as y da os MIDI.
• Sin e izado : gene ado de sonidos po sín esis. Disposi i o de
salida.
• Módulos sample : gene ado de sonidos po abla de ondas.
Disposi i o de salida.
• MIDI me ge
• MIDI pa chbay
• Pads de pe cusión. Disposi i o de da os de en ada.
• Gui a as MIDI. Disposi i o de da os de en ada.
• Violines MIDI. Disposi i o de da os de en ada.
• Ins umen os de ien o MIDI. Disposi i o de da os de en ada.
• Secuenciado es. Disposi i o pa a g aba los da os de en ada
MIDI, edi a los y en ia los hacia o os disposi i os MIDI de
salida.
• Con olado MIDI. Disposi i o gené ico de da os de en ada.
Ilus ación 12. Teclado maes o MIDI Beh inge UMX25.
25
2.2.7 Música po o denado . Ta je as de sonido.
G acias a los con e so es analógico-digi al y digi al-analógico, es posible
digi aliza sonido con mic ó onos y ep oduci sonido con o denado es
median e al a oces, espec i amen e. De es a mane a se inicia on las
posibilidades mul imedia en in o má ica.
Hoy en día odos los o denado es incluyen una a je a de sonido con
múl iples en adas y salidas. Además los sis emas ope a i os incluyen la ges ión
de és a de o ma p ede e minada.
Las a je as de sonido en gene al disponen de un módulo enca gado del
audio y o o módulo enca gado del MIDI. La pa e audio dispone de las
en adas y salidas (con e so es D/A y A/D), módulos de e ec os DSP, e c. La
pa e MIDI comp ende los conec o es de en ada y de salida MIDI.
2.2.8 Vi ualización de disposi i os audio y MIDI
La e olución de los o denado es ha pe mi ido que cie os disposi i os se
puedan ans o ma de elec ónicos a i uales, de ha dwa e a so wa e.
Algunos sin e izado es y secuenciado es pueden encon a se en e sión
so wa e, así como los con olado es MIDI. Todos es os con la e sa ilidad que
p opo ciona la p og amación po o denado . Es e paso ha pe mi ido que en un
mismo o denado con i an los mismos ipos de disposi i os que se pueden
encon a en e sión ha dwa e pe o en e sión so wa e.
Disposi i os que podemos encon a i ualizados:
• Secuenciado es: Como ya he dicho pe mi e la cap u a, edición y
ep oducción de da os MIDI pe o ac ualmen e además pe mi e la
cap u a de audio, su secuenciación e incluso la posibilidad de
aplica e ec os sin sali de él con la u ilización de módulos
i uales de e ec os. También pe mi e el uso de ins umen os
i uales.
Ejemplos: Cubase, P oTools, Li e, Reape , e c.
• Cable MIDI i ualizado, pe mi e conec a los dis in os
disposi i os MIDI i ualizados.
• Ins umen os i uales: Como su nomb e indica, ins umen os,
bien gene ado es po sín esis i ual bien sample s i uales con
memo ia pa a almacena mues as y que luego ep oducen según
la ejecución de la no a musical co espondien e. Disponen de
conexiones i uales MIDI.
Au oma ización de la salida de con olado es MIDI no mo o izados
32
Ilus ación 16. Canales MIDI.
Cuando u ilizamos un secuenciado , sob e odo si es po so wa e, cada
pis a que a a almacena / ep oduci da os MIDI iene seleccionado un canal
MIDI de e minado. El eclado suele es a con igu ado po de ec o pa a en ia
mensajes MIDI en el canal 1.
Ilus ación 17. Pis as MIDI
En onces podemos hace que el secuenciado cambie el canal en el
mensaje cuando seleccionamos que canal a a escucha la en ada MIDI . En la
Ilus ación 17 podemos e que los mensajes del eclado son del canal 1 pe o el
secuenciado los aduci á al canal 3 pues o que la escucha es á seleccionada en
la pis a que es á con igu ada con es e canal. Como podemos obse a los
secuenciado es p opo cionan una cie a lexibilidad an o pa a la en ada de
da os MIDI como pa a el en ío de es os.
Teclado
MIDI
Sin e i
zado
Canal 1
MIDI
in
MIDI
ou
MIDI
in
MIDI
h u
Sample
Canal 2
Mensaje al canal 1
Mensaje al canal 1. No
in e p e ado. El sample
espe a mensajes pa a el
canal 2
Mensaje een iado sin p ocesa
Teclado
MIDI
Canal 1
Canal 1
Canal 2
Escucha en ada MIDI
Canal 3
Canal 4
…
Canal 16
33
Los mensajes de sis ema no ienen asociado un canal y son de es ipos:
mensajes comunes del sis ema como MIDI Time Code (MTC), mensajes de
sis ema de iempo eal que se u ilizan pa a sinc oniza disposi i os y mensajes
de sis ema exclusi o que pe mi e a los ab ican es de disposi i os ag anda sus
ca ac e ís icas de o ma no es ánda .
Vamos a cen a nos en los mensajes de canal y su es uc u a in e na.
En gene al los mensajes MIDI ienen un amaño mínimo de dos by es y
un amaño máximo de es by es. El p ime o se llama de es ado (STATUS
BYTE) y los dos siguien es de da os (DATA 1 y DATA 2). Ve Ilus ación 18. El
e ce by e de da os es opcional, es deci , que hay mensajes en los que iene
sen ido y se u iliza, y o os en los que no se u iliza.
Ilus ación 18. Mensaje MIDI.
El by e de es ado siemp e empieza con un bi a 1. Los siguien es 3 bi s
ep esen an el ipo de mensaje y los cua o siguien es al núme o de canal. De
es e by e se puede deduci que el máximo de canales son 16 ya que 2 alo es
posibles en cada una de las 4 posiciones: 24=16 . Del 0000 al 1111 que
ep esen an al canal 1 y 16 espec i amen e. Los de da os siemp e empiezan con
el p ime bi a 0 po lo an o solo se pe mi en 128 alo es dis in os (de 0 al 127)
en cada by e de da os. Es deci , del 00000000 al 01111111. De aquí se deduce
que cie os da os y con oles engan un alo que siemp e es á den o de ese
in e alo de alo es.
Au oma ización de la salida de con olado es MIDI no mo o izados
34
Ilus ación 19. Desc ipción de los mensajes MIDI.
En cambio, en el ipo de mensaje Pi ch Bend se combinan los by es de
da os pa a o ma un único da o con su by e menos signi ica i o (LSB) y su by e
más signi ica i o (MSB) de o ma que se ob ienen alo es ep esen ados po 14
bi s, 214 =16384 (del -8192 al 8191)[11].
En la Ilus ación 19 podemos e los ipos de mensajes de canal
disponibles. Los de ipo “No e On” y “No e O ” se u ilizan pa a hace sona
no as y pa a las en el iempo con una cie a onalidad y un cie o olumen. Los
de ipo “A e ouch” son in e p e ados po el disposi i o pa a que cambie el ipo
de p esión que se ha ía sob e el ins umen o al oca lo (p esión en la ecla o
cue da, e c.). Hay mensajes pa a selecciona el ipo de sonido (el ins umen o
seleccionado).
Con “P og am Change” podemos selecciona uno de los ins umen os que
el disposi i o puede ejecu a . Como se puede deduci ácilmen e (solo se usa un
by e de da os) cada disposi i o puede ene como máximo 128 ins umen os.
Y po úl imo, “Con ol Change”, es un ipo de mensaje que pe mi e
cambia alguna de las ca ac e ís icas en la ejecución del ins umen o. El p ime
by e de ine uno de los 128 ipos de con oles. El segundo by e, de ine el alo
pa a ese con ol especi icado. Po ejemplo, el con ol 7 suele co esponde al
olumen del canal, el con ol 1 cambia la modulación, los con oles 91 y 93
suelen co esponde con la aplicación del e ec o de e e be ación y co o
espec i amen e, e c.
35
Es impo an e el hecho que no es obligado que el disposi i o enga esos
con oles ubicados con los mismos códigos, es deci , el con ol 7 puede
co esponde a o a ca ac e ís ica dis in a en o o disposi i o. Lo que ocu e es
que se conside a un es ánda el hecho de u iliza siemp e los mismos núme os.
De odas o mas cualquie disposi i o siemp e debe i acompañado de su “hoja
de especi icación MIDI” en la que apa ezcan los con oles disponibles.
En la Ilus ación 20 se puede e lo que se ía la hoja de especi icaciones o
implemen ación MIDI[ 12 ] del sin e izado Yamaha DX1. Como es un
disposi i o de salida, es e econoce cie os con oles ( e columna “ ecognized”
en la Ilus ación 20) muchos de ellos es ánda . Lo mismo ocu e con “P og am
Change”, hay un es ánda Gene al MIDI (GM) que especi ica el uso de cada uno
de los códigos pa a el by e de da os 1. En la Ilus ación 21 se puede e como
es e es ánda especi ica una lis a de ins umen os a los que co esponden los
códigos de p og ama.
Si un disposi i o, como un módulo de sonido, cumple el es ánda GM
end á odos los ins umen os mencionados en la Ilus ación 21 y pod á se
seleccionado con el código asociado en un mensaje de “P og am Change” (en
bina io: 1110 0000, 0111 1111, es deci , “P og am Change” del canal 1
seleccionando el p og ama 127 gun sho ). Ojo, de 1 a 128 en la lis a co esponde
al da o de 0 a 127.
El p oyec o que nos ocupa se enca ga á de escucha los con oles MIDI
que ienen del disposi i o de en ada (con olado MIDI) y que ienen del
secuenciado pa a memo iza los, modi ica los según sea el caso y een ia los de
nue o al secuenciado . Ve de nue o la Ilus ación 3.
Au oma ización de la salida de con olado es MIDI no mo o izados
36
Ilus ación 20. Especi icaciones MIDI del sin e izado Yamaha DX1.
37
Ilus ación 21. Gene al MIDI. P og am change.
3.3 El sopo e mul imedia en Windows
Windows nos p opo ciona dos mé odos pa a la p og amación
mul imedia: Uno es el acceso median e comandos MCI y el o o median e las
lib e ías mul imedia que o man pa e del API de Windows. Toda la
documen ación sob e el API de Windows se puede encon a en el MSDN de
Mic oso [13].
Los comandos MCI (Media Con ol In e ace) pe mi en la ges ión de los
dis in os disposi i os mul imedia que se pueden con ola en el sis ema. Los
comandos son los mismos pa a la odos los disposi i os lo cual acili a la
p og amación de cada uno de los dis in os disposi i os pe o po o o lado, es a
gene alización, no pe mi e un con ol pe sonalizado de las ca ac e ís icas
p opias del disposi i o. Cuando decimos disposi i os mul imedia decimos, po
Au oma ización de la salida de con olado es MIDI no mo o izados
38
ejemplo, CDaudio, Video digi al, Cap u a de ideo, Escáne de imágenes,
Secuenciado MIDI, A chi os wa , e c.
Todos se pueden ges iona con es os comandos iden i icando el ipo de
disposi i o y el ipo de acción a ealiza median e cadenas de ex o. Exis en
comandos pa a odos los disposi i os que pe mi en ab i , ce a y empeza la
ep oducción con las cadenas “open”, “close”, y “play”. Los disposi i os ambién
se ep esen an con cadenas de ex o, po ejemplo, “cdaudio” pa a ep oduci un
compac disk de audio, “sequence ” pa a ep oduci MIDI o “wa eaudio” pa a
ep oduci un iche o wa , e c.
Median e un “MCI command s ing” nos comunicamos con el
disposi i os diciéndole lo que que emos que haga. Po ejemplo, en iándole
“play cdaudio” se pond ía a ep oduci el cd de audio, o “pause cdaudio” se
pa a ía la ep oducción.
En nues o caso, el mé odo median e comandos MCI no soluciona
nues o p oblema de ecoge los da os de en ada ni de la salida de los
disposi i os MIDI. Es deci , de maneja mensajes MIDI y ex ae los da os
in e nos. Pa a ello u iliza emos las unciones del API mul imedia de Windows.
El segundo mé odo de que dispone Windows pa a p og ama con
disposi i os mul imedia, más conc e amen e MIDI, es median e su API.
Windows p opo ciona una lib e ía DLL, winmm.dll, con unciones que
pe mi en p og ama an o con comandos MCI como el acceso a bajo ni el de los
disposi i os mul imedia.
En el caso de MIDI nos p opo ciona las dis in as unciones enume adas a
con inuación:
• midiConnec
• midiDisconnec
• midiInAddBu e
• midiInClose
• midiInGe De Caps
• midiInGe E o Tex
• midiInGe ID
• midiInGe NumDe s
• midiInMessage
• midiInOpen
• midiInP epa eHeade
• MidiInP oc
• midiInRese
• midiInS a
• midiInS op
• midiInUnp epa eHeade
• midiOu CacheD umPa ches
• midiOu CachePa ches
• midiOu Close
• midiOu Ge De Caps
• midiOu Ge E o Tex
• midiOu Ge ID
• midiOu Ge NumDe s
• midiOu Ge Volume
• midiOu LongMsg
• midiOu Message
• midiOu Open
• midiOu P epa eHeade
• MidiOu P oc
• midiOu Rese
• midiOu Se Volume
• midiOu Sho Msg
• midiOu Unp epa eHeade
• midiS eamClose
39
• midiS eamOpen
• midiS eamOu
• midiS eamPause
• midiS eamPosi ion
• midiS eamP ope y
• midiS eamRes a
• midiS eamS op
Y las es uc u as de da os siguien es:
• MIDIEVENT
• MIDIHDR
• MIDIINCAPS
• MIDIOUTCAPS
• MIDIPROPTEMPO
• MIDIPROPTIMEDIV
• MIDISTRMBUFFVER
De odas las unciones an e io es amos a descub i el signi icado de las
que se an a u iliza en el p oyec o así como el o ma o de los da os, las
es uc u as de da os y el mé odo de p og amación. Pa a más in o mación no
con enida en es e pun o es necesa io acudi a MSDN de Mic oso o lib os sob e
el API de mul imedia de Windows. En es a memo ia solo se comen a á la
in o mación más ele an e pa a la comp ensión del p oyec o.
Pa a sabe qué núme o de disposi i os MIDI hay conec ados en el
sis ema se u ilizan las unciones midiInGe NumDe s y midiOu Ge NumDe s
los cuales de uel en el núme o de disposi i os MIDI de en ada y de salida,
espec i amen e. Es as unciones de uel en un alo en e o de 16 bi s sin signo
que puede ene un alo mayo o igual a 0 que signi ica el núme o de
disposi i os en cada caso.
Ilus ación 22. Ob ene capacidades de los disposi i os MIDI.
Una ez a e iguado el núme o de disposi i os es posible sabe algunas
ca ac e ís icas del disposi i o como el núme o de índice en el sis ema o el
nomb e que se le ha a ibuido, e c. Pa a ello se u iliza sob e los disposi i os de
en ada y los de salida las unciones midiInGe De Caps y midiOu Ge De Caps,
espec i amen e. Ve Ilus ación 22. Es as unciones equie en de 3 pa áme os
obliga o ios. El p ime o de ellos el índice en el sis ema (puede se de 0 a el
núme o de disposi i os ob enidos con las unciones midiInGe NumDe s o
midiOu Ge NumDe s menos 1). El segundo pa áme o es un pun e o a una
a iable con la es uc u a MIDIINCAPS o MIDIOUTCAPS en su caso.
Au oma ización de la salida de con olado es MIDI no mo o izados
40
Ilus ación 23. Capacidad de los disposi i os MIDI.
En la es uc u a MIDIINCAPS, el miemb o más impo an e es la cadena
de ex o szPname que almacena el nomb e del disposi i o de en ada. Con
espec o a la es uc u a MIDIOUTCAPS, ambién se puede ob ene el nomb e
del disposi i o además de cie os da os como el núme o de oces que sopo a el
disposi i o, el ipo de sin e izado (si es no mal, FM, de abla de ondas o po
so wa e, e c.) y o as ca ac e ís icas menos ele an es al y como puede e se
en la Ilus ación 23.
Po úl imo, el e ce pa áme o co esponde al amaño de la a iable que
con end á los da os es uc u ados.
Ilus ación 24. Ab i disposi i os MIDI
En odo caso, es necesa io ab i el disposi i o pa a pode ges iona lo y
después ce a lo como si de un iche o se a a a. Es o mismo se ealiza con las
41
unciones midiInOpen, midiOu Open, midiInClose y midiOu Close. Ve
Ilus ación 24.
Ilus ación 25. Función CallBack.
Es as unciones equie en de algunos pa áme os comunes como el
iden i ica i o del disposi i o a se abie o o ce ado en su caso. Más
conc e amen e en el caso de la ape u a de un disposi i o pa a la en ada de
da os MIDI (midiInOpen) es necesa io especi ica un pun e o a una unción que
se enca ga á de ecoge los da os p opo cionados po el sis ema desde el
disposi i o. Es e ipo de unciones son del ipo CALLBACK_FUNCTION
( unciones de e ollamada) que es o o de los pa áme os que hay que
especi ica en la ape u a del disposi i o de en ada. Es a unción la de ine el
usua io según el modelo de la Ilus ación 25 y se á la que p ocesa los da os que
ecibe del disposi i o de en ada cada ez que es e los en íe al sis ema. Más
adelan e e emos cómo se han implemen ado dichas unciones “callback” en la
solución que se p opone en el p oyec o median e el p og ama MIDIm. También
como se manejan los da os MIDI de los disposi i os de en ada y como se
p epa an pa a la salida hacia los disposi i o de salida.
Una ez abie o el disposi i o ya es amos en disposición de ecibi da os a
a és de la unción de “callback” de inida en el uso de la unción midiInOpen y
de en ia da os con la unción midiOu Sho Msg al y como se de ine en la
Ilus ación 26.
Ilus ación 26. En ia da os MIDI.
El p ime pa áme o hmo es el manejado que iden i ica al disposi i o al
que se le a a en ia el pa áme o dwMsg. Es e úl imo pa áme o con iene los
by es del mensaje de acue do al o ma o de mensaje MIDI al y como se mues a
en la Ilus ación 18. El pa áme o dwMsg es alo de 4 by es. Los 3 p ime os
by es empezando po la pa e baja co esponden al by e de es ado, el by e de
Au oma ización de la salida de con olado es MIDI no mo o izados
48
Pa a pode usa las unciones de Winmm.dll en C# es necesa io aduci
a es e la de inición de los ipos de da os y de las unciones de mmsys em.h.
En la Ilus ación 27 y Ilus ación 28 se mues a la clase win32 al
comple o.
En el caso del p og ama del p oyec o se han u ilizado las siguien es
ans o maciones de ipos en la clase win32[15]:
• Las cons an es se de inen mayo i a iamen e como en e os de 32
bi s po lo an o se han de inido en C# con el p e ijo public cons
in
• Los da os de ipo WORD en el API de Windows co esponden a
un alo de 16 bi s en e o po lo an o se ienen que ans o ma
en C Sha p al ipo de da o In 16.
• Pa a los alo es de ipo DWORD que es un ipo de 32 bi s exis e la
co espondencia en C# como In .
• Hay alo es en el API de Windows del ipo TCHAR. Es os
co esponden al ipo s ing en C#. Son de ipo cadena de
ca ac e es.
• El ipo MMVERSION co esponde con uno de ipo UINT que es de
32 bi s, po lo an o la ans o mación en C# se ealiza a In .
• Pa a los da os es uc u ados es necesa io especi ica que
man ienen un o den en memo ia consecu i o. Hay que pone
delan e de la de inición de la es uc u a el p e ijo
[S uc Layou (Layou Kind.Sequen ial)].
• El ipo DWORD_PTR se u iliza pa a de ini un pun e o de amaño
32 bi s. En nues o caso se usa como a iable pun e o a la unción
MidiInP oc de inida en el p og ama MIDIm po lo an o la
ans o mación eque ida es a In . Se usa una a iable de ipo In
po que es un alo que pasamos noso os a la unción. Aunque no
es un alo con el que pode hace calculo ma emá icos y si
ep esen a una di ección de memo ia en donde se encon a á la
unción MidiInP oc de inida de usua io.
• Hay casos, como en el caso de ecibi pun e os, es deci ,
di ecciones de memo ia. Así que hacemos mención a una
e e encia ecibida pues es un da o que hay que a a po C#
como pun e o. Es el caso de, e Ilus ación 24, la unción
49
midiInOpen del API de Windows en el que LPHMIDIIN
co esponde con un ipo de pun e o. Pa a es e caso se hace
e e encia en la de inición en C# como e In P , pun e o
e e encia al disposi i o MIDI abie o. Es e pun e o es el que se
pasa a la unción MidiInClose pa a que se cie e la comunicación
con ese disposi i o.
• En C# hay que especi ica de qué iche o se impo a la unción
median e el p e ijo [DllImpo ("winmm.dll")]. También hay que
indica public s a ic ex e n an es del ipo de uel o po es as
unciones pa a pode ene acceso a ellas en C#.
Au oma ización de la salida de con olado es MIDI no mo o izados
50
Ilus ación 28. La clase win32. De inición de unciones o mé odos.
Una ez de inidas es as cons an es, es uc u as y unciones es necesa io
an epone el p e ijo win32 y un pun o pa a hace e e encia a es as. Po ejemplo
en el código se hace la de inición de las a iables que an a almacena la
di ección de memo ia de la unción que a a con ola las en adas de da os
MIDI de es a mane a: win32.MidiInP oc mipEn 1, mipEn 2;
51
4.2.2 La clase Midiio
La clase Midiio es una clase ins anciable que si e pa a ges iona la
en ada y salida MIDI. Y o ece las siguien es ca ac e ís icas:
• Se p oduce una lec u a de la con igu ación an e io de pue os
usados y ipo inicial de uncionamien o almacenada en el iche o
“MIDIm.sa ”.
• También se p epa a la ma iz que a a almacena los da os de los
con oles MIDI desde la en ada y salida.
• Aquí se ab en y cie an los disposi i os MIDI.
• O ece p opiedades y mé odos públicos que se án usados po la
clase que ins ancia Midiio.
• Además, en es a clase se de inen ambién las unciones callback
que se enca ga án de la lec u a de da os del disposi i o MIDI.
La codi icación de odas es as ca ac e ís icas se pueden comp oba más
adelan e en el código expues o en la Ilus ación 30.
A con inuación se an a documen a las p opiedades y mé odos públicos
que o ece Midiio:
• oid inicia () lee la con igu ación de disco gua dada e
inicializa el alo an e io a un alo no posible (-1 po ejemplo)
• oid e mina () gua da la con igu ación a disco y cie a odos
los disposi i os abie os
• s ing[] ob ene En adas() ob iene un ec o de “s ings” con los
nomb es de los disposi i os de en ada cuyo índice los iden i ica á
en el p og ama.
• s ing[] ob ene Salidas() ob iene un ec o de “s ings” con los
nomb es de los disposi i os de en ada cuyo índice los iden i ica á
en el p og ama.
• Las p opiedades dispEn Sec, dispEn Con ol, dispSalSec pe mi en
consul a el núme o asociado de disposi i o o es ablece lo
ab iendo el disposi i o en ese momen o. Los núme os asociados
co esponden con el índice del a ay de s ing que esul a de
ob ene En adas() o ob ene Salidas() en su caso.
Au oma ización de la salida de con olado es MIDI no mo o izados
52
• La p opiedad dispTipo pe mi e conoce el ipo seleccionado o
es ablece lo. Los núme os asociados co esponden con el índice
de inido secuencial de 0 a 2 en ob ene Tipos():
s ing[] = { "No mal", "Busca ", "P opo cional" };
• Las p opiedades que almacena el e o : e o Ab i DispEn Sec,
e o Ab i DispEn Con ol y e o Ab i DispSalSec. Es as
p opiedades si en pa a consul a las en cualquie momen o y
ep esen an el e o de la úl ima ape u a. Se u ilizan pa a mos a
una especie de indicado es “leds” de e o en la en ana ( e de si
odo ha ido bien). Ve Ilus ación 32.
Con es as p opiedades y mé odos públicos se accede de o ma ex e na a
las posibilidades de Midiio. Con espec o a los mé odos y p opiedades in e nas
puede consul a el es o de código más adelan e en la Ilus ación 30.
Uno de los mé odos más impo an es co esponde a la de inición de las
unciones callback del ipo MidiInP oc pa a cada uno de los disposi i os y po
cada ipo de uncionamien o. Vamos a documen a es os mé odos.
La es uc u a gené ica de la unción MidiInP oc pa a odas las unciones
de es e ipo en el p og ama consis e en la mos ada en la Ilus ación 29.
Ilus ación 29. Esquele o MidiInP oc
Reco demos que la unción se ejecu a cuando hay nue os da os de
en ada en el disposi i o al que se la ha asociado. En el código de la Ilus ación
29 se puede e que p ime o se comp ueba si el mensaje es de ipo canal (solo
53
nos in e esan los con oles que a ec an a cada canal. Como ya se ha is o, 128
po canal. A con inuación y si es o es así, es un mensaje de canal, hay que
a e igua si es con ol MIDI. Pa a ello se ob ienen los da os, los 3 by es, del
mensaje MIDI con el pa áme o dwPa am1. El p ime by e consis e en el es ado
y el canal. El es ado iene que se en bina io 1011 (B en hexadecimal) pa a que
sea un “con ol change”. Si es de ipo con ol se ealiza á el código que haya en
el ec ángulo azul. Ve Ilus ación 19 y ex o asociado.
En cada momen o es a án a la espe a 2 unciones de es e ipo. La que
pe mi e ecoge la en ada del secuenciado y la que pe mi e ecoge la del
disposi i o con olado MIDI. En el segundo caso depende á de la unción del
ipo de uncionamien o seleccionado pa a que sea una u o a. En o al 4
unciones de ipo MidiInP oc de inidas: en ada del secuenciado , en ada del
con olado pe o p ocesando con ipo “no mal”, en ada del con olado pe o
p ocesando con ipo “busca ” y en ada del con olado pe o p ocesando con
ipo “p opo cional”. Se han de inido 4 unciones MidiInP oc po conside a que
es mejo que el código es é odo secuencial en memo ia y así no dependa de
unciones o mé odos llamados.
A con inuación se p esen a el código de la clase Midiio:
Au oma ización de la salida de con olado es MIDI no mo o izados
54
55
Au oma ización de la salida de con olado es MIDI no mo o izados
56
57