亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? id3v1.pas

?? Lossless Audio 縮解壓 window
?? PAS
?? 第 1 頁 / 共 2 頁
字號:
{ *************************************************************************** }
{                                                                             }
{ Audio Tools Library (Freeware)                                              }
{ Class TID3v1 - for manipulating with ID3v1 tags                             }
{                                                                             }
{ Copyright (c) 2001,2002 by Jurgen Faul                                      }
{ E-mail: jfaul@gmx.de                                                        }
{ http://jfaul.de/atl                                                         }
{                                                                             }
{ Version 1.0 (25 July 2001)                                                  }
{   - Reading & writing support for ID3v1.x tags                              }
{   - Tag info: title, artist, album, track, year, genre, comment             }
{                                                                             }
{ *************************************************************************** }

unit ID3v1;

interface

uses
  Classes, SysUtils;

const
  MAX_MUSIC_GENRES = 148;                       { Max. number of music genres }
  DEFAULT_GENRE = 255;                              { Index for default genre }

  { Used with VersionID property }
  TAG_VERSION_1_0 = 1;                                { Index for ID3v1.0 tag }
  TAG_VERSION_1_1 = 2;                                { Index for ID3v1.1 tag }

var
  MusicGenre: array [0..MAX_MUSIC_GENRES - 1] of string;        { Genre names }

type
  { Used in TID3v1 class }
  String04 = string[4];                          { String with max. 4 symbols }
  String30 = string[30];                        { String with max. 30 symbols }

  { Class TID3v1 }
  TID3v1 = class(TObject)
    private
      { Private declarations }
      FExists: Boolean;
      FVersionID: Byte;
      FTitle: String30;
      FArtist: String30;
      FAlbum: String30;
      FYear: String04;
      FComment: String30;
      FTrack: Byte;
      FGenreID: Byte;
      procedure FSetTitle(const NewTitle: String30);
      procedure FSetArtist(const NewArtist: String30);
      procedure FSetAlbum(const NewAlbum: String30);
      procedure FSetYear(const NewYear: String04);
      procedure FSetComment(const NewComment: String30);
      procedure FSetTrack(const NewTrack: Byte);
      procedure FSetGenreID(const NewGenreID: Byte);
      function FGetGenre: string;
    public
      { Public declarations }
      constructor Create;                                     { Create object }
      procedure ResetData;                                   { Reset all data }
      function ReadFromFile(const FileName: string): Boolean;      { Load tag }
      function RemoveFromFile(const FileName: string): Boolean;  { Delete tag }
      function SaveToFile(const FileName: string): Boolean;        { Save tag }
      property Exists: Boolean read FExists;              { True if tag found }
      property VersionID: Byte read FVersionID;                { Version code }
      property Title: String30 read FTitle write FSetTitle;      { Song title }
      property Artist: String30 read FArtist write FSetArtist;  { Artist name }
      property Album: String30 read FAlbum write FSetAlbum;      { Album name }
      property Year: String04 read FYear write FSetYear;               { Year }
      property Comment: String30 read FComment write FSetComment;   { Comment }
      property Track: Byte read FTrack write FSetTrack;        { Track number }
      property GenreID: Byte read FGenreID write FSetGenreID;    { Genre code }
      property Genre: string read FGetGenre;                     { Genre name }
  end;

implementation

type
  { Real structure of ID3v1 tag }
  TagRecord = record
    Header: array [1..3] of Char;                { Tag header - must be "TAG" }
    Title: array [1..30] of Char;                                { Title data }
    Artist: array [1..30] of Char;                              { Artist data }
    Album: array [1..30] of Char;                                { Album data }
    Year: array [1..4] of Char;                                   { Year data }
    Comment: array [1..30] of Char;                            { Comment data }
    Genre: Byte;                                                 { Genre data }
  end;

{ ********************* Auxiliary functions & procedures ******************** }

function ReadTag(const FileName: string; var TagData: TagRecord): Boolean;
var
  SourceFile: file;
begin
  try
    Result := true;
    { Set read-access and open file }
    AssignFile(SourceFile, FileName);
    FileMode := 0;
    Reset(SourceFile, 1);
    { Read tag }
    Seek(SourceFile, FileSize(SourceFile) - 128);
    BlockRead(SourceFile, TagData, 128);
    CloseFile(SourceFile);
  except
    { Error }
    Result := false;
  end;
end;

{ --------------------------------------------------------------------------- }

function RemoveTag(const FileName: string): Boolean;
var
  SourceFile: file;
begin
  try
    Result := true;
    { Allow write-access and open file }
    FileSetAttr(FileName, 0);
    AssignFile(SourceFile, FileName);
    FileMode := 2;
    Reset(SourceFile, 1);
    { Delete tag }
    Seek(SourceFile, FileSize(SourceFile) - 128);
    Truncate(SourceFile);
    CloseFile(SourceFile);
  except
    { Error }
    Result := false;
  end;
end;

{ --------------------------------------------------------------------------- }

function SaveTag(const FileName: string; TagData: TagRecord): Boolean;
var
  SourceFile: file;
begin
  try
    Result := true;
    { Allow write-access and open file }
    FileSetAttr(FileName, 0);
    AssignFile(SourceFile, FileName);
    FileMode := 2;
    Reset(SourceFile, 1);
    { Write tag }
    Seek(SourceFile, FileSize(SourceFile));
    BlockWrite(SourceFile, TagData, SizeOf(TagData));
    CloseFile(SourceFile);
  except
    { Error }
    Result := false;
  end;
end;

{ --------------------------------------------------------------------------- }

function GetTagVersion(const TagData: TagRecord): Byte;
begin
  Result := TAG_VERSION_1_0;
  { Terms for ID3v1.1 }
  if ((TagData.Comment[29] = #0) and (TagData.Comment[30] <> #0)) or
    ((TagData.Comment[29] = #32) and (TagData.Comment[30] <> #32)) then
    Result := TAG_VERSION_1_1;
end;

{ ********************** Private functions & procedures ********************* }

procedure TID3v1.FSetTitle(const NewTitle: String30);
begin
  FTitle := TrimRight(NewTitle);
end;

{ --------------------------------------------------------------------------- }

procedure TID3v1.FSetArtist(const NewArtist: String30);
begin
  FArtist := TrimRight(NewArtist);
end;

{ --------------------------------------------------------------------------- }

procedure TID3v1.FSetAlbum(const NewAlbum: String30);
begin
  FAlbum := TrimRight(NewAlbum);
end;

{ --------------------------------------------------------------------------- }

procedure TID3v1.FSetYear(const NewYear: String04);
begin
  FYear := TrimRight(NewYear);
end;

{ --------------------------------------------------------------------------- }

procedure TID3v1.FSetComment(const NewComment: String30);
begin
  FComment := TrimRight(NewComment);
end;

{ --------------------------------------------------------------------------- }

procedure TID3v1.FSetTrack(const NewTrack: Byte);
begin
  FTrack := NewTrack;
end;

{ --------------------------------------------------------------------------- }

procedure TID3v1.FSetGenreID(const NewGenreID: Byte);
begin
  FGenreID := NewGenreID;
end;

{ --------------------------------------------------------------------------- }

function TID3v1.FGetGenre: string;
begin
  Result := '';
  { Return an empty string if the current GenreID is not valid }
  if FGenreID in [0..MAX_MUSIC_GENRES - 1] then Result := MusicGenre[FGenreID];
end;

{ ********************** Public functions & procedures ********************** }

constructor TID3v1.Create;
begin
  inherited;
  ResetData;
end;

{ --------------------------------------------------------------------------- }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产三级精品在线| 亚洲超丰满肉感bbw| 亚洲一级片在线观看| 精品无人码麻豆乱码1区2区| 成人h动漫精品| 日韩一区二区三区观看| 综合婷婷亚洲小说| 国产精品自在在线| 91精品国产综合久久久久久漫画| 亚洲国产精品v| 琪琪一区二区三区| 欧美日韩一区不卡| 亚洲欧美日韩一区二区| 国产成人精品一区二| 91精品国产综合久久福利软件| 一区在线观看免费| 国产高清在线观看免费不卡| 欧美一级理论片| 午夜影院久久久| 91高清视频在线| 亚洲欧洲制服丝袜| 成人高清伦理免费影院在线观看| 精品成人免费观看| 久久精品国产999大香线蕉| 欧美日韩一区 二区 三区 久久精品| 1024亚洲合集| 成人在线视频一区| 国产麻豆精品在线| www.亚洲人| 亚洲高清视频的网址| 久久综合视频网| 91论坛在线播放| 国产精品影视网| 欧美变态口味重另类| 日韩专区一卡二卡| 欧美丰满美乳xxx高潮www| 亚洲精品国产品国语在线app| 丁香六月久久综合狠狠色| 久久久美女毛片| 丁香婷婷深情五月亚洲| 国产精品入口麻豆九色| 成人app下载| 亚洲视频一区二区免费在线观看| 99精品一区二区三区| 亚洲欧美日韩国产综合| 欧洲一区在线电影| 日韩福利电影在线观看| 精品免费一区二区三区| 国产精品一区久久久久| 中文无字幕一区二区三区 | 欧美三日本三级三级在线播放| 亚洲欧洲精品一区二区精品久久久| 99热99精品| 亚洲午夜激情av| 日韩美女视频在线| 国产91高潮流白浆在线麻豆 | 一区二区三区波多野结衣在线观看| 成人黄色片在线观看| 依依成人精品视频| 欧美一卡二卡在线| 丁香婷婷综合色啪| 亚洲综合色视频| 欧美tk—视频vk| av男人天堂一区| 日本伊人午夜精品| 国产精品区一区二区三区| 色一区在线观看| 久久激情五月激情| 亚洲欧美日韩一区| 精品国产麻豆免费人成网站| 99精品偷自拍| 毛片av中文字幕一区二区| 亚洲国产精品精华液ab| 欧美日韩精品一区二区三区蜜桃| 久久国产精品区| 亚洲精品午夜久久久| 精品国产乱码91久久久久久网站| 不卡一区二区中文字幕| 免费在线欧美视频| 亚洲人成伊人成综合网小说| 欧美成人video| 91美女片黄在线观看91美女| 麻豆精品蜜桃视频网站| 一区二区三区**美女毛片| 久久久久久一二三区| 欧美午夜影院一区| 国产高清亚洲一区| 日韩1区2区3区| 亚洲精品成a人| 国产亚洲欧洲997久久综合 | 国产乱理伦片在线观看夜一区| 一区二区三区高清| 中文字幕乱码一区二区免费| 欧美一级生活片| 91黄色激情网站| 国产成+人+日韩+欧美+亚洲| 蜜桃视频在线一区| 性做久久久久久| 亚洲理论在线观看| 一色桃子久久精品亚洲| 国产欧美精品一区二区色综合| 日韩一卡二卡三卡国产欧美| 欧美日韩国产美| 欧美在线不卡一区| 色欧美片视频在线观看| 成人av综合一区| 成人福利视频网站| 丁香啪啪综合成人亚洲小说| 国产精品综合av一区二区国产馆| 久久99这里只有精品| 美国十次了思思久久精品导航| 丝袜诱惑亚洲看片| 日韩1区2区日韩1区2区| 日韩精品视频网| 日本不卡一区二区| 日韩av电影免费观看高清完整版在线观看 | 在线成人高清不卡| 久久草av在线| 美女视频黄 久久| 日韩av二区在线播放| 青青草国产精品亚洲专区无| 日韩高清不卡在线| 久久99蜜桃精品| 狠狠色丁香九九婷婷综合五月| 久久99热这里只有精品| 狠狠色狠狠色综合| 国产91在线观看| 99精品欧美一区| 欧美性xxxxx极品少妇| 欧美日韩国产123区| 91精品久久久久久久99蜜桃| 91精品国产综合久久福利| 日韩精品资源二区在线| 国产日韩高清在线| 中文字幕亚洲欧美在线不卡| 亚洲精品视频免费看| 亚洲国产精品一区二区www| 日本三级韩国三级欧美三级| 久久精品国产99国产精品| 国产99久久久国产精品| 91视频在线观看| 欧美一级高清大全免费观看| 久久人人爽人人爽| 亚洲精品伦理在线| 青青青伊人色综合久久| 国产成人无遮挡在线视频| 99久免费精品视频在线观看| 欧美色图激情小说| 久久综合网色—综合色88| 亚洲视频在线观看三级| 全国精品久久少妇| 不卡电影一区二区三区| 欧美人妇做爰xxxⅹ性高电影| 精品少妇一区二区三区在线播放 | 色婷婷综合中文久久一本| 欧美一区二区三区免费视频| 日本一区二区三区电影| 午夜不卡av免费| 国产69精品久久久久毛片 | 91精品婷婷国产综合久久性色| 亚洲精品一区二区三区精华液| 中文字幕日韩精品一区| 老司机免费视频一区二区| 91免费国产视频网站| 精品日韩在线观看| 亚洲综合激情另类小说区| 国产乱码一区二区三区| 欧美日韩一级二级| 国产精品盗摄一区二区三区| 蜜臀99久久精品久久久久久软件 | 中文字幕成人网| 蜜臀av性久久久久蜜臀aⅴ| 一本大道久久精品懂色aⅴ| 久久综合九色欧美综合狠狠| 亚洲电影第三页| 91麻豆国产精品久久| 国产视频一区不卡| 99精品视频一区二区| 精品国产1区二区| 日韩精品电影一区亚洲| 一本一道综合狠狠老| 欧美激情在线看| 国产真实乱偷精品视频免| 3d成人h动漫网站入口| 中文字幕一区二区视频| 国产激情视频一区二区在线观看| 欧美一区二区视频免费观看| 一区二区三区四区在线免费观看 | 精品国产乱码久久久久久夜甘婷婷| 一区二区三区欧美日| heyzo一本久久综合| 久久婷婷色综合| 久久99热这里只有精品| 日韩免费观看高清完整版在线观看| 亚洲一区二区精品视频| 在线视频国内自拍亚洲视频| 亚洲视频一区二区在线观看| 99久久国产综合精品色伊| 亚洲欧洲成人精品av97| 成人激情小说乱人伦|