1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107:
| Type TID3Tag = record ID: string[3]; Titel: string[30]; Artist: string[30]; Album: string[30]; Year: string[4]; Comment: string[30]; Genre: byte; dauer: longint; //in sekunden; sample: integer; bits: byte; vers: byte; layers: byte; end;
const MPEG_BIT_RATES : array[1..3] of array[1..3] of array[0..15] of word = { Version 1, Layer I } (((0,32,64,96,128,160,192,224,256,288,320,352,384,416,448,0), { Version 1, Layer II } (0,32,48,56, 64, 80, 96,112,128,160,192,224,256,320,384,0), { Version 1, Layer III } (0,32,40,48, 56, 64, 80, 96,112,128,160,192,224,256,320,0)), { Version 2, Layer I } ((0,32,48, 56, 64, 80, 96,112,128,144,160,176,192,224,256,0), { Version 2, Layer II } (0, 8,16,24, 32, 40, 48, 56, 64, 80, 96, 112,128,144,160,0), { Version 2, Layer III } (0, 8,16,24, 32, 40, 48, 56, 64, 80, 96, 112,128,144,160,0)), { Version 2.5, Layer I } ((0,32,48, 56, 64, 80, 96,112,128,144,160,176,192,224,256,0), { Version 2.5, Layer II } (0, 8,16,24, 32, 40, 48, 56, 64, 80, 96, 112,128,144,160,0), { Version 2.5, Layer III } (0, 8,16,24, 32, 40, 48, 56, 64, 80, 96, 112,128,144,160,0)));
sample_rates: array[1..3] of array [0..3] of word= ((44100,48000,32000,0), (22050,24000,16000,0), (11025,12000,8000,0));
var ID3Tag: TID3Tag;
procedure Lese_ID3Tag(Filename: string); var Buffer: array[1..128] of char; F: File; mp3hdrread: array[1..4] of byte; mp3hdr: longint absolute mp3hdrread; tempbyte, bitrateindex, versionindex: byte; bitrate, version, layer, groese: longint; begin AssignFile(F, Filename);
Reset(F,1); groese:=filesize(f); blockread(f,mp3hdrread,4); tempbyte:=mp3hdrread[1]; mp3hdrread[1]:=mp3hdrread[4]; mp3hdrread[4]:=tempbyte; tempbyte:=mp3hdrread[2]; mp3hdrread[2]:=mp3hdrread[3]; mp3hdrread[3]:=tempbyte;
reset(f,1); Seek(F,FileSize(F)-128); BlockRead(F, Buffer, SizeOf(Buffer)); CloseFile(F); bitrateindex:=((mp3hdr shr 12) and $F); versionindex:=((mp3hdr shr 19) and $3);
case versionindex of 0: version:=3; 1: version:=0; //unbekannt 2: version:=2; 3: version:=1; end;
layer:=4-((mp3hdr shr 17) and $3);
if version<>0 then bitrate:=MPEG_BIT_RATES[version][layer][bitrateindex] else bitrate:=128;
with ID3Tag do begin ID:=copy(Buffer,1,3); Titel:=copy(Buffer,4,30); Artist:=copy(Buffer,34,30); Album:=copy(Buffer,64,30); Year:=copy(Buffer,94,4); Comment:=copy(Buffer,98,30); Genre:=ord(Buffer[128]); sample:=sample_rates[version][((mp3hdr shr 10) and $3)]; dauer:=(groese*8) div ((bitrate)*1000); bits:=bitrate; vers:=version; layers:=layer; end; end; |