CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  VCL组件开发及应用

如何读取出MP3文件的信息?

楼主tgh1981(虚拟等待)2003-12-02 20:56:53 在 Delphi / VCL组件开发及应用 提问

如何读取出MP3文件的信息?怎样遍历几个mp3文件?怎么更改这些信息? 问题点数:50、回复次数:9Top

1 楼tgh1981(虚拟等待)回复于 2003-12-02 23:48:35 得分 0

自己UPTop

2 楼ly_liuyang(Liu Yang LYSoft http://lysoft.7u7.net)回复于 2003-12-03 00:35:02 得分 25

unit   MP_ID3_Unit;  
   
  interface  
   
  uses  
      Windows,   Messages,   SysUtils,   Classes,   Graphics,   Controls,   Forms,   Dialogs,  
      StdCtrls,   Buttons;  
   
  type  
      TID3Tag   =   record  
          Tag:   array[0..2]   of   Char;  
          Songname:   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:   Byte;  
      end;  
   
  type  
      TID3Info   =   class(TForm)  
          Edit1:   TEdit;  
          Edit2:   TEdit;  
          Edit3:   TEdit;  
          Edit4:   TEdit;  
          Edit5:   TEdit;  
          Name:   TLabel;  
          Artist:   TLabel;  
          Album:   TLabel;  
          Year:   TLabel;  
          Comment:   TLabel;  
          Remove:   TBitBtn;  
          Update:   TBitBtn;  
          OK:   TBitBtn;  
          procedure   RemoveClick(Sender:   TObject);  
          procedure   UpdateClick(Sender:   TObject);  
          procedure   FormShow(Sender:   TObject);  
          procedure   OKClick(Sender:   TObject);  
      private  
          {   Private   declarations   }  
          FN   :   String;  
      public  
          {   Public   declarations   }  
          function   ReadID3Tag(FileName:   string):   TID3Tag;  
          function   WriteID3Tag(FileName:   string;   ID3InfoTag:   TID3Tag):   Boolean;  
          function   RemoveID3Tag(FileName:   string):   Boolean;  
          function   ID3TagsAreEqual(ID3Tag1,   ID3Tag2:   TID3Tag):   Boolean;  
      end;  
  var  
      ID3Info:   TID3Info;  
      id3tag:   tid3tag;  
   
  implementation  
   
  uses   MP_List_Unit;  
   
  {$R   *.DFM}  
   
  procedure   TID3Info.RemoveClick(Sender:   TObject);  
  begin  
      if   FileExists(FN)   then  
            if   RemoveID3Tag(FN)   then  
                  begin  
                      MessageDlg('Remove   ok!',   mtInformation,   [mbOK],   0);  
                      edit1.Text:='';  
                      edit2.Text:='';  
                      edit3.Text:='';  
                      edit4.Text:='';  
                      edit5.Text:='';  
                  end   else   MessageDlg('Remove   failed!',   mtError,   [mbOK],   0);  
  end;  
   
  function   TID3Info.ID3TagsAreEqual(ID3Tag1,   ID3Tag2:   TID3Tag):   Boolean;  
  begin  
        with   ID3Tag1   do  
          if   (string(ID3Tag2.Tag)   <>   string(Tag))   or  
              (string(ID3Tag2.Songname)   <>   string(SongName))   or  
              (string(ID3Tag2.Artist)   <>   string(Artist))   or  
              (string(ID3Tag2.Album)   <>   string(Album))   or  
              (string(ID3Tag2.Year)   <>   string(Year))   or  
              (string(ID3Tag2.Comment)   <>   string(Comment))   or  
              (ID3Tag2.Genre   <>   Genre)   then   Result   :=   False  
          else   Result   :=   True;  
  end;  
   
  function   TID3Info.ReadID3Tag(FileName:   string):   TID3Tag;  
  var  
      F:   file;  
  begin  
  {$I-}  
      AssignFile(F,   FileName);  
      Reset(F,   1);  
      Seek(F,   Filesize(F)   -   SizeOf(TID3Tag));  
      Result.Tag[1]   :=   'N';  
      BlockRead(F,   Result,   SizeOf(TID3Tag));  
      CloseFile(F);  
  {$I+}  
  end;  
   
  function   TID3Info.RemoveID3Tag(FileName:   string):   Boolean;  
  var  
      FileHandle:   integer;  
      attr:Integer;  
  begin  
  {$I-}  
      attr:=FileGetAttr(FileName);  
      FileSetAttr(FileName,faArchive);  
      FileHandle   :=   FileOpen(FileName,   fmOpenReadWrite   or   fmShareDenyWrite);  
      if   FileHandle   >   0   then  
              if   ID3Tag.Tag   =   'TAG'   then  
                  begin  
                      FileSeek(FileHandle,   0   -   SizeOf(TID3Tag),   2);  
                      SetEndOfFile(FileHandle);  
                  end;  
        FileClose(FileHandle);  
        result   :=   FileHandle   <>   0;  
        FileSetAttr(FileName,attr);  
  {$I+}  
  end;  
   
  function   TID3Info.WriteID3Tag(FileName:   string;   ID3InfoTag:   TID3Tag):   Boolean;  
  var  
      F:   file;  
      X:   Integer;  
      attr:Integer;  
  begin  
  {$I-}  
      attr:=FileGetAttr(FileName);  
      FileSetAttr(FileName,faArchive);  
      AssignFile(F,   FileName);  
      Reset(F,   1);  
      X:=0;  
      if   ReadID3Tag(FileName).Tag   <>   'TAG'   then   Seek(F,   FileSize(F))  
      else   Seek(F,   FileSize(F)   -   SizeOf(TID3Tag));  
      BlockWrite(F,   ID3Tag,   SizeOf(TID3Tag),   X);  
      Result   :=   (X   <>   0);  
      CloseFile(F);  
      FileSetAttr(FileName,attr);  
  {$I+}  
  end;  
   
  procedure   TID3Info.UpdateClick(Sender:   TObject);  
  var   s:   string;  
  begin  
      if   FileExists(fn)   then  
        with   ID3Tag   do  
            begin  
                Tag   :=   'TAG';  
                S   :=   edit1.text;  
                if   length(S)   >   30   then   setlength(S,   30);  
                StrPCopy(Songname,   S);  
                S   :=   edit2.text;  
                if   length(S)   >   30   then   setlength(S,   30);  
                StrPCopy(Artist,   S);  
                S   :=   edit3.text;  
                if   length(S)   >   30   then   setlength(S,   30);  
                StrPCopy(Album,   S);  
                S   :=   edit4.text;  
                if   length(S)   >   4   then   setlength(S,   4);  
                StrPCopy(Year,   S);  
                S   :=   edit5.text;  
                if   length(S)   >   30   then   setlength(S,   30);  
                StrPCopy(Comment,   S);  
                if   WriteID3Tag(fn,   ID3Tag)  
                      then   MessageDlg('Update   ok!',   mtInformation,   [mbOK],   0)  
                      else   begin  
                                    MessageDlg('Update   failed!',   mtError,   [mbOK],   0);  
                                    FormShow(nil);  
                                end;  
            end;  
  end;  
   
  procedure   TID3Info.FormShow(Sender:   TObject);  
  begin  
      FN   :=   SongListForm.GetSelectedFileName;  
      if   FileExists(FN)  
            then   ID3Tag:=ReadID3Tag(FN)  
            else   begin  
                          MessageDlg('File   cannot   be   found!',   mtError,   [mbOK],   0);  
                          PostMessage(Handle,   WM_Close,   0,   0);  
                          Exit;  
                      end;  
      if   (ID3Tag.Tag   =   'TAG')   and   (trim(ID3Tag.songname)   <>   '')     then  
            begin  
                //Display   the   Songname   etc..   in   the   Label  
                edit1.Text   :=     Trim(ID3Tag.songname);  
                edit2.Text   :=     Trim(ID3Tag.Artist);  
                edit3.Text   :=     Trim(ID3Tag.Album);  
                edit4.Text   :=     Trim(ID3Tag.Year);  
                edit5.Text   :=     Trim(ID3Tag.Comment);  
            end   else  
                        begin  
                            edit1.Text   :=     ExtractFileName(FN);  
                            edit2.Text   :=     '';  
                            edit3.Text   :=     '';  
                            edit4.Text   :=     '';  
                            edit5.Text   :=     '';  
                        end;  
  end;  
   
  procedure   TID3Info.OKClick(Sender:   TObject);  
  begin  
      Close;  
  end;  
   
  end.  
   
  Top

3 楼wuliangxia(liang)回复于 2003-12-03 08:44:52 得分 0

liu   yang厉害,标记下来先.Top

4 楼tgh1981(虚拟等待)回复于 2003-12-05 10:26:41 得分 0

不错哦,哪里还有像这样的资料啊?Top

5 楼fj218(双元)回复于 2003-12-05 21:25:48 得分 25

unit   MyMp3;  
   
  interface  
  uses   classes;  
   
  type  
  TID3Tag   =   packed   record   //   128   字节  
        TAGID:   array[0..2]   of   char;   //   3   字节:   必须是TAG  
        Title:   array[0..29]   of   char;   //   30   字节:   歌曲标题  
        Artist:   array[0..29]   of   char;   //   30   字节:   歌曲的艺术家  
        Album:   array[0..29]   of   char;   //   30   字节:   歌曲专辑  
        Year:   array[0..3]   of   char;   //   4   字节:   出版年  
        Comment:   array[0..29]   of   char;   //   30   字节:   评论  
        Genre:   byte;   //   1   字节:   种类标识  
  end;  
   
  Function   GetMp3TAG(const   Mp3FileName:string):TID3Tag;  
   
  implementation  
   
  Function   GetMp3TAG(const   Mp3FileName:string):TID3Tag;  
  var  
      id3tag:   Tid3tag;  
      mp3file:   Tfilestream;  
  begin  
   
      mp3file:=Tfilestream.create(Mp3FileName,$0000);  
      mp3file.position:=mp3file.size-128;   //   跳到id3-tag  
      mp3file.Read(Result,SizeOf(Result));  
      mp3file.free;  
  end;  
   
  end.  
   
  在要调用的单元uses   MyMp3;  
  然后声明一个  
  var  
  m:TID3TAg;  
  就可以通过m:=GetMp3tag('C:\1.mp3');  
  显示是showmessage(m.Title+'   '+m.Artist+'   '+m.Album+'   '+m.Year+'   '+m.Comment);Top

6 楼xiaoqiang123(xiaoqiang)回复于 2003-12-05 22:01:51 得分 0

向一楼学习Top

7 楼year2000bug(江南)回复于 2003-12-05 22:25:58 得分 0

学习Top

8 楼codehunter008(马里奥)回复于 2003-12-05 22:51:54 得分 0

来晚了!Top

9 楼严黎斌()回复于 2003-12-05 23:09:20 得分 0

我很久以前自己也做过这么个unit,呵呵  
  Top

相关问题

  • 知道网页文件名,能把title读取出来吗?
  • java可以读取出word等文件的摘要信息嘛?
  • java怎么读取出word等文件的摘要信息嘛?
  • 如何从文本文件中读取出中文字符串
  • 如何把编程把PDF文件读取出来?
  • 如何把客户端的文件数据读取出来写入服务器(不上传文件)
  • 请问怎样才能把一个文件夹下的所有的文件名读取出来!
  • 求救啊:从何从文件夹把文件名读取出来,然后写到列表框<selcect>的option中。
  • 求ASP将文件上传到数据库和从数据库读取出文件的方法
  • 怎样将置顶位置的文本文件中的内容读取出来?

关键词

  • mp3
  • tag
  • 文件
  • tid
  • songname
  • edit
  • mp
  • readid
  • album
  • mbok

得分解答快速导航

  • 帖主:tgh1981
  • ly_liuyang
  • fj218

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo