JediVCL/Jedi Code Library lub
type
TGenre = (grBlues, grClassicRock, grCountry, grDance, grDisco, grFunk, grGrunge,
grHipHop, grJazz, grMetal, grNewAge, grOldies, grOther, grPop, grRandB, grRap,
grReggae, grRock, grTechno, grIndustrial, grAlternative, grSka,
grDeathMetal, grPranks, grSoundtrack, grEuroTechno, grAmbient,
grTripHop, grVocal, grJazzFunk, grFusion, grTrance, grClassical,
grInstrumental, grAcid, grHouse, grGame, grSoundClip, grGospel,
grNoise, grAlternRock, grBass, grSoul, grPunk, grSpace, grMeditative,
grInstrumentalPop, grInstrumentalRock, grEthnic,
grGothic, grDarkwave, grTechnoIndustrial, grElectronic,
grPopFolk, grEurodance, grDream, grSouthernRock, grComedy,
grCult, grGangsta, grTop40, grChristianRap, grPopFunk,
grJungle, grNativeAmerican, grCabaret, grNewWave, grPsychadelic,
grRave, grShowtunes, grTrailer, grLoFi, grTribal, grAcidPunk,
grAcidJazz, grPolka, grRetro, grMusical, grRockandRoll,
grHardRock, grFolk, grFolkRock, grNationalFolk, grSwing,
grFastFusion, grBebob, grLatin, grRevival, grCeltic,
grBluegrass, grAvantgarde, grGothicRock, grProgressiveRock,
grPsychedelicRock, grSymphonicRock, grSlowRock, grBigBand,
grChorus, grEasyListening, grAcoustic, grHumour, grSpeech,
grChanson, grOpera, grChamberMusic, grSonata, grSymphony, grBootyBass,
grPrimus, grPornGroove, grSatire, grSlowJam, grClub, grTango, grSamba,
grFolklore, grBallad, grPowerBallad, grRhythmicSoul, grFreestyle,
grDuet, grPunkRock, grDrumSolo, grAcapella, grEuroHouse, grDanceHall,
grNone);
TId3v1Tag = packed record
Identifier: array[0..2] of Char;
SongName: array[1..30] of Char;
Artist: array[1..30] of Char;
Album: array[1..30] of Char;
Year: array[0..3] of Char;
Comment: array[1..30] of Char;
Genre: TGenre;
end;
function TJvId3v1.WriteTag(FileName, SongName, Artist, Album, Year, Comment: string; Genre: TGenre): Boolean;
var
fich: TFileStream;
tag: TId3v1Tag;
begin
try
ZeroMemory(@tag, SizeOf(tag));
if FileExists(FileName) then
begin
fich := TFileStream.Create(FileName, fmOpenReadWrite or fmShareExclusive);
//Remove old tag ?
if fich.Size > 128 then
begin
fich.Position := fich.Size - 128;
fich.Read(tag, SizeOf(tag));
if tag.Identifier = 'TAG' then
fich.Position := fich.Size - 128;
end;
//Set new tag
tag.Identifier := 'TAG';
CopyMemory(@tag.SongName, @SongName[1], 30);
CopyMemory(@tag.Artist, @Artist[1], 30);
CopyMemory(@tag.Album, @Album[1], 30);
CopyMemory(@tag.Year, @Year[1], 4);
CopyMemory(@tag.Comment, @Comment[1], 30);
tag.Genre := Genre;
//Write it
fich.Write(tag, SizeOf(tag));
fich.Free;
Result := True;
end
else
Result := False;
except
Result := False;
end;
end;
Kod NIE jest mój, jest to część JVCL::JvID3v1.pas