Alguien necesita una librería MIDI en RealTime?

Discusión en general sobre Gemix.

Re: Alguien necesita una librería MIDI en RealTime?

Postby erkosone » Sat Apr 20, 2013 9:58 pm

Si Necro, puedes recibir los mensajes midi por un lado y enviarlos por otro, esto se puede hacer, tu recibes los mensajes y luego haces con ellos lo que quieras, está pensado para que te puedas hacer cualquier tipo de programa midi ;)

Te paso el link de la librería por si quieres indagar un poco mas sobre ella, si decides probarla es muy sencillo en windows, solo copia los archivos de la lib "release" en la carpeta de tu programa y haces un include al .h y en el linker del proyecto simplemente linkas el .lib y ale.. ya funcionará todo, es hiper simple de inicializar.

Lo que me ha costado mas es acceder al disp. de salida midi de mi PC por que no se llama igual que como lo pone en la web.. te dejo un código en c++ que funciona perfecto en windows 7, es muy similar al de la web pero verás que cambia el nombre del dispositivo midi ;)

Source Code (C++) [ Download ] [ Hide ]
  • #include <stdio.h>
  • #include <windows.h>
  • #include "MIDIIO.h"
  • int main () {
  •         unsigned char byMIDIMessage1[3] = {0x90, 0x3C, 0x64};  /* NoteOn Ch=0 Key=60 Vel=100 */
  •         unsigned char byMIDIMessage2[3] = {0x90, 0x3C, 0x00};  /* NoteOn Ch=0 Key=60 Vel=0 */
  •         MIDIOut* pMIDIOut = MIDIOut_Open ("Microsoft GS Wavetable Synth");
  •         if (pMIDIOut == NULL) {
  •                 printf ("MIDIOut_Open failed.\n");
  •                 return 0;
  •         }
  •         MIDIOut_PutMIDIMessage (pMIDIOut, byMIDIMessage1, 3); /* Press 'c' tone. */
  •         Sleep (1000); /* wait 3 seconds */
  •         MIDIOut_PutMIDIMessage (pMIDIOut, byMIDIMessage2, 3); /* Release 'c' tone. */
  •         MIDIOut_Close (pMIDIOut);  /* Close MIDI device */
  •         pMIDIOut = NULL;
  •         return 1;
  • }



@BigHead: Me alegro que te hayas decidido jeje, la verdad es que funciona muy bien, y es barato, y tiene varias cosas mas que lo hacen interesante "por eso lo he comprado":
- Velocity.
- Reverb.
- Chorus.
- Pan.
- Volume.
- CC Data.
- 128 programas.
- Pitch en tiempo real.
- Modulación en tiempo real.
Y mas cosas que no se usar XD..

Es un teclado midi que no hace sonidos, en realidad debe llamarse "midi maestro" y trae salida MIDI para conectar a sintetizadores reales, cosa que en breve quiero ponerme manos a la obra y montar mi SyntDuino jeje, sip, un sintetizador para chiptunes con entrada y salida MIDI creado con arduino, en youtube hay vídeos y me han dejado babeando..
User avatar
erkosone
 
Posts: 10654
Joined: Tue Feb 24, 2009 2:13 pm
Location: Barcelona.

Re: Alguien necesita una librería MIDI en RealTime?

Postby erkosone » Sun Apr 21, 2013 12:45 am

Podéis probar esto?
Es simplemente para ver si os funciona a todos o da problemas.. es un simple exe que manda un mensaje al dispositivo midi de windows, deberíais escuchar una nota de piano.

El dispositivo de salida está escogido en estático, por eso la prueba jeje.. para no complicar el código..
Para los curiosos:
Source Code (C) [ Download ] [ Hide ]
  • /* Play 'C' tone for 3 seconds. */
  • #include <stdio.h>
  • #include <windows.h>
  • #include "MIDIIO.h"
  • // Puerto de salida a usar..
  • MIDIOut* midiPort;
  • // Envio de mensajes cortos al api de la MIDIio..
  • int midiSendMsg( unsigned char msg_[2] )
  •     {
  •         MIDIOut_PutMIDIMessage( midiPort, msg_, 3 );
  •         return(0);
  •     }
  • // Cerrar el handle al dispositivo MIDI..
  • int midiClose()
  •     {
  •         if(midiPort != NULL) {
  •             MIDIOut_Close( midiPort );
  •             midiPort = NULL;
  •         }
  •         return(0);
  •     }
  • // Abrir el handle al dispositivo MIDI..
  • int midiOpen()
  •     {
  •         midiPort =  MIDIOut_Open("Microsoft GS Wavetable Synth");
  •         return(0);
  •     }
  • int main () {
  •         unsigned char msg1[3] = {0x90, 0x3C, 0x64};  /* NoteOn Ch=0 Key=60 Vel=100 */
  •         unsigned char msg2[3] = {0x90, 0x3C, 0x00};  /* NoteOn Ch=0 Key=60 Vel=0 */
  •     midiOpen();
  •         midiSendMsg(msg1); /* Press 'c' tone. */
  •         Sleep(3000); /* wait 3 seconds */
  •         midiSendMsg(msg2); /* Release 'c' tone. */
  •         midiClose();  /* Close MIDI device */
  •         return 1;
  • }
  •  
