Inmiddels ben ik verder zoekend een interessant ogend artikel tegengekomen: http://www.giordanobenicchi.it/midi-tech/lowmidi.htm
Hierin wordt een mogelijkheid beschreven een single byte naar een MIDI poort te sturen.
Op een forum (https://forum.juce.com/t/how-to-send...ne-byte/2662/5) heeft iemand de code geïsoleerd weergegeven:
Code:
#include <windows.h>
#include <stdio.h>
#include <conio.h>
#include <mmsystem.h>
unsigned char Vol[] = {0xf1};
void PrintMidiOutErrorMsg(unsigned long err)
{
#define BUFFERSIZE 120
char buffer[BUFFERSIZE];
if (!(err = midiOutGetErrorText(err, &buffer[0], BUFFERSIZE)))
{
printf("%s\r\n", &buffer[0]);
}
else if (err == MMSYSERR_BADERRNUM)
{
printf("Strange error number returned!\r\n");
}
else
{
printf("Specified pointer is invalid!\r\n");
}
}
int main(int argc, char **argv)
{
HMIDIOUT handle;
MIDIHDR midiHdr;
UINT err;
if (!(err = midiOutOpen(&handle, 0, 0, 0, CALLBACK_NULL)))
{
midiHdr.lpData = (LPBYTE)&Vol[0];
midiHdr.dwBufferLength = sizeof(Vol);
midiHdr.dwFlags = 0;
err = midiOutPrepareHeader(handle, &midiHdr, sizeof(MIDIHDR));
if (!err)
{
/* Output the SysEx message. Note that this could return immediately if
the device driver can output the message on its own in the background.
Otherwise, the driver may make us wait in this call until the entire
data is output
*/
err = midiOutLongMsg(handle, &midiHdr, sizeof(MIDIHDR));
if (err)
{
PrintMidiOutErrorMsg(err);
}
while (MIDIERR_STILLPLAYING == midiOutUnprepareHeader(handle, &midiHdr, sizeof(MIDIHDR)))
{
Sleep(1000);
}
}
else
{
PrintMidiOutErrorMsg(err);
}
midiOutClose(handle);
}
else
{
printf("Error opening default MIDI Out device!\r\n");
PrintMidiOutErrorMsg(err);
}
return(0);
}
Op zich ziet dit er veelbelovend uit. De complicatie is echter dat ik onvoldoende thuis ben in de C-varianten om dit om te zetten naar Delphi.
Dus als iemand deze 'vertaalslag' zou aandurven (het meeste is commentaar) zou ik zéér dankbaar zijn en ga ik daar eens mee experimenteren.
Ook heb ik het MIDI signaal van een MTC timecode generator op de oscilloscoop bekeken en dan zie je duidelijk de 241(dec) of $F1 (hex) die onveranderd blijft en het tweede byte dat continu staat te 'reutelen'.
Bookmarks