[Delphi] Jak zapisać ID3Tag?

0

Jak zapisać do pliku MP3 ID3Tag? Wiem, jak odczytać mniej więcej(po kodzie źródłowym), ale nie wiem, jak zapisać, a nie znam się za bardzo na czytaniu/zapisywaniu blokowym...

I czy ktoś wie, skąd można wziąć coś lepszego do odczytywania ID3Tagów, niż jest na tej stronie?

0

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

0

Dzięki... Nic z tego nie rozumiem, ale może się uda ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1