You do not have the required permissions to view the files attached to this post.
User avatar
erkosone
 
Posts: 10654
Joined: Tue Feb 24, 2009 2:13 pm
Location: Barcelona.

Re: Alguien necesita una librería MIDI en RealTime?

Postby necro_vampire » Sun Apr 21, 2013 1:08 am

Contrlador midi, diras...
luego los equipos se configuran como master-slave/s (en serie y/o paralelo)

los win 7 que he visto, no traian el GS Wavetable...
se que el viejo SYXG-50, no funcionaba, y creo que wingroove si...

prueba usar reason con el teclado...
Image
Rein (K´)ah Al-Ghul
Infected with the Krieger strain of the Human-MetaHuman Vampiric Virus.
User avatar
necro_vampire
 
Posts: 1372
Joined: Fri Oct 10, 2008 12:38 am
Location: Death Soul city???

Re: Alguien necesita una librería MIDI en RealTime?

Postby erkosone » Sun Apr 21, 2013 2:35 am

Bueno si, controlador midi es cualquier cosa midi de entrada, y un teclado maestro es hablando mal y rápido un piano que no suena XD.. que solo envía mensajes midi, o por lo menos es lo que me dicen los vendedores de las tiendas de barcelona.. que mas da.. :P

Uso Renoise, una maravilla de programa, y como secundarios el Schism Tracker y el Open Mod Plug Tracker.
User avatar
erkosone
 
Posts: 10654
Joined: Tue Feb 24, 2009 2:13 pm
Location: Barcelona.

Re: Alguien necesita una librería MIDI en RealTime?

Postby erkosone » Sun Apr 21, 2013 4:07 am

Bueno ya voy teniendo algo roy Div en uso pero todavía para C/C++.
El api es sumamente simple y permite acceder ya a varias funcionalidades básicas..

API "lo que ya está hecho y funciona":
- midiOpen();
- midiClose();
- midiSendMsg();
- midiSetInstrument();

Por ahora ya se puede seleccionar el instrumento dentro de la librería midi con el que se quiere tocar.. tengo que ver como asociar un instrumento a un canal y así poder tocar con varios instrumentos a la vez por que por ahora solo se hacer el código para un instrumento simultaneo..

Creo que servirá para guarrear con el midi en gemix XD..
User avatar
erkosone
 
Posts: 10654
Joined: Tue Feb 24, 2009 2:13 pm
Location: Barcelona.

Re: Alguien necesita una librería MIDI en RealTime?

Postby necro_vampire » Sun Apr 21, 2013 5:40 pm

erkosone wrote:Bueno ya voy teniendo algo roy Div en uso pero todavía para C/C++.
El api es sumamente simple y permite acceder ya a varias funcionalidades básicas..

API "lo que ya está hecho y funciona":
- midiOpen();
- midiClose();
- midiSendMsg();
- midiSetInstrument();

Por ahora ya se puede seleccionar el instrumento dentro de la librería midi con el que se quiere tocar.. tengo que ver como asociar un instrumento a un canal y así poder tocar con varios instrumentos a la vez por que por ahora solo se hacer el código para un instrumento simultaneo..

Creo que servirá para guarrear con el midi en gemix XD..

deberias revisar si la libreria es mono/poly, y si es posible ademas de asignar canales, asignar puertos (conjunto de 16 canales)

se podria hacer algo como un guitar hero o similares, usando un canal midi para mutear, por ejemplo un instrumento de la mezcla (si tocas bien, el sonido sigue en el volumen normal, si fallas se vuelve 0)
Image
Rein (K´)ah Al-Ghul
Infected with the Krieger strain of the Human-MetaHuman Vampiric Virus.
User avatar
necro_vampire
 
Posts: 1372
Joined: Fri Oct 10, 2008 12:38 am
Location: Death Soul city???

Re: Alguien necesita una librería MIDI en RealTime?

Postby erkosone » Sun Apr 21, 2013 5:46 pm

Añadido:
- setMidiModulation( midichannel, modulationValue );

Comienzo a portar toda la extensa lista de DSP´s disponibles como:

Modulation
Volume
Pan
Expresion
Hold Pedal
Reverb
Chorus
Delay
etc etc..

Preparaos para tener un sintetizador en gemix XD.. por lo menos en windows.. estoy probandolo y funciona mas que perfecto y muy preciso :D

@NecroVampire: Si, ya lo he implementado, puedes enviar DPS´s a los distintos programas o channels del dispositivo midi, estoy de lleno con esto mismo ahora mismo, las funciones que voy a crear son para acceder directamente a todos los DSP´s.
User avatar
erkosone
 
Posts: 10654
Joined: Tue Feb 24, 2009 2:13 pm
Location: Barcelona.

Previous

Return to General

Who is online

Users browsing this forum: No registered users and 8 guests