⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 id3tag.pas

📁 mp3 播放器 delphi 源码
💻 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 + -