Informationen aus MP3-Dateien erhalten |
|
| System | Win9x, WinNT, Win2000, WinXP, Vista, Win7 |
|---|---|
| Ab Delphi-Version | Delphi 1 |
| Letzte Änderung | 28.09.2010 |
Folgender Code wurde von Sergio Freue (freue@ccurq.uba.ar) als Public Domain ins Netz gestellt und von mir um die Funktion GetMP3Infos erweitert.
unit ID3;
interface
{$A+} { Honor packed }
{$Z1} { Byte storage for small enumerated types }
type
ID3Genre = (
id3gBlues, id3gClassicRock, id3gCountry, id3gDance, id3gDisco,
id3gFunk, id3gGrunge, id3gHipHop, id3gJazz, id3gMetal, id3gNewAge,
id3gOldies, id3gOther, id3gPop, id3gRNB, id3gRap, id3gReggae,
id3gRock, id3gTechno, id3gIndustrial, id3gAlternative, id3gSka,
id3gDeathMetal, id3gPranks, id3gSoundtrack, id3gEuroTechno,
id3gAmbient, id3gTripHop, id3gVocal, id3gJazzFunk, id3gFusion,
id3gTrance, id3gClassical, id3gInstrumental, id3gAcid, id3gHouse,
id3gGame, id3gSoundClip, id3gGospel, id3gNoise, id3gAlternRock,
id3gBass, id3gSoul, id3gPunk, id3gSpace, id3gMeditative,
id3gInstrumentalPop, id3gInstrumentalRock, id3gEthnic, id3gGothic,
id3gDarkwave, id3gTechnoIndustrial, id3gElectronic, id3gPopFolk,
id3gEurodance, id3gDream, id3gSouthernRock, id3gComedy, id3gCult,
id3gGangsta, id3gTop40, id3gChristianRap, id3gPopFunk, id3gJungle,
id3gNativeAmerican, id3gCabaret, id3gNewWave, id3gPsychadelic,
id3gRave, id3gShowtunes, id3gTrailer, id3gLoFi, id3gTribal,
id3gAcidPunk, id3gAcidJazz, id3gPolka, id3gRetro, id3gMusical,
id3gRockNRoll, id3gHardRock, id3gFolk, id3gFolkRock,
id3gNationalFolk, id3gSwing, id3gFastFusion, id3gBebob, id3gLatin,
id3gRevival, id3gCeltic, id3gBluegrass, id3gAvantgarde,
id3gGothicRock, id3gProgressiveRock, id3gPsychedelicRock,
id3gSymphonicRock, id3gSlowRock, id3gBigBand, id3gChorus,
id3gEasyListening, id3gAcoustic, id3gHumour, id3gSpeech,
id3gChanson, id3gOpera, id3gChamberMusic, id3gSonata, id3gSymphony,
id3gBootyBass, id3gPrimus, id3gPornGroove, id3gSatire, id3gSlowJam,
id3gClub, id3gTango, id3gSamba, id3gFolklore, id3gBallad,
id3gPowerBallad, id3gRhythmicSoul, id3gFreestyle, id3gDuet,
id3gPunkRock, id3gDrumSolo, id3gAcapella, id3gEuroHouse,
id3gDanceHall
);
ID3Struct = packed record
Magic: array [0..2 ] of Char;
Title: array [0..29] of Char;
Artist: array [0..29] of Char;
Album: array [0..29] of Char;
Year: array [0..3 ] of Char;
Comment: array [0..29] of Char;
Genre: ID3Genre;
end;
const
ID3Magic = 'TAG';
ID3OffsetFromEnd = 128;
ID3UnknowGenre = ID3Genre(255);
ID3GenreName: array [ID3Genre] of PChar = (
'Blues', 'Classic Rock', 'Country', 'Dance', 'Disco', 'Funk', 'Grunge',
'Hip-Hop', 'Jazz', 'Metal', 'New Age', 'Oldies', 'Other', 'Pop', 'R&B',
'Rap', 'Reggae', 'Rock', 'Techno', 'Industrial', 'Alternative', 'Ska',
'Death Metal', 'Pranks', 'Soundtrack', 'Euro-Techno', 'Ambient',
'Trip-Hop', 'Vocal', 'Jazz+Funk', 'Fusion', 'Trance', 'Classical',
'Instrumental', 'Acid', 'House', 'Game', 'Sound Clip', 'Gospel',
'Noise', 'AlternRock', 'Bass', 'Soul', 'Punk', 'Space', 'Meditative',
'Instrumental Pop', 'Instrumental Rock', 'Ethnic', 'Gothic',
'Darkwave', 'Techno-Industrial', 'Electronic', 'Pop-Folk',
'Eurodance', 'Dream', 'Southern Rock', 'Comedy', 'Cult', 'Gangsta',
'Top 40', 'Christian Rap', 'Pop/Funk', 'Jungle', 'Native American',
'Cabaret', 'New Wave', 'Psychadelic', 'Rave', 'Showtunes', 'Trailer',
'Lo-Fi', 'Tribal', 'Acid Punk', 'Acid Jazz', 'Polka', 'Retro',
'Musical', 'Rock & Roll', 'Hard Rock', 'Folk', 'Folk-Rock',
'National Folk', 'Swing', 'Fast Fusion', 'Bebob', 'Latin', 'Revival',
'Celtic', 'Bluegrass', 'Avantgarde', 'Gothic Rock', 'Progressive Rock',
'Psychedelic Rock', 'Symphonic Rock', 'Slow Rock', 'Big Band',
'Chorus', 'Easy Listening', 'Acoustic', 'Humour', 'Speech', 'Chanson',
'Opera', 'Chamber Music', 'Sonata', 'Symphony', 'Booty Bass', 'Primus',
'Porn Groove', 'Satire', 'Slow Jam', 'Club', 'Tango', 'Samba',
'Folklore', 'Ballad', 'Power Ballad', 'Rhythmic Soul', 'Freestyle',
'Duet', 'Punk Rock', 'Drum Solo', 'Acapella', 'Euro-House', 'Dance Hall'
);
function GetMP3Infos(FN:string): id3struct;
implementation
function GetMP3Infos(FN:string): id3struct;
var
F: file of Byte;
Tag: ID3Struct;
HasTag: Boolean;
GenreName: string;
NewFN: string;
const
Tab = #9;
begin
AssignFile(F, fn);
try
Reset(F);
try
Seek(F, FileSize(F) - ID3OffsetFromEnd);
BlockRead(F, Tag, SizeOf(Tag));
HasTag := Tag.Magic = ID3Magic;
if not HasTag then
begin
FillChar(Tag, Sizeof(Tag), ' ');
Tag.Magic := ID3Magic;
Tag.Genre := ID3UnknowGenre;
end;
CloseFile(f);
Result:=Tag;
except
end;
except
end;
end;
end.
interface
{$A+} { Honor packed }
{$Z1} { Byte storage for small enumerated types }
type
ID3Genre = (
id3gBlues, id3gClassicRock, id3gCountry, id3gDance, id3gDisco,
id3gFunk, id3gGrunge, id3gHipHop, id3gJazz, id3gMetal, id3gNewAge,
id3gOldies, id3gOther, id3gPop, id3gRNB, id3gRap, id3gReggae,
id3gRock, id3gTechno, id3gIndustrial, id3gAlternative, id3gSka,
id3gDeathMetal, id3gPranks, id3gSoundtrack, id3gEuroTechno,
id3gAmbient, id3gTripHop, id3gVocal, id3gJazzFunk, id3gFusion,
id3gTrance, id3gClassical, id3gInstrumental, id3gAcid, id3gHouse,
id3gGame, id3gSoundClip, id3gGospel, id3gNoise, id3gAlternRock,
id3gBass, id3gSoul, id3gPunk, id3gSpace, id3gMeditative,
id3gInstrumentalPop, id3gInstrumentalRock, id3gEthnic, id3gGothic,
id3gDarkwave, id3gTechnoIndustrial, id3gElectronic, id3gPopFolk,
id3gEurodance, id3gDream, id3gSouthernRock, id3gComedy, id3gCult,
id3gGangsta, id3gTop40, id3gChristianRap, id3gPopFunk, id3gJungle,
id3gNativeAmerican, id3gCabaret, id3gNewWave, id3gPsychadelic,
id3gRave, id3gShowtunes, id3gTrailer, id3gLoFi, id3gTribal,
id3gAcidPunk, id3gAcidJazz, id3gPolka, id3gRetro, id3gMusical,
id3gRockNRoll, id3gHardRock, id3gFolk, id3gFolkRock,
id3gNationalFolk, id3gSwing, id3gFastFusion, id3gBebob, id3gLatin,
id3gRevival, id3gCeltic, id3gBluegrass, id3gAvantgarde,
id3gGothicRock, id3gProgressiveRock, id3gPsychedelicRock,
id3gSymphonicRock, id3gSlowRock, id3gBigBand, id3gChorus,
id3gEasyListening, id3gAcoustic, id3gHumour, id3gSpeech,
id3gChanson, id3gOpera, id3gChamberMusic, id3gSonata, id3gSymphony,
id3gBootyBass, id3gPrimus, id3gPornGroove, id3gSatire, id3gSlowJam,
id3gClub, id3gTango, id3gSamba, id3gFolklore, id3gBallad,
id3gPowerBallad, id3gRhythmicSoul, id3gFreestyle, id3gDuet,
id3gPunkRock, id3gDrumSolo, id3gAcapella, id3gEuroHouse,
id3gDanceHall
);
ID3Struct = packed record
Magic: array [0..2 ] of Char;
Title: array [0..29] of Char;
Artist: array [0..29] of Char;
Album: array [0..29] of Char;
Year: array [0..3 ] of Char;
Comment: array [0..29] of Char;
Genre: ID3Genre;
end;
const
ID3Magic = 'TAG';
ID3OffsetFromEnd = 128;
ID3UnknowGenre = ID3Genre(255);
ID3GenreName: array [ID3Genre] of PChar = (
'Blues', 'Classic Rock', 'Country', 'Dance', 'Disco', 'Funk', 'Grunge',
'Hip-Hop', 'Jazz', 'Metal', 'New Age', 'Oldies', 'Other', 'Pop', 'R&B',
'Rap', 'Reggae', 'Rock', 'Techno', 'Industrial', 'Alternative', 'Ska',
'Death Metal', 'Pranks', 'Soundtrack', 'Euro-Techno', 'Ambient',
'Trip-Hop', 'Vocal', 'Jazz+Funk', 'Fusion', 'Trance', 'Classical',
'Instrumental', 'Acid', 'House', 'Game', 'Sound Clip', 'Gospel',
'Noise', 'AlternRock', 'Bass', 'Soul', 'Punk', 'Space', 'Meditative',
'Instrumental Pop', 'Instrumental Rock', 'Ethnic', 'Gothic',
'Darkwave', 'Techno-Industrial', 'Electronic', 'Pop-Folk',
'Eurodance', 'Dream', 'Southern Rock', 'Comedy', 'Cult', 'Gangsta',
'Top 40', 'Christian Rap', 'Pop/Funk', 'Jungle', 'Native American',
'Cabaret', 'New Wave', 'Psychadelic', 'Rave', 'Showtunes', 'Trailer',
'Lo-Fi', 'Tribal', 'Acid Punk', 'Acid Jazz', 'Polka', 'Retro',
'Musical', 'Rock & Roll', 'Hard Rock', 'Folk', 'Folk-Rock',
'National Folk', 'Swing', 'Fast Fusion', 'Bebob', 'Latin', 'Revival',
'Celtic', 'Bluegrass', 'Avantgarde', 'Gothic Rock', 'Progressive Rock',
'Psychedelic Rock', 'Symphonic Rock', 'Slow Rock', 'Big Band',
'Chorus', 'Easy Listening', 'Acoustic', 'Humour', 'Speech', 'Chanson',
'Opera', 'Chamber Music', 'Sonata', 'Symphony', 'Booty Bass', 'Primus',
'Porn Groove', 'Satire', 'Slow Jam', 'Club', 'Tango', 'Samba',
'Folklore', 'Ballad', 'Power Ballad', 'Rhythmic Soul', 'Freestyle',
'Duet', 'Punk Rock', 'Drum Solo', 'Acapella', 'Euro-House', 'Dance Hall'
);
function GetMP3Infos(FN:string): id3struct;
implementation
function GetMP3Infos(FN:string): id3struct;
var
F: file of Byte;
Tag: ID3Struct;
HasTag: Boolean;
GenreName: string;
NewFN: string;
const
Tab = #9;
begin
AssignFile(F, fn);
try
Reset(F);
try
Seek(F, FileSize(F) - ID3OffsetFromEnd);
BlockRead(F, Tag, SizeOf(Tag));
HasTag := Tag.Magic = ID3Magic;
if not HasTag then
begin
FillChar(Tag, Sizeof(Tag), ' ');
Tag.Magic := ID3Magic;
Tag.Genre := ID3UnknowGenre;
end;
CloseFile(f);
Result:=Tag;
except
end;
except
end;
end;
end.
Ähnliche Seiten: