![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как прочитать CD-Text компакт-диска? [D6, WinXP]
AllDontFire © (2007-07-04 01:50:00)Привет Всем!
Как прочитать CD-Text компакт-диска? Данные: "Артист" и "Заголовок" - как в Nero ,например, при записи CD audio. Потом их можно увидеть в InfoTool.
Cпасибо.
Alldontfire (2007-07-06 10:52:00) [1]
uses strutils,sysutils,math,dialogs,StdCtrls,windows,Classes,ExtCtrls;
Procedure ReadCDText(CdD:Char;var Title,Artist:String);
const
//CDROM_READ_TOC_EX_FORMAT_CDTEXT =$5;
IOCTL_CDROM_READ_TOC_EX = $24054;
type
CDROM_TOC_CD_TEXT_DATA_BLOCK = record
PackType:UCHAR ;
TrackNumber:UChar ;
//UCHAR TrackNumber:7;
//UCHAR ExtensionFlag:1;
SequenceNumber:UCHAR ;
//UCHAR CharacterPosition:4;
//UCHAR BlockNumber:3;
Position:Uchar;
//UCHAR Unicode:1;
//union { UCHAR Text[12]; WCHAR WText[6]; };
Text:Array[1..12] of CHAR;
CRC:Array[1..2]of UCHAR ;
end;
CDROM_READ_TOC_EX = record
par1: byte;
//Format : UCHAR:4 ;
// Reserved1 : UCHAR:3;
// Msf : UCHAR:1 ;
SessionTrack:UCHAR;
Reserved2:UCHAR ;
Reserved3:UCHAR;
end;
CDROM_TOC_CD_TEXT_DATA= record
Length:Array[1..2] of UCHAR ;
Reserved1:UCHAR ;
Reserved2:UCHAR ;
Descriptors:array [0..4]of CDROM_TOC_CD_TEXT_DATA_BLOCK ;
end;
var
hCDDevice : THandle;
d:Bool;
in_data: CDROM_READ_TOC_EX;
out_size:DWORD ;
out_data: CDROM_TOC_CD_TEXT_DATA ;
BEGIN
FillChar( in_data,SizeOf(in_data),0);
FillChar( out_data,SizeOf(out_data),0);
in_data.par1:=$85;
//in_data.Format := CDROM_READ_TOC_EX_FORMAT_CDTEXT ;
//in_data.Reserved1 := 0;
//in_data.Msf :=1;
in_data.SessionTrack := 0;
hCDDevice := CreateFile(PChar('\\.\'+cdd+':'),
GENERIC_READ,FILE_SHARE_READ or FILE_SHARE_WRITE,nil,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0 );
if hCDDevice INVALID_HANDLE_VALUE then
begin
d:=DeviceIoControl(hCDDevice,IOCTL_CDROM_READ_TOC_EX,@in_data,
sizeof(in_data),@out_data,sizeof(out_data),out_size,nil );
if d = True then begin
Title:=out_data.Descriptors[0].Text;
Artist:=out_data.Descriptors[4].Text;
end
else showmessage(' Ошибка:'+SysErrorMessage(GetLastError));
CloseHandle(hCDDevice);
end
else showmessage('Error in Create file '+SysErrorMessage(GetLastError));
end;
http://www.codeproject.com/useritems/SimpleAudioCD.asp?df=100&forumid=344360&select=1706263#xx1706263xx