Ja też zaczołem teraz to rozgryzać i próbuje to robić bez komponentów. Z tego co już wiem należy uzywać funcji API (uses MMSystem) wszystkie zaczynające się na midi....
np.
//liczba urządzeń MIDI
i:=midiInGetNumDevs();//liczba urządzeń MIDI IN
j:=midiOutGetNumDevs();//liczba urządzeń MIDI OUT
// informacje o porcie MIDI OUT
DeviceID:=1;//wartości które są związane z j
FError := midiOutGetDevCaps(DeviceID, @midioutCaps, sizeof(TmidioutCaps));
with midiOutCaps do
begin
FProductName := StrPas(szPname);
FDriverVersion := vDriverVersion;
FTechnology := wTechnology;
FVoices := wVoices;
FNotes := wNotes;
FChannelMask := wChannelMask;
FSupport := dwSupport;
end;
Label15.Caption:='ProductName:'+' '+FProductName;
Label16.Caption:='DriverVersion:'+' '+IntToStr(FDriverVersion);
yy:='';
case FTechnology of
MOD_FMSYNTH: yy:='MOD_FMSYNTH';
MOD_MAPPER: yy:='MOD_MAPPER';
MOD_MIDIPORT: yy:='MOD_MIDIPORT';
MOD_SQSYNTH: yy:='MOD_SQSYNTH';
MOD_SYNTH: yy:='MOD_SYNTH';
end;
Label21.Caption:='Technology:'+' '+yy;
Label17.Caption:='Voices:'+' '+IntToStr(FVoices);
Label18.Caption:='Notes (polyphony):'+' '+IntToStr(FNotes);
Label19.Caption:='ChannelMask:'+' '+IntToStr(FChannelMask);//nie tak do końca
yy:='';
case FSupport of
MIDICAPS_CACHE: yy:='MIDICAPS_CACHE';
MIDICAPS_LRVOLUME: yy:='MIDICAPS_LRVOLUME';
MIDICAPS_STREAM: yy:='MIDICAPS_STREAM';
MIDICAPS_VOLUME: yy:='MIDICAPS_VOLUME';
end;
Label20.Caption:='Support:'+' '+yy+IntTostr(FSupport);
//granie nut
//otwierani portu midi (zamiast MIDIMAPPER można 0 lub 1 - patrz zmienna j)
case midiOutOpen(@hmo, MIDIMAPPER, 0, 0, 0) of
//case midiOutOpen(@hmo, 0, 0, 0, 0) of
MMSYSERR_NOERROR: showmessage('port midi out jest otwarty!!');
MIDIERR_NODEVICE: showmessage('No MIDI port was found. This error occurs only when the mapper is opened');
MMSYSERR_ALLOCATED: showmessage('The specified resource is already allocated.');
MMSYSERR_BADDEVICEID: showmessage('The specified device identifier is out of range.');
MMSYSERR_INVALPARAM: showmessage('The specified pointer or structure is invalid.');
MMSYSERR_NOMEM: showmessage('The system is unable to allocate or lock memory.');
end;
//wysłanie komunikatu żeby zagrał - 9, na kanale - 5, nutę - 3C, z siłą - 7F
dwMSG:=StrToInt('0x007F3C95');
case midiOutShortMsg(hmo,dwMSG) of
MMSYSERR_NOERROR: showmessage('jest ok');
MIDIERR_BADOPENMODE: showmessage('midiOutMsg - MIDIERR_BADOPENMODE');
MIDIERR_NOTREADY: showmessage('midiOutMsg - MIDIERR_NOTREADY');
MMSYSERR_INVALHANDLE: showmessage('midiOutMsg - MMSYSERR_INVALHANDLE');
end;
Myslę że trochę teraz będzie jaśniej