HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

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;

Cikksorozat

#IDKategóriaCikk címeSorozat
1063DelphiInterbase 6 alkalmazása Delphi-ben1. rész
1072DelphiInterbase 6 alkalmazása Delphi-ben2. rész
1084DelphiInterbase 6 alkalmazása Delphi-ben3. rész
1092DelphiTIBTable komponens4. rész
1102DelphiTIBTransaction komponens5. rész
1111DelphiTIBQuery komponens6. rész
1120DelphiTIBStoredProc komponens7. rész
1128DelphiTIBDataSet komponens8. rész
1141DelphiTIBSQL komponens9. rész
1150DelphiTIBSQLMonitor komponens10. rész
1159DelphiTIBUpdateSQL komponens11. rész
1167DelphiIBEvents komponens12. rész
1177DelphiIBDatabaseInfo komponens használata13. rész
1183DelphiTIBConfigService komponens14. rész
1192DelphiTIBSecurityService komponens15. rész
1204DelphiTIBServerProperties komponens16. rész
1213DelphiTIBBackupService komponens17. rész
1222DelphiTIBRestoreService komponens18. rész
1231DelphiTIBValidationService komponens19. rész
1240DelphiTIBStatisticalService komponens20. rész
1249DelphiTIBLogService komponens21. rész
1258DelphiTIBUninstall komponens22. rész
1267DelphiInterBase Express komponenscsomag23. rész


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!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |