Page 2 of 2

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

Posted: Sat Apr 20, 2013 9:58 pm
by erkosone
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 ;)

[Codebox=cpp file=Untitled.cpp]#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;
}[/Codebox]


@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..

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

Posted: Sun Apr 21, 2013 12:45 am
by erkosone
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:
[Codebox=c file=Untitled.c]/* 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;
}
[/Codebox]

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

Posted: Sun Apr 21, 2013 1:08 am
by necro_vampire
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...

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

Posted: Sun Apr 21, 2013 2:35 am
by erkosone
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.

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

Posted: Sun Apr 21, 2013 4:07 am
by erkosone
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..

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

Posted: Sun Apr 21, 2013 5:40 pm
by necro_vampire
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)

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

Posted: Sun Apr 21, 2013 5:46 pm
by erkosone
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.