unit TagEditorLibConsts;

interface

//////////////////////////////////////////
//
// freeDBTagger Plugin Constants
// Copyright(C) 2007 by Noradaiko
// http://nw.odoruinu.net/
//
//////////////////////////////////////////

uses Windows, SysUtils, Classes;

const

// ライブラリ情報
FDBT_VERSION            = 0;        // バージョン
FDBT_DESCRIPTION        = 1;        // 説明
FDBT_EXTENSIONS         = 2;        // 対応拡張子
FDBT_AUTHOR             = 3;        // 作者

// エラー定数
FDBT_SUCCESS            = 0;        // 正常終了
FDBT_NOTIMPLEMENTED     = -1;       // 実装されていない
FDBT_NOTSUPPORTED       = -2;       // サポートされていない
FDBT_INTERNAL_ERROR     = -100;     // 内部エラー

// 値の種類
FDBT_VALUE_TYPE_INTEGER  = 0;           // 整数
FDBT_VALUE_TYPE_DOUBLE   = 1;           // 小数
FDBT_VALUE_TYPE_STRING   = 2;           // 文字列
FDBT_VALUE_TYPE_LIST     = 3;           // リスト
FDBT_VALUE_TYPE_LISTEDIT = 4;           // リスト&エディット
FDBT_VALUE_TYPE_TEXT     = 5;           // 複数行文字列
FDBT_VALUE_TYPE_REFER    = 10;          // 参照(文字列)

// 標準のタグフィールド名
FDBT_FIELD_TITLE         = 'title';
FDBT_FIELD_ARTIST        = 'artist';
FDBT_FIELD_ALBUM         = 'album';
FDBT_FIELD_TRACK         = 'track';
FDBT_FIELD_YEAR          = 'year';
FDBT_FIELD_GENRE         = 'genre';
FDBT_FIELD_COMMENT       = 'comment';
FDBT_FIELD_DURATION      = 'duration';
FDBT_FIELD_LENGTH        = 'length';
FDBT_FIELD_BITRATE       = 'bitrate';

// エディタ用フィールド名
FDBT_FIELD_INDEX         = 'index';
FDBT_FIELD_FILENAME      = 'filename';


type

TCreateService = function(name: PChar; proc: Pointer): integer; stdcall;
TGetService = function(name: PChar): Pointer; stdcall;

TFdbtPluginInitInfo = record
  CreateService: TCreateService;
  GetService: TGetService;
end;
PFdbtPluginInitInfo = ^TFdbtPluginInitInfo;


TCharArray = array[0..255] of char;


{ リストデータ }
TTagListData = array of PChar;
PTagListData = ^TTagListData;

{ タグフィールド }
TTagField = record
  Name: TCharArray;         // フィールドの名前
  DisplayName: TCharArray;  // 表示名
  ValueType: integer;       // 値の種類
  Editable: bool;           // 編集可能かどうか
  Visible: bool;            // エディタに表示するか
  Data: pointer;            // その他の値(リストの場合は項目データ)
end;
PTagField = ^TTagField;
TTagFieldList = array of TTagField;
PTagFieldList = ^TTagFieldList;


{ タグ情報 }
TTagValue = record
  Field: TCharArray;            // フィールド名
  Value: TCharArray;            // 値
end;
PTagValue = ^TTagValue;


{ タグ情報格納構造体 }
TTagInfo = array of TTagValue;
PTagInfo = ^TTagInfo;


{ 参照編集のコールバック関数 }
TReferEditingCallback = function(index: integer; TagValue: PTagValue): integer; stdcall;


{ ジャンル情報 }
const
  MAX_MUSIC_GENRES = 148;    // Max. number of music genres
var
  GenreList: TTagListData;


function TranslateValue(const value; size: integer): TCharArray;
function TranslateVariant(v: TCharArray; ValueType: integer): variant;

implementation

