📄 id3tag.pas
字号:
{###############################################################################
# Dipesh-MP3yk Delphi-Sourcecode #
################################################################################
# by Sebastian Sauer (Dipesh) #
# email: mail@dipesh.de #
# url: www.dipesh.de #
# (C) 1999 - freeware, see the licenceagreements in readme.txt #
################################################################################
# ID3TAG.PAS - TID3TagForm #
# the MP3 ID3-Tag Editor #
###############################################################################}
UNIT ID3tag;
INTERFACE
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Buttons, MPGTools;
type
TID3TagForm = class(TForm)
GroupBoxID3Tag: TGroupBox;
EditArtist: TEdit;
Label1: TLabel;
EditTitle: TEdit;
Label2: TLabel;
EditAlbum: TEdit;
Label3: TLabel;
EditYear: TEdit;
Label4: TLabel;
Label5: TLabel;
ComboBoxGenre: TComboBox;
EditComment: TEdit;
Label6: TLabel;
GroupBoxFileInfos: TGroupBox;
Label7: TLabel;
LabelLength: TLabel;
Label9: TLabel;
LabelDuration: TLabel;
Label13: TLabel;
LabelLayer: TLabel;
Label15: TLabel;
LabelSampleRate: TLabel;
Label17: TLabel;
LabelBitRate: TLabel;
Label19: TLabel;
LabelCopyrighted: TLabel;
Label21: TLabel;
LabelOrginal: TLabel;
Label23: TLabel;
LabelErrorProtection: TLabel;
Label25: TLabel;
LabelPadding: TLabel;
Label27: TLabel;
LabelModified: TLabel;
Label29: TLabel;
LabelValied: TLabel;
Label31: TLabel;
LabelFirstValidHeader: TLabel;
Label33: TLabel;
LabelFrameSize: TLabel;
ButtonSave: TBitBtn;
ButtonCancel: TBitBtn;
Label11: TLabel;
LabelVersion: TLabel;
Label8: TLabel;
Label10: TLabel;
Label12: TLabel;
LabelMode: TLabel;
LabelVolume: TLabel;
Label16: TLabel;
ButtonClear: TButton;
ButtonReload: TButton;
Label14: TLabel;
EditTrack: TEdit;
procedure OnClose(Sender: TObject; var Action: TCloseAction);
procedure OnCreate(Sender: TObject);
procedure OnActivate(Sender: TObject);
procedure ButtonReload_OnClick(Sender: TObject);
procedure ButtonClear_OnClick(Sender: TObject);
procedure ButtonSave_OnClick(Sender: TObject);
private
MpegFile1: TMpegAudio;
end;
var ID3TagForm_TitleStr, ID3TagForm_MpgFileCom: string;
ID3TagForm: TID3TagForm;
IMPLEMENTATION
uses Main;
{$R *.DFM}
procedure TID3TagForm.OnClose(Sender: TObject; var Action: TCloseAction);
begin MpegFile1.Free; end;
procedure TID3TagForm.OnCreate(Sender: TObject);
var i1: integer; s1: string;
begin
Screen.Cursor:=crHourGlass;
If FileExists(ID3TagForm_MpgFileCom) then Caption:=ExtractFileName(ID3TagForm_MpgFileCom) else Caption:='?';
ButtonSave.Glyph:=MainForm.ButtonSave.Glyph;
MainForm.ImageListBtn.GetBitmap(0,ButtonCancel.Glyph);
MpegFile1:=TMpegAudio.Create;
MpegFile1.FileName:=ID3TagForm_MpgFileCom;
i1:=Pos('-',ID3TagForm_TitleStr);
If i1>0 then begin
s1:=Trim(copy(ID3TagForm_TitleStr,1,i1));
If Length(s1)>0 then If s1[Length(s1)]='-' then Delete(s1,Length(s1),1);
Delete(ID3TagForm_TitleStr,1,i1); ID3TagForm_TitleStr:=Trim(ID3TagForm_TitleStr);
If Length(ID3TagForm_TitleStr)>0 then If ID3TagForm_TitleStr[1]='-' then begin
Delete(ID3TagForm_TitleStr,1,1); ID3TagForm_TitleStr:=Trim(ID3TagForm_TitleStr);
end;
MpegFile1.UnknownArtist:=s1; MpegFile1.UnknownTitle:=ID3TagForm_TitleStr;
end else begin MpegFile1.UnknownArtist:=''; MpegFile1.UnknownTitle:=ID3TagForm_TitleStr; end;
For i1:=0 to MaxStyles do ComboBoxGenre.Items.Add(MusicStyle[i1]);
ComboBoxGenre.Items.Insert(0,'<Unknown>');
end;
procedure TID3TagForm.OnActivate(Sender: TObject);
begin If Tag=1 then begin Tag:=2; ButtonReload_OnClick(nil); Screen.Cursor:=crDefault; end; end;
procedure TID3TagForm.ButtonReload_OnClick(Sender: TObject);
begin
// shows fileinfos
LabelLength.Caption:=IntToStr(MpegFile1.FileLength)+' ('+FormatFloat('##.#',MpegFile1.FileLength/1024/1024)+' MB)';
LabelDuration.Caption:=FormatDateTime('hh:nn:ss',MpegFile1.DurationTime)+' ('+IntToStr(MpegFile1.Duration)+' sec)';
LabelVersion.Caption:=Mpeg_Versions[MpegFile1.Version];
LabelLayer.Caption:=MpegFile1.Layerstr;
LabelSampleRate.Caption:=IntToStr(MpegFile1.SampleRate)+'Hz';
LabelBitRate.Caption:=IntToStr(MpegFile1.BitRate)+'kbps';
LabelMode.Caption:=MpegFile1.ModeStr;
LabelVolume.Caption:=MpegFile1.VolumeLabel;
LabelCopyrighted.Caption:=MpegFile1.CopyrightStr('Yes','No');
LabelOrginal.Caption:=MpegFile1.OriginalStr('Yes','No');
LabelErrorProtection.Caption:=MpegFile1.ErrorProtectionStr('Yes','No');
LabelPadding.Caption:=IntToStr(Byte(MpegFile1.Padding));
LabelModified.Caption:=FormatDateTime('dd.mm.yy hh:nn:ss',MpegFile1.FileDateTime);
LabelValied.Caption:=MpegFile1.IsValidStr('Yes','No');
LabelFirstValidHeader.Caption:=IntToStr(MpegFile1.FirstValidFrameHeaderPosition);
LabelFrameSize.Caption:=IntToStr(MpegFile1.FrameLength);
// shows tags
If MPegFile1.IsTagged then GroupBoxID3Tag.Caption:='ID3-Tag (tag is present):' else GroupBoxID3Tag.Caption:='ID3-Tag (no tag present):';
EditArtist.Text:=MpegFile1.Artist; EditArtist.Enabled:=MPegFile1.IsValid;
EditTitle.Text:=MpegFile1.Title; EditTitle.Enabled:=MPegFile1.IsValid;
If (MPEGFile1.Album='[notag]')or(MPEGFile1.Album='[no tag]') then EditAlbum.Text:='' else EditAlbum.Text:=MPEGFile1.Album; EditAlbum.Enabled:=MPegFile1.IsValid;
EditYear.Text:=MpegFile1.Year; EditYear.Enabled:=MPegFile1.IsValid;
EditTrack.Text:=IntToStr(MpegFile1.Track); EditTrack.Enabled:=MPegFile1.IsValid;
If MPegFile1.Genre>MaxStyles then ComboBoxGenre.ItemIndex:=0 else ComboBoxGenre.ItemIndex:=MpegFile1.Genre; ComboBoxGenre.Enabled:=MPegFile1.IsValid;
If (MpegFile1.Comment='[notag]')or(MpegFile1.Comment='[no tag]') then EditComment.Text:='' else EditComment.Text:=MpegFile1.Comment; EditComment.Enabled:=MPegFile1.IsValid;
ButtonSave.Enabled:=(MPegFile1.IsValid)and((not MeedPwForEditID3Tag)or(not IsNowProtected));
end;
procedure TID3TagForm.ButtonClear_OnClick(Sender: TObject);
begin
EditArtist.Text:=''; EditTitle.Text:=''; EditAlbum.Text:=''; EditYear.Text:='';
EditTrack.Text:=''; ComboBoxGenre.ItemIndex:=0; EditComment.Text:='';
end;
procedure TID3TagForm.ButtonSave_OnClick(Sender: TObject);
begin
If not FileExists(MpegFile1.FileName) then begin // file exists ?
MessageDlg('file not exists: '+MpegFile1.FileName,mtError,[mbOK],0); Exit; end;
If FileIsReadOnly(MpegFile1.FileName) then begin // file is readonly ?
If MessageDlg('file is readonly: '+MpegFile1.FileName+#13+'Remove readonly-fileattr to save settings?',mtConfirmation,[mbYes]+[mbCancel],0)=idYes then begin
If FileSetAttr(MpegFile1.FileName, FileGetAttr(MpegFile1.FileName)-faReadOnly)<>0 then begin
MessageDlg('Can''t remove readonly-attr from file: '+MpegFile1.FileName,mtWarning,[mbOK],0);
ButtonReload_OnClick(nil); Exit;
end;
end else begin ButtonReload_OnClick(nil); Exit; end;
end;
If (Trim(EditArtist.Text)='')and(Trim(EditTitle.Text)='')and(Trim(EditAlbum.Text)='')and
(Trim(EditYear.Text)='')and(ComboBoxGenre.ItemIndex=0)and(Trim(EditComment.Text)='') then begin // Remove ID3-Tag from MP3-file
If MessageDlg('Are you sure you want to remove ID3-Tag from this file?',mtConfirmation,[mbYes,mbCancel],0)=mrYes then begin
If MpegFile1.RemoveTag<>0 then begin
MessageDlg('Error removing ID3-Tag from file: '+MpegFile1.FileName,mtWarning,[mbOK],0);
ButtonReload_OnClick(nil); Exit;
end;
end else Exit;
end else begin // Write ID3-Tag into MP3-file
If MessageDlg ('Are you sure you want to write ID3-Tag to this file?',mtConfirmation,[mbYes,mbCancel],0)=mrYes then begin
MpegFile1.Artist:=Trim(EditArtist.Text);
MpegFile1.Title:=Trim(EditTitle.Text);
MPEGFile1.Album:=Trim(EditAlbum.Text);
MPegFile1.Year:=Trim(EditYear.Text);
MpegFile1.Track:=StrToIntDef(EditTrack.Text,MpegFile1.Track);
If ComboBoxGenre.Text<>'<Unknown>' then MPegFile1.Genre:=ComboBoxGenre.ItemIndex else MpegFile1.Genre:=255;
MPegFile1.Comment:=Trim(EditComment.Text);
If MpegFile1.WriteTag<>0 then begin
MessageDlg ('Error writing ID3-Tag to file: '+MPEGFile1.FileName,mtWarning,[mbOK],0);
ButtonReload_OnClick(nil); Exit;
end;
end else Exit;
end;
ModalResult:=mrOk;
end;
END.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -