unit MMCDATyp; {$I COMPILER.INC} interface uses Windows, MMSystem, MMSCSI; const CDDADLL_VERSION = 20; const SECTOR_LEN = 2368; FRAME_SIZE = 2352; DATA_SECTOR = 2048; TIMEOUT = 10000; FRAME_OFFSET = 150; SINGLE_SPEED = 75*FRAME_SIZE; type THCDDA = integer; { ASPI Device Info } PASPIDeviceInfo = ^TASPIDeviceInfo; TASPIDeviceInfo = packed record Adapter : integer; // haId TargetId : integer; LUN : Integer; Data : TScsiInquiry; lpNext : PASPIDeviceInfo; end; {==========================================================================} PASPIInfo = ^TASPIInfo; TASPIInfo = packed record FNumAdapters : Byte; FDevices : PASPIDeviceInfo; end; {==========================================================================} TCDTrackType = (ttData,ttAudio); TCDISRC = array[0..12] of Char; TCDUPC = array[0..13] of Char; {==========================================================================} PCDTrack = ^TCDTrack; { Track-Info } TCDTrack = packed record Number : Integer; Start : Integer; // MSF Length : Integer; // MSF TrackType : TCDTrackType; CopyProtected : LongBool; PreEmphasis : LongBool; end; {==========================================================================} PCDTrackInfo = ^TCDTrackInfo; { TOC-Info } TCDTrackInfo = packed record nTracks : Integer; Tracks : array[0..99] of TCDTrack; end; TCDText = array[0..160] of Char; {==========================================================================} PCDTextTrack = ^TCDTextTrack; { CDText Track Info } TCDTextTrack = packed record TrackNr : integer; TrackTitle : TCDText; Performer : TCDText; SongWriter : TCDText; Composer : TCDText; Arranger : TCDText; Message : TCDText; DiskID : TCDText; GenreInfo : TCDText; UPC_EAN_ISRC : TCDText; end; {==========================================================================} PCDTextBlock = ^TCDTextBlock; { CDText Block (language) } TCDTextBlock = packed record nTracks : integer; Tracks : array[0..100] of TCDTextTrack; // Track 0 = AlbumTitle end; {==========================================================================} PCDTextInfo = ^TCDTextInfo; { CDText TOC-Info } TCDTextInfo = packed record Blocks : array[0..7] of PCDTextBlock; end; const AUTO = 'AutoDetect'; ATAPI = 'ATAPI'; CYBER = 'CYBER'; DEC_ = 'DEC'; GRUNDIG = 'GRUNDIG'; HITACHI = 'HITACHI'; HP = 'HP'; IBM = 'IBM'; IMS = 'IMS'; KODAK = 'KODAK'; MATSHITA = 'MATSHITA'; MITSUMI = 'MITSUMI'; MP = 'MP'; MS = 'MS'; NEC = 'NEC'; PANASONIC = 'PANASONIC'; PHILIPS = 'PHILIPS'; PIONEER = 'PIONEER'; PLASMON = 'PLASMON'; PLEXTOR = 'PLEXTOR'; RICOH = 'RICOH'; SONY = 'SONY'; TOSHIBA = 'TOSHIBA'; TEAC = 'TEAC'; YAMAHA = 'YAMAHA'; type {==========================================================================} TCDDeviceType = (dtAUTO, dtATAPI, dtCYBER, dtDEC, dtGRUNDIG, dtHITACHI, dtHP, dtIBM, dtIMS, dtKODAK, dtMATSHITA, dtMITSUMI, dtMP, dtMS, dtNEC, dtPANASONIC, dtPHILIPS, dtPIONEER, dtPLASMON, dtPLEXTOR, dtRICOH, dtSONY, dtTOSHIBA, dtTEAC, dtYAMAHA); const {==========================================================================} CDDeviceTypes: array[0..24] of string = (AUTO, ATAPI, CYBER, DEC_, GRUNDIG, HITACHI, HP, IBM, IMS, KODAK, MATSHITA, MITSUMI, MP, MS, NEC, PANASONIC, PHILIPS, PIONEER, PLASMON, PLEXTOR, RICOH, SONY, TOSHIBA, TEAC, YAMAHA); const {==========================================================================} { ASPI Error codes } {==========================================================================} ASPI_ERRBASE = -100; ASPI_NOERROR = 0; ASPI_DLLERROR = ASPI_ERRBASE - 1; ASPI_NOMANAGER = ASPI_ERRBASE - 2; ASPI_NOADAPTER = ASPI_ERRBASE - 3; ASPI_INVALIDDEVICE = ASPI_ERRBASE - 4; ASPI_TIMEOUT = ASPI_ERRBASE - 5; ASPI_UNKNOWNERROR = ASPI_ERRBASE - 100; {==========================================================================} { CDDA Error codes } {==========================================================================} CDDA_ERRBASE = 0; CDDA_NOERROR = CDDA_ERRBASE; CDDA_INITFAILURE = CDDA_ERRBASE - 1; CDDA_INVALHANDLE = CDDA_ERRBASE - 2; CDDA_INVALPARAM = CDDA_ERRBASE - 3; CDDA_INVALIDDEVICE = CDDA_ERRBASE - 4; CDDA_ALLOCATED = CDDA_ERRBASE - 5; CDDA_NOTREADY = CDDA_ERRBASE - 6; CDDA_CANNOTOPEN = CDDA_ERRBASE - 7; CDDA_CANNOTCLOSE = CDDA_ERRBASE - 8; CDDA_CANNOTLOAD = CDDA_ERRBASE - 9; CDDA_CANNOTPLAY = CDDA_ERRBASE - 10; CDDA_CANNOTPAUSE = CDDA_ERRBASE - 11; CDDA_CANNOTRESUME = CDDA_ERRBASE - 12; CDDA_CANNOTSTOP = CDDA_ERRBASE - 13; CDDA_CANNOTLOCK = CDDA_ERRBASE - 14; CDDA_CANNOTREAD = CDDA_ERRBASE - 15; CDDA_SYNCERROR = CDDA_ERRBASE - 16; CDDA_NOTSUPPORTED = CDDA_ERRBASE - 17; CDDA_UNKNOWNERROR = CDDA_ERRBASE - 100; function MSFToFrame(MSF: Longint): Longint; function Frame2MSF(Frame: Longint; M, S, F: PInteger): Longint; function FrameToMSF(Frame: Longint): Longint; function MSFToSecond(MSF: Longint): Longint; function MSFToTime(MSF: Longint): Longint; function TimeToMSF(Time: Longint): Longint; implementation end.