//--------------------------------------------------------------------------- #include #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; HMIDISTRM hms; UINT mdev; MIDIHDR mhdr; char mevent[32*1024]; MIDIPROPTIMEDIV mpdiv; MIDIPROPTEMPO mptemp; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::FormCreate(TObject *Sender) { MMRESULT rc; MIDIEVENT *me; mdev = MIDI_MAPPER; rc = midiStreamOpen(&hms, &mdev, 1, NULL, NULL, CALLBACK_NULL); mpdiv.cbStruct = sizeof(mpdiv); mpdiv.dwTimeDiv = 48; rc = midiStreamProperty (hms, (LPBYTE)&mpdiv, MIDIPROP_SET | MIDIPROP_TIMEDIV); mptemp.cbStruct = sizeof(mptemp); mptemp.dwTempo = 1000*1000; rc = midiStreamProperty (hms, (LPBYTE)&mptemp, MIDIPROP_SET | MIDIPROP_TEMPO); mhdr.lpData = mevent; mhdr.dwBufferLength = sizeof(mevent); mhdr.dwBytesRecorded = 0; mhdr.dwUser = 0; mhdr.dwFlags = 0; mhdr.lpNext = NULL; mhdr.reserved = 0; mhdr.dwOffset = 0; me = (MIDIEVENT *)&mevent[0]; me->dwDeltaTime = 0; me->dwStreamID = 0; me->dwEvent = MEVT_F_SHORT | 0x7f3c91; me = (MIDIEVENT *)&mevent[4*3]; me->dwDeltaTime = 48; me->dwStreamID = 0; me->dwEvent = MEVT_F_SHORT | 0x003c91; rc = midiOutPrepareHeader (hms, &mhdr, sizeof(mhdr)); mhdr.dwBytesRecorded = 24; mhdr.dwFlags = MHDR_PREPARED; rc = midiStreamOut (hms, &mhdr, sizeof(mhdr)); rc = midiStreamRestart (hms); } //--------------------------------------------------------------------------- void __fastcall TForm1::FormDestroy(TObject *Sender) { UINT rc; rc = midiStreamClose (hms); } //---------------------------------------------------------------------------