L
ich weis nicht ganz genau wo ich anfangen soll also
a) zeiger sind nichts dramatisches und c# versteckt die nur (sehr simpel vormuliert)
b) im prinzip müsste du bei meinem beispiel nur noch die gewünschte transformation durchführen (ich steh dummerweise mit der c(++/# etc.) syntax auf kriegsfuss) ich versuch mal eine demo (mit korekturen zum letzten post)
#include <mmsystem.h>
void CALLBACK MidiInFunc(HANDLE hMidiIn,UINT wMsg,HANDLE * Midiout,long dwParam1, long dwParam2)
{
long chan,what,note,vel;
if (wMsg!=MIM_DATA)return;//andere meldungen
chan=dwParam1 & 0x0F;//kanal 0-15 die ersten 4 bits
what=(dwParam1 >> 4) & 0x0F;// die nächsten 4 bits u.a. note an/aus
note=(dwParam1 >> 8) & 0xFF;//sollte klar sein ;-)
vel=(dwParam1 >> 16) & 0xFF;//anschlagstärke
if (what!=8 && what!=9) return;// 8 und 9 sind note aus bzw. an alles andere wird erstmal ignoriert
midiOutShortMsg(*hMidiOut, dwParam1); // erstmal die gleiche note zur ausgabe senden
note+=12//und ne oktave höher
midiOutShortMsg(*hMidiOut, chan+what*16+note*256 +vel*256*256);
}
// in der init function:
midiOutOpen(&midiOut, MIDI_MAPPER,0,0,0);
midiInOpen(&midiIn, 0/* erstes gerät*/, (long)MidiInFunc, (long)&midiOut, CALLBACK_FUNCTION);
// beim beenden schliessen nicht vergessen:
midiOutClose(midiOut);
midiInClose(midiIn);
-evtl. winmm.lib in den linker optione eintragen
sollte eigentlich auch mit JEDEM C DIALEKT also auch vc+ und c# klappen
p.s falls du auf der suche nach einer netten programiersprache bist würd ich pascal nicht vergessen