function TranslateValue(const value; size: integer): TCharArray;
var
  v: TCharArray;
begin
  ZeroMemory(@v, sizeof(v));
  CopyMemory(@v, @value, size);
  Result:=v;
end;

function TranslateVariant(v: TCharArray; ValueType: integer): variant;
var
  int: integer;
  dbl: double;
begin
  case ValueType of
  FDBT_VALUE_TYPE_INTEGER, FDBT_VALUE_TYPE_LIST:
    begin
      CopyMemory(@int, @v, Sizeof(integer));
      Result:=int;
    end;
  FDBT_VALUE_TYPE_DOUBLE:
    begin
      CopyMemory(@dbl, @v, Sizeof(double));
      Result:=dbl;
    end;
  FDBT_VALUE_TYPE_STRING, FDBT_VALUE_TYPE_LISTEDIT, FDBT_VALUE_TYPE_REFER, FDBT_VALUE_TYPE_TEXT:
    begin
      Result:=string(PChar(@v));
    end;
  end;
end;


initialization

  SetLength(GenreList, MAX_MUSIC_GENRES);
  GenreList[0] := 'Blues';
  GenreList[1] := 'Classic Rock';
  GenreList[2] := 'Country';
  GenreList[3] := 'Dance';
  GenreList[4] := 'Disco';
  GenreList[5] := 'Funk';
  GenreList[6] := 'Grunge';
  GenreList[7] := 'Hip-Hop';
  GenreList[8] := 'Jazz';
  GenreList[9] := 'Metal';
  GenreList[10] := 'New Age';
  GenreList[11] := 'Oldies';
  GenreList[12] := 'Other';
  GenreList[13] := 'Pop';
  GenreList[14] := 'R&B';
  GenreList[15] := 'Rap';
  GenreList[16] := 'Reggae';
  GenreList[17] := 'Rock';
  GenreList[18] := 'Techno';
  GenreList[19] := 'Industrial';
  GenreList[20] := 'Alternative';
  GenreList[21] := 'Ska';
  GenreList[22] := 'Death Metal';
  GenreList[23] := 'Pranks';
  GenreList[24] := 'Soundtrack';
  GenreList[25] := 'Euro-Techno';
  GenreList[26] := 'Ambient';
  GenreList[27] := 'Trip-Hop';
  GenreList[28] := 'Vocal';
  GenreList[29] := 'Jazz+Funk';
  GenreList[30] := 'Fusion';
  GenreList[31] := 'Trance';
  GenreList[32] := 'Classical';
  GenreList[33] := 'Instrumental';
  GenreList[34] := 'Acid';
  GenreList[35] := 'House';
  GenreList[36] := 'Game';
  GenreList[37] := 'Sound Clip';
  GenreList[38] := 'Gospel';
  GenreList[39] := 'Noise';
  GenreList[40] := 'AlternRock';
  GenreList[41] := 'Bass';
  GenreList[42] := 'Soul';
  GenreList[43] := 'Punk';
  GenreList[44] := 'Space';
  GenreList[45] := 'Meditative';
  GenreList[46] := 'Instrumental Pop';
  GenreList[47] := 'Instrumental Rock';
  GenreList[48] := 'Ethnic';
  GenreList[49] := 'Gothic';
  GenreList[50] := 'Darkwave';
  GenreList[51] := 'Techno-Industrial';
  GenreList[52] := 'Electronic';
  GenreList[53] := 'Pop-Folk';
  GenreList[54] := 'Eurodance';
  GenreList[55] := 'Dream';
  GenreList[56] := 'Southern Rock';
  GenreList[57] := 'Comedy';
  GenreList[58] := 'Cult';
  GenreList[59] := 'Gangsta';
  GenreList[60] := 'Top 40';
  GenreList[61] := 'Christian Rap';
  GenreList[62] := 'Pop/Funk';
  GenreList[63] := 'Jungle';
  GenreList[64] := 'Native American';
  GenreList[65] := 'Cabaret';
  GenreList[66] := 'New Wave';
  GenreList[67] := 'Psychadelic';
  GenreList[68] := 'Rave';
  GenreList[69] := 'Showtunes';
  GenreList[70] := 'Trailer';
  GenreList[71] := 'Lo-Fi';
  GenreList[72] := 'Tribal';
  GenreList[73] := 'Acid Punk';
  GenreList[74] := 'Acid Jazz';
  GenreList[75] := 'Polka';
  GenreList[76] := 'Retro';
  GenreList[77] := 'Musical';
  GenreList[78] := 'Rock & Roll';
  GenreList[79] := 'Hard Rock';
  { Extended genres }
  GenreList[80] := 'Folk';
  GenreList[81] := 'Folk-Rock';
  GenreList[82] := 'National Folk';
  GenreList[83] := 'Swing';
  GenreList[84] := 'Fast Fusion';
  GenreList[85] := 'Bebob';
  GenreList[86] := 'Latin';
  GenreList[87] := 'Revival';
  GenreList[88] := 'Celtic';
  GenreList[89] := 'Bluegrass';
  GenreList[90] := 'Avantgarde';
  GenreList[91] := 'Gothic Rock';
  GenreList[92] := 'Progressive Rock';
  GenreList[93] := 'Psychedelic Rock';
  GenreList[94] := 'Symphonic Rock';
  GenreList[95] := 'Slow Rock';
  GenreList[96] := 'Big Band';
  GenreList[97] := 'Chorus';
  GenreList[98] := 'Easy Listening';
  GenreList[99] := 'Acoustic';
  GenreList[100]:= 'Humour';
  GenreList[101]:= 'Speech';
  GenreList[102]:= 'Chanson';
  GenreList[103]:= 'Opera';
  GenreList[104]:= 'Chamber Music';
  GenreList[105]:= 'Sonata';
  GenreList[106]:= 'Symphony';
  GenreList[107]:= 'Booty Bass';
  GenreList[108]:= 'Primus';
  GenreList[109]:= 'Porn Groove';
  GenreList[110]:= 'Satire';
  GenreList[111]:= 'Slow Jam';
  GenreList[112]:= 'Club';
  GenreList[113]:= 'Tango';
  GenreList[114]:= 'Samba';
  GenreList[115]:= 'Folklore';
  GenreList[116]:= 'Ballad';
  GenreList[117]:= 'Power Ballad';
  GenreList[118]:= 'Rhythmic Soul';
  GenreList[119]:= 'Freestyle';
  GenreList[120]:= 'Duet';
  GenreList[121]:= 'Punk Rock';
  GenreList[122]:= 'Drum Solo';
  GenreList[123]:= 'A capella';
  GenreList[124]:= 'Euro-House';
  GenreList[125]:= 'Dance Hall';
  GenreList[126]:= 'Goa';
  GenreList[127]:= 'Drum & Bass';
  GenreList[128]:= 'Club-House';
  GenreList[129]:= 'Hardcore';
  GenreList[130]:= 'Terror';
  GenreList[131]:= 'Indie';
  GenreList[132]:= 'BritPop';
  GenreList[133]:= 'Negerpunk';
  GenreList[134]:= 'Polsk Punk';
  GenreList[135]:= 'Beat';
  GenreList[136]:= 'Christian Gangsta Rap';
  GenreList[137]:= 'Heavy Metal';
  GenreList[138]:= 'Black Metal';
  GenreList[139]:= 'Crossover';
  GenreList[140]:= 'Contemporary Christian';
  GenreList[141]:= 'Christian Rock';
  GenreList[142]:= 'Merengue';
  GenreList[143]:= 'Salsa';
  GenreList[144]:= 'Thrash Metal';
  GenreList[145]:= 'Anime';
  GenreList[146]:= 'JPop';
  GenreList[147]:= 'Synthpop';



end.
