|
|
Audio CD-n lévő zeneszámok adatainak lekérdezése
|
|
Példaprogram letöltése
13542 bájt
|
Egy viszonylag egyszerű megoldással lekérdezhetjük a CD meghajtóban lévő lemez legfontosabb adatait (track-ek száma, hossza, stb.). Hogy hogyan, azt megtudhatjuk az alábbi példából!
A mellékelt példaprogram megnyitása előtt a TCDTracks.pas-ban lévő komponenst telepítenie kell a Delphi alá.
A szükséges információkat az mciSendString függvénnyel kérdezzük le. A függvény visszatérési értéke 0, ha sikerült a kívánt adatot lekérdezni, egyébként a hibakódot kapjuk meg. A függvény deklarációja így néz ki:
function mciSendString(lpstrCommand, lpstrReturnString: PChar; uReturnLength: UINT; hWndCallback: HWND): MCIERROR;
Az lpstrCommand paraméter a parancs sztring. Az lpstrReturnString-ben kapjuk meg a lekérdezés eredményét (ha van ilyen). Az uReturnLength meghatározza az eredmény sztring maximális hosszát. Ennek annyinak kell lennie, mint az lpstrReturnString buffer hossza (pl. buff:array[0..127] of char esetén 128-nak). A hWndCallback paramétert jelen esetben nem használjuk, ezért mindig 0.
Mivel ezt a függvényt elég gyakran meg kell majd hívni, ezért létrehozunk egy saját függvényt, ami azért jó, mert így az eredmény sztringet mindjárt vissza is kaphatjuk, és a függvény paraméterezésével sem kell bajlódnunk:
function MciSendStr(cmdstr:string):string;
var retstr:array[0..255] of char;
begin
mciSendString(PChar(cmdstr), retstr, 255, 0);
result:=retstr;
end;
Az adatok kiolvasását a Refresh eljárás fogja végezni. Ez mindegyik property-nek átadja a megfelelő értéket. Mivel azt előre nem tudhatjuk, hogy egy CD lemezen mennyi track található, ezért a track-ek adatait egy TCollection-ból származó osztályban tároljuk (TCDTracksList).
procedure TCDTracks.Refresh;
var t:integer;
begin
Első lépésben küldenünk kell egy 'open cdaudio' parancsot. Ha ezt nem tesszük meg, akkor előfordulhat, hogy nem tudjuk a megfelelő információt lekérdezni.
if mciSendString('open cdaudio', NIL, 0, 0)=0 then
begin;
Ha sikerült a művelet, akkor a függvény visszatérési értéke 0. Ekkor töröljük a track-ek adatait, majd sorban elkezdjük lekérdezni az információkat.
FTrackList.Clear;
FCurrentTrack:=StrToInt('0'+MciSendStr('status cdaudio current track'));
FLength:=MciSendStr('status cdaudio length');
FMediaPresent:=(MciSendStr('status cdaudio media present')='true');
FMode:=MciSendStr('status cdaudio mode');
FNumberOfTracks:=StrToInt('0'+MciSendStr('status cdaudio number of tracks'));
FPosition:=MciSendStr('status cdaudio position');
FReady:=(MciSendStr('status cdaudio ready')='true');
FStartPosition:=MciSendStr('status cdaudio start position');
FTimeFormat:=MciSendStr('status cdaudio time format');
Ha az alapinformációk beolvasását elvégeztük, akkor kezdődhet a track-ek adatainak beolvasása:
t:=1;
while t<=FNumberOfTracks do begin
FTrackList.Add;
FTrackList[t-1].FType:=MciSendStr('status cdaudio type track '+IntToStr(t));
FTrackList[t-1].FPosition:=MciSendStr('status cdaudio position track '+IntToStr(t));
FTrackList[t-1].FLength:=MciSendStr('status cdaudio length track '+IntToStr(t));
inc(t);
end;
Ha minden információt megkaptunk, amire szükségünk volt, akkor küldünk egy "close cdaudio" parancsot, amivel felszabadítjuk a cd meghajtót. Ha ezt nem tesszük meg, akkor más programok nem fognak hozzáférni a CD meghajtóhoz, pl. egy CD lejátszó programmal nem tudjuk a CD-t lejátszani!
mciSendString('close cdaudio', NIL, 0, 0);
end else begin
FMode:='unknown';
FReady:=false;
end;
end;
|
Könyv
Ez a cikk megtalálható ebben a könyvben:
Delphi Software Offline 2001 évkönyv 254. 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!
|