|
|
MIDI állomány lejátszása programból
|
|
Példaprogram letöltése
26256 bájt
|
Windows alkalmazásokban, különösen az egyszerűbb játékprogramoknál bevált szokás, hogy az akusztikus élményt MIDI zenék lejátszásával próbálják biztosítani a felhasználóknak. Ezek minőségéről lehet vitatkozni, de az mindenképpen mellettük szól, hogy a rendszer erőforrásokat nem csökkentik jelentősen. Ilyen formátumú zene lejátszására a TMediaPlayer komponens is alkalmas, de a legtöbb esetben nem lenne célszerű ennek használata. Ebben a cikkben azt vizsgáljuk meg, hogy hogyan lehet a legegyszerűbben MIDI zenét lejátszani Delphi-ből komponensek használata nélkül.
A multimédiás eszközök, fájlok lejátszására a legegyszerűbbnek az mciSetString függvény tűnik. Ebben a példában is ezt használjuk.
function mciSendString(lpstrCommand, lpstrReturnString: PChar; uReturnLength: UINT; hWndCallback:
HWND): MCIERROR;
A függvény első paramétere egy ún. parancs sztring, amelyben azt határozhatjuk meg, hogy mivel és mit kívánunk tenni. Nekünk most csak ez a paraméter kell, tehát a többivel nem is foglalkozunk. Ahhoz, hogy egy multimédiás eszközhöz vagy fájlhoz hozzáférjünk meg kell nyitni azt, valamint egy nevet is kell adni neki, amivel a későbbiekben hivatkozhatunk rá.
Esetünkben egy hasonló parancsot kell kiadnunk:
mciSendString('open C:\MIDI\TESTSND.MID type sequencer alias MyMIDI', NIL, 0, 0);
Az "open" paranccsal kezdjük a sztringet, ami a megnyitást jelenti. Utána következik a fájl neve, amit teljes elérési útvonallal célszerű megadni. A "type" kulcsszó után kell meghatározni a típust. Azt, hogy egy MIDI fájlról van szó a "sequencer" kulcsszóval jelezzük. Ezután jön az "alias" kulcsszó, ami után megadhatjuk azt a nevet, amivel a későbbiekben erre a fájlra hivatkozunk.
Ha a függvény visszatérési értéke 0, akkor sikerült a fájl megnyitni. Ha a fájl megnyitás sikeres volt, akkor elindíthatjuk annak lejátszását. A fenti példát követve, az alábbi parancsot kell kiadnunk:
mciSendString('play MyMIDI', NIL, 0, 0);
Ha a függvény visszatérési értéke 0, akkor a MIDI fájl lejátszása el is kezdődik, miközben a program futása folytatódik. Ha le szeretnénk állítani a lejátszást, akkor két lehetőségünk is van. Először el kell döntenünk, hogy csak leállítjuk a lejátszást, vagy be is zárjuk a fájlt. Az első esetben a "stop MyMIDI", míg a második esetben a "close MyMIDI" parancsot kell használnunk. Ha nem zártuk le a fájlt, akkor a "play MyMIDI" paranccsal újból lejátszhatjuk, mindaddig, amíg le nem zártuk azt a "close MyMIDI" paranccsal.
mciSendString('close MyMIDI', NIL, 0, 0);
Most nézzük meg, hogy a mellékelt példaprogramban hogyan oldottuk meg a MIDI lejátszást. A lejátszás a Button1 OnClick eseményének bekövetkezésekor kezdődik:
A cmd változóban összeállítjuk az elküldendő parancs sztringet. Ez az "open" kulcsszóval kezdődik, majd hozzáadjuk a MIDI fájl elérési útvonalát (ami a példaprogram útvonala is egyben) és nevét. Ezután megadjuk a fájl típusát ("type sequencer") és az azonosításra használt nevet, amit az alias változóban tárolunk.
cmd:='open '+ExtractFilePath(Application.ExeName)+'TESTSND.MID type sequencer alias '+alias;
Elküldjük a parancsot, és az ok logikai változóban tároljuk, hogy a parancs sikeresen végrehajtódott-e. Ez akkor igaz, ha a függvény visszatérési értéke 0.
ok:=mciSendString(PChar(cmd), NIL, 0, 0)=0;
Ha sikerült megnyitni a fájlt, akkor azonnal le is játsszuk azt.
if ok then begin
mciSendString(PChar('play '+alias), NIL, 0, 0);
end else ShowMessage('Nem sikerült megnyitni a fájlt!');
Button1.Enabled:=NOT OK;
Button2.Enabled:=OK;
end;
A zene lejátszása mindaddig folytatódik, míg a Button2 OnClick eseménye be nem következik. Ekkor lefut a Button2Click eljárás, amiben lezárjuk a fájlt:
procedure TForm1.Button2Click(Sender: TObject);
begin
mciSendString(PChar('close '+alias), NIL, 0, 0);
Button1.Enabled:=True;
Button2.Enabled:=False;
end;
|
Könyv
Ez a cikk megtalálható ebben a könyvben:
Delphi Software Offline 2001 évkönyv 391. oldal
Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!
|