unit use_mp3infpU; //実行プログラムのフォルダにあるmp3infp.dllを動的に読み込むユニット。 {$DEFINE UNICODE} interface uses Windows; const MP3INFP_FILE_UNKNOWN = $00; MP3INFP_FILE_MP3 = $01; MP3INFP_FILE_WAV = $02; MP3INFP_FILE_AVI = $03; MP3INFP_FILE_VQF = $04; MP3INFP_FILE_WMA = $05; MP3INFP_FILE_OGG = $07; MP3INFP_FILE_APE = $08; MP3INFP_FILE_MP4 = $09; const MP3INFP_HAS_MP3_ID3V1 = $00000001; MP3INFP_HAS_MP3_ID3V2 = $00000002; MP3INFP_HAS_MP3_RIFFSIF = $00000004; MP3INFP_HAS_MP3_ID3V1_0 = $00000008; // v2.43〜 MP3INFP_HAS_MP3_ID3V1_1 = $00000010; // v2.43〜 MP3INFP_HAS_MP3_ID3V2_2 = $00000020; // v2.43〜 MP3INFP_HAS_MP3_ID3V2_3 = $00000040; // v2.43〜 MP3INFP_HAS_MP3_ID3V2_4 = $00000080; // v2.43〜 MP3INFP_HAS_MP3_APEV1 = $00000100; // v2.47〜 MP3INFP_HAS_MP3_APEV2 = $00000200; // v2.47〜 type Tmp3infp_GetVer = function: DWORD; stdcall; Tmp3infp_GetType = function: DWORD; stdcall; Tmp3infp_mp3_GetTagType = function: DWORD; stdcall; Tmp3infp_ViewPropExA = function(hWnd: HWND; const szFileName: PAnsiChar; dwPage: DWORD; modeless: BOOL; param1: DWORD; param2: DWORD): Integer; stdcall; Tmp3infp_ViewPropA = function(hWnd: HWND; const szFileName: PAnsiChar; dwPage: DWORD): BOOL; stdcall; Tmp3infp_LoadA = function(hWnd: HWND; const szFileName: PAnsiChar): DWORD; stdcall; Tmp3infp_GetValueA = function(const szValueName: PAnsiChar; buf: PPAnsiChar): BOOL; stdcall; Tmp3infp_SetConfA = function(tag: PAnsiChar; val: PAnsiChar): BOOL; stdcall; Tmp3infp_SetValueA = function(const szValueName: PAnsiChar; const buf: PAnsiChar): DWORD; stdcall; Tmp3infp_SaveA = function(const szFileName: PAnsiChar): DWORD; stdcall; Tmp3infp_mp3_MakeId3v1A = function(const szFileName: PAnsiChar): DWORD; stdcall; Tmp3infp_mp3_DelId3v1A = function(const szFileName: PAnsiChar): DWORD; stdcall; Tmp3infp_mp3_MakeId3v2A = function(const szFileName: PAnsiChar): DWORD; stdcall; Tmp3infp_mp3_DelId3v2A = function(const szFileName: PAnsiChar): DWORD; stdcall; Tmp3infp_mp3_MakeRMPA = function(const szFileName: PAnsiChar): DWORD; stdcall; Tmp3infp_mp3_DelRMPA = function(const szFileName: PAnsiChar): DWORD; stdcall; Tmp3infp_mp3_MakeApeTagA = function(const szFileName: PAnsiChar): DWORD; stdcall; Tmp3infp_mp3_DelApeTagA = function(const szFileName: PAnsiChar): DWORD; stdcall; Tmp3infp_ViewPropExW = function(hWnd: HWND; const szFileName: PWideChar; dwPage: DWORD; modeless: BOOL; param1: DWORD; param2: DWORD): Integer; stdcall; Tmp3infp_ViewPropW = function(hWnd: HWND; const szFileName: PWideChar; dwPage: DWORD): BOOL; stdcall; Tmp3infp_LoadW = function(hWnd: HWND; const szFileName: PWideChar): DWORD; stdcall; Tmp3infp_GetValueW = function(const szValueName: PWideChar; buf: PPWideChar): BOOL; stdcall; Tmp3infp_SetConfW = function(tag: PWideChar; val: PWideChar): BOOL; stdcall; Tmp3infp_SetValueW = function(const szValueName: PWideChar; const buf: PWideChar): DWORD; stdcall; Tmp3infp_SaveW = function(const szFileName: PWideChar): DWORD; stdcall; Tmp3infp_mp3_MakeId3v1W = function(const szFileName: PWideChar): DWORD; stdcall; Tmp3infp_mp3_DelId3v1W = function(const szFileName: PWideChar): DWORD; stdcall; Tmp3infp_mp3_MakeId3v2W = function(const szFileName: PWideChar): DWORD; stdcall; Tmp3infp_mp3_DelId3v2W = function(const szFileName: PWideChar): DWORD; stdcall; Tmp3infp_mp3_MakeRMPW = function(const szFileName: PWideChar): DWORD; stdcall; Tmp3infp_mp3_DelRMPW = function(const szFileName: PWideChar): DWORD; stdcall; Tmp3infp_mp3_MakeApeTagW = function(const szFileName: PWideChar): DWORD; stdcall; Tmp3infp_mp3_DelApeTagW = function(const szFileName: PWideChar): DWORD; stdcall; var mp3infp_GetVer: Tmp3infp_GetVer; mp3infp_GetType: Tmp3infp_GetType; mp3infp_mp3_GetTagType: Tmp3infp_mp3_GetTagType; //Ansi版 mp3infp_ViewPropExA: Tmp3infp_ViewPropExA; mp3infp_ViewPropA: Tmp3infp_ViewPropA; mp3infp_LoadA: Tmp3infp_LoadA; mp3infp_GetValueA: Tmp3infp_GetValueA; mp3infp_SetConfA: Tmp3infp_SetConfA; mp3infp_SetValueA: Tmp3infp_SetValueA; mp3infp_SaveA: Tmp3infp_SaveA; mp3infp_mp3_MakeId3v1A: Tmp3infp_mp3_MakeId3v1A; mp3infp_mp3_DelId3v1A: Tmp3infp_mp3_DelId3v1A; mp3infp_mp3_MakeId3v2A: Tmp3infp_mp3_MakeId3v2A; mp3infp_mp3_DelId3v2A: Tmp3infp_mp3_DelId3v2A; mp3infp_mp3_MakeRMPA: Tmp3infp_mp3_MakeRMPA; mp3infp_mp3_DelRMPA: Tmp3infp_mp3_DelRMPA; mp3infp_mp3_MakeApeTagA: Tmp3infp_mp3_MakeApeTagA; mp3infp_mp3_DelApeTagA: Tmp3infp_mp3_DelApeTagA; //Unicode版 mp3infp_ViewPropExW: Tmp3infp_ViewPropExW; mp3infp_ViewPropW: Tmp3infp_ViewPropW; mp3infp_LoadW: Tmp3infp_LoadW; mp3infp_GetValueW: Tmp3infp_GetValueW; mp3infp_SetConfW: Tmp3infp_SetConfW; mp3infp_SetValueW: Tmp3infp_SetValueW; mp3infp_SaveW: Tmp3infp_SaveW; mp3infp_mp3_MakeId3v1W: Tmp3infp_mp3_MakeId3v1W; mp3infp_mp3_DelId3v1W: Tmp3infp_mp3_DelId3v1W; mp3infp_mp3_MakeId3v2W: Tmp3infp_mp3_MakeId3v2W; mp3infp_mp3_DelId3v2W: Tmp3infp_mp3_DelId3v2W; mp3infp_mp3_MakeRMPW: Tmp3infp_mp3_MakeRMPW; mp3infp_mp3_DelRMPW: Tmp3infp_mp3_DelRMPW; mp3infp_mp3_MakeApeTagW: Tmp3infp_mp3_MakeApeTagW; mp3infp_mp3_DelApeTagW: Tmp3infp_mp3_DelApeTagW; {$IFDEF UNICODE} mp3infp_ViewPropEx: Tmp3infp_ViewPropExW; mp3infp_ViewProp: Tmp3infp_ViewPropW; mp3infp_Load: Tmp3infp_LoadW; mp3infp_GetValue: Tmp3infp_GetValueW; mp3infp_SetConf: Tmp3infp_SetConfW; mp3infp_SetValue: Tmp3infp_SetValueW; mp3infp_Save: Tmp3infp_SaveW; mp3infp_mp3_MakeId3v1: Tmp3infp_mp3_MakeId3v1W; mp3infp_mp3_DelId3v1: Tmp3infp_mp3_DelId3v1W; mp3infp_mp3_MakeId3v2: Tmp3infp_mp3_MakeId3v2W; mp3infp_mp3_DelId3v2: Tmp3infp_mp3_DelId3v2W; mp3infp_mp3_MakeRMP: Tmp3infp_mp3_MakeRMPW; mp3infp_mp3_DelRMP: Tmp3infp_mp3_DelRMPW; mp3infp_mp3_MakeApeTag: Tmp3infp_mp3_MakeApeTagW; mp3infp_mp3_DelApeTag: Tmp3infp_mp3_DelApeTagW; {$ELSE} mp3infp_ViewPropEx: Tmp3infp_ViewPropExA; mp3infp_ViewProp: Tmp3infp_ViewPropA; mp3infp_Load: Tmp3infp_LoadA; mp3infp_GetValue: Tmp3infp_GetValueA; mp3infp_SetConf: Tmp3infp_SetConfA; mp3infp_SetValue: Tmp3infp_SetValueA; mp3infp_Save: Tmp3infp_SaveA; mp3infp_mp3_MakeId3v1: Tmp3infp_mp3_MakeId3v1A; mp3infp_mp3_DelId3v1: Tmp3infp_mp3_DelId3v1A; mp3infp_mp3_MakeId3v2: Tmp3infp_mp3_MakeId3v2A; mp3infp_mp3_DelId3v2: Tmp3infp_mp3_DelId3v2A; mp3infp_mp3_MakeRMP: Tmp3infp_mp3_MakeRMPA; mp3infp_mp3_DelRMP: Tmp3infp_mp3_DelRMPA; mp3infp_mp3_MakeApeTag: Tmp3infp_mp3_MakeApeTagA; mp3infp_mp3_DelApeTag: Tmp3infp_mp3_DelApeTagA; {$ENDIF} implementation uses Forms, PsAPI, ShellAPI, SysUtils; //以下のルーチンは読み込むmp3infp.dllをフルパスで指定するために実行ファイルのパス //名を取得するために必要。 function gfnsExeNameGet(sStr: WideString): WideString; overload; var li_Count: Integer; lpp_Arg, lpp_Param: PPWideChar; begin Result := ''; if (sStr <> '') then begin lpp_Param := CommandLineToArgvW(PWideChar(sStr), li_Count); try lpp_Arg := lpp_Param; Result := WideString(lpp_Arg^); //実行ファイル名 finally LocalFree(Cardinal(lpp_Param)); end; end; end; function gfnsExeNameGet: WideString; overload; //WideString対応の実行プログラム名を返す。 function lfni_ProcessIDGet(hHandle: HWND): DWORD; begin GetWindowThreadProcessId(hHandle, @Result); end; function lfns_ExeNameGet(hHandle: HWND): WideString; //ウィンドウハンドルからexeファイル名を返す //http://m--takahashi.com/bbs/pastlog/02500/02414.html //http://www.geocities.jp/fjtkt/problems/2003_0004.html var lh_Process: THandle; ls_PWExe: PWideChar; begin Result := ''; lh_Process := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, False, lfni_ProcessIDGet(hHandle)); try ls_PWExe := AllocMem((MAX_PATH + 1) * 2); try //プロセスハンドルを渡すだけで実行ファイル名を得られた。インスタンスハンドルはいらないようだ。 if (GetModuleFileNameExW(lh_Process, 0, ls_PWExe, MAX_PATH) <> 0) then begin Result := WideString(ls_PWExe); end; finally FreeMem(ls_PWExe); end; finally CloseHandle(lh_Process); end; end; var lh_Handle: HWND; begin lh_Handle := Application.Handle; if (lh_Handle <> 0) then begin Result := lfns_ExeNameGet(lh_Handle); end; if (Result = '') then begin Result := gfnsExeNameGet(GetCommandLineW); end; end; function gfnsFilePathGet(sFile: WideString): WideString; { Unicode対応ExtractFilePath。 ドライブ名も含む。 末尾の'\'はつく。 ドライブ名のみの場合も'\'はつく。 ただしパスが空文字の場合のみ'\'はつかない。 } var i: Integer; begin Result := ''; if (sFile <> '') then begin for i := Length(sFile) downto 1 do begin if (sFile[i] = '\') or (sFile[i] = '/') then begin Result := Copy(sFile, 1, i); Break; end else if (sFile[i] = ':') then begin Result := Copy(sFile, 1, i) + '\'; Break; end; end; end; end; function gfnsExePathGet: WideString; begin Result := gfnsFilePathGet(gfnsExeNameGet); end; //------------------------------------------------------------------------------ var LhModuleHandle: HMODULE; procedure lpcInitFunc; var ls_Path: WideString; begin //実行プログラムのフォルダ。 ls_Path := gfnsExePathGet; //実行プログラムのフォルダにあるmp3infp.dllのみ有効。 LhModuleHandle := LoadLibraryW(PWideChar(ls_Path + 'mp3infp.dll')); if (LhModuleHandle <> 0) then begin mp3infp_GetVer := GetProcAddress(LhModuleHandle, 'mp3infp_GetVer'); mp3infp_GetType := GetProcAddress(LhModuleHandle, 'mp3infp_GetType'); mp3infp_mp3_GetTagType := GetProcAddress(LhModuleHandle, 'mp3infp_mp3_GetTagType'); //Ansi版 mp3infp_ViewPropExA := GetProcAddress(LhModuleHandle, 'mp3infp_ViewPropExA'); mp3infp_ViewPropA := GetProcAddress(LhModuleHandle, 'mp3infp_ViewPropA'); mp3infp_LoadA := GetProcAddress(LhModuleHandle, 'mp3infp_LoadA'); mp3infp_GetValueA := GetProcAddress(LhModuleHandle, 'mp3infp_GetValueA'); mp3infp_SetConfA := GetProcAddress(LhModuleHandle, 'mp3infp_SetConfA'); mp3infp_SetValueA := GetProcAddress(LhModuleHandle, 'mp3infp_SetValueA'); mp3infp_SaveA := GetProcAddress(LhModuleHandle, 'mp3infp_SaveA'); mp3infp_mp3_MakeId3v1A := GetProcAddress(LhModuleHandle, 'mp3infp_mp3_MakeId3v1A'); mp3infp_mp3_DelId3v1A := GetProcAddress(LhModuleHandle, 'mp3infp_mp3_DelId3v1A'); mp3infp_mp3_MakeId3v2A := GetProcAddress(LhModuleHandle, 'mp3infp_mp3_MakeId3v2A'); mp3infp_mp3_DelId3v2A := GetProcAddress(LhModuleHandle, 'mp3infp_mp3_DelId3v2A'); mp3infp_mp3_MakeRMPA := GetProcAddress(LhModuleHandle, 'mp3infp_mp3_MakeRMPA'); mp3infp_mp3_DelRMPA := GetProcAddress(LhModuleHandle, 'mp3infp_mp3_DelRMPA'); mp3infp_mp3_MakeApeTagA := GetProcAddress(LhModuleHandle, 'mp3infp_mp3_MakeApeTagA'); mp3infp_mp3_DelApeTagA := GetProcAddress(LhModuleHandle, 'mp3infp_mp3_DelApeTagA'); //Unicode版 mp3infp_ViewPropExW := GetProcAddress(LhModuleHandle, 'mp3infp_ViewPropExW'); mp3infp_ViewPropW := GetProcAddress(LhModuleHandle, 'mp3infp_ViewPropW'); mp3infp_LoadW := GetProcAddress(LhModuleHandle, 'mp3infp_LoadW'); mp3infp_GetValueW := GetProcAddress(LhModuleHandle, 'mp3infp_GetValueW'); mp3infp_SetConfW := GetProcAddress(LhModuleHandle, 'mp3infp_SetConfW'); mp3infp_SetValueW := GetProcAddress(LhModuleHandle, 'mp3infp_SetValueW'); mp3infp_SaveW := GetProcAddress(LhModuleHandle, 'mp3infp_SaveW'); mp3infp_mp3_MakeId3v1W := GetProcAddress(LhModuleHandle, 'mp3infp_mp3_MakeId3v1W'); mp3infp_mp3_DelId3v1W := GetProcAddress(LhModuleHandle, 'mp3infp_mp3_DelId3v1W'); mp3infp_mp3_MakeId3v2W := GetProcAddress(LhModuleHandle, 'mp3infp_mp3_MakeId3v2W'); mp3infp_mp3_DelId3v2W := GetProcAddress(LhModuleHandle, 'mp3infp_mp3_DelId3v2W'); mp3infp_mp3_MakeRMPW := GetProcAddress(LhModuleHandle, 'mp3infp_mp3_MakeRMPW'); mp3infp_mp3_DelRMPW := GetProcAddress(LhModuleHandle, 'mp3infp_mp3_DelRMPW'); mp3infp_mp3_MakeApeTagW := GetProcAddress(LhModuleHandle, 'mp3infp_mp3_MakeApeTagW'); mp3infp_mp3_DelApeTagW := GetProcAddress(LhModuleHandle, 'mp3infp_mp3_DelApeTagW'); {$IFDEF UNICODE} mp3infp_ViewPropEx := mp3infp_ViewPropExW; mp3infp_ViewProp := mp3infp_ViewPropW; mp3infp_Load := mp3infp_LoadW; mp3infp_GetValue := mp3infp_GetValueW; mp3infp_SetConf := mp3infp_SetConfW; mp3infp_SetValue := mp3infp_SetValueW; mp3infp_Save := mp3infp_SaveW; mp3infp_mp3_MakeId3v1 := mp3infp_mp3_MakeId3v1W; mp3infp_mp3_DelId3v1 := mp3infp_mp3_DelId3v1W; mp3infp_mp3_MakeId3v2 := mp3infp_mp3_MakeId3v2W; mp3infp_mp3_DelId3v2 := mp3infp_mp3_DelId3v2W; mp3infp_mp3_MakeRMP := mp3infp_mp3_MakeRMPW; mp3infp_mp3_DelRMP := mp3infp_mp3_DelRMPW; mp3infp_mp3_MakeApeTag := mp3infp_mp3_MakeApeTagW; mp3infp_mp3_DelApeTag := mp3infp_mp3_DelApeTagW; {$ELSE} mp3infp_ViewPropEx := mp3infp_ViewPropExA; mp3infp_ViewProp := mp3infp_ViewPropA; mp3infp_Load := mp3infp_LoadA; mp3infp_GetValue := mp3infp_GetValueA; mp3infp_SetConf := mp3infp_SetConfA; mp3infp_SetValue := mp3infp_SetValueA; mp3infp_Save := mp3infp_SaveA; mp3infp_mp3_MakeId3v1 := mp3infp_mp3_MakeId3v1A; mp3infp_mp3_DelId3v1 := mp3infp_mp3_DelId3v1A; mp3infp_mp3_MakeId3v2 := mp3infp_mp3_MakeId3v2A; mp3infp_mp3_DelId3v2 := mp3infp_mp3_DelId3v2A; mp3infp_mp3_MakeRMP := mp3infp_mp3_MakeRMPA; mp3infp_mp3_DelRMP := mp3infp_mp3_DelRMPA; mp3infp_mp3_MakeApeTag := mp3infp_mp3_MakeApeTagA; mp3infp_mp3_DelApeTag := mp3infp_mp3_DelApeTagA; {$ENDIF} end; end; {======================================================================================= 名前: mp3infp_GetVer 概要: mp3infpのバージョンを取得する 引数: なし 戻値: DWORD バージョン情報 Ver.2.11 = 0x0211 備考: 対応: Ver2.11〜 } //function mp3infp_GetVer: DWORD; stdcall external mp3infp; {======================================================================================= 名前: mp3infp_ViewPropEx 概要: mp3infpに対応したファイル形式のプロパティを開く(モーダルダイアログ版) 説明: 指定ファイルのプロパティをmp3infpのタブをアクティブにして開きます ※シェルエクステンションを使用せずにmp3infp.dll単独の動作となります ※シェルエクステンション標準のプロパティページは表示されません 引数: IN HWND hWnd 呼び出し元ウインドウハンドル 呼び出し元ウインドウ上にダイアログを表示します NULLならデスクトップを指定したとみなします IN char *szFileName 対象ファイル名をフルパスで指定。 IN DWORD dwPage ・mp3infpの何ページ目をアクティブにするか指定する(0=ID3v1 / 1=ID3v2 / 2=RiffSIF / 3=APE(Ver2.47)) ・タグを含まないmp3の場合のみ有効 ・タグを含む場合はID3v2/APE/RiffSIF/ID3v1の順で検索して、最初に見つかったタグをアクティブにします IN BOOL modeless TRUEならプロパティを表示したまま制御を返します。戻り値にはプロパティのウインドウハンドルが入ります。 FALSEならプロパティを閉じるまで制御を返しません。 DWORD param1 未使用(0を指定してください) DWORD param2 未使用(0を指定してください) 戻値: int 成功=0以上/失敗=-1 対応: Ver2.48〜 } //function mp3infp_ViewPropEx (hWnd: HWND; const szFileName: PAnsiChar; dwPage: DWORD; modeless: BOOL; param1: DWORD; param2: DWORD): Integer; stdcall external mp3infp; {======================================================================================= 名前: mp3infp_ViewProp 概要: mp3infpに対応したファイル形式のプロパティを開く 説明: 指定ファイルのプロパティをmp3infpのタブをアクティブにして開きます 引数: IN HWND hWnd 呼び出し元ウインドウハンドル IN char *szFileName 対象ファイル名をフルパスで指定。 IN DWORD dwPage ・mp3infpの何ページ目をアクティブにするか指定する(0=ID3v1 / 1=ID3v2 / 2=RiffSIF / 3=APE(Ver2.47)) ・タグを含まないmp3の場合のみ有効 ・タグを含む場合はID3v2/APE/RiffSIF/ID3v1の順で検索して、最初に見つかったタグをアクティブにします 戻値: BOOL 成功=TRUE/失敗=FALSE 対応: Ver2.00〜 } //function mp3infp_ViewProp (hWnd: HWND; const szFileName: PAnsiChar; dwPage: DWORD): BOOL; stdcall external mp3infp; {======================================================================================= 名前: mp3infp_Load 概要: タグ情報をロードする 引数: IN HWND hWnd 呼び出し元ウインドウを指定します。無い場合はNULL。 IN const char *szFileName 対象ファイル名をフルパスで指定。 戻値: DWORD -1=ロード失敗 ERROR_SUCCESS=成功 (その他)=Win32エラーコード (FormatMessageで文字列を取得できる) 対応: Ver2.26〜 } //function mp3infp_Load (hWnd: HWND; const szFileName: PAnsiChar): DWORD; stdcall external mp3infp; { //////////////////////////////////////////////////////////////////// 表1 mp3infp_GetValue()/mp3infp_SetValue()でszValueNameに指定する名前一覧 //////////////////////////////////////////////////////////////////// [共通](※1) ファイル名 "FILE" (v2.41〜) 拡張子 "FEXT" (v2.41〜) パス "PATH" (v2.41〜) サイズ(byte単位) "SIZ1" (v2.41〜) サイズ(Kbyte単位) "SIZK" (v2.41〜) サイズ(Mbyte単位) "SIZM" (v2.41〜) [MP3] ID3v1 ID3v2 RiffSIF APE フォーマット(※1) "AFMT" "AFMT" "AFMT" "AFMT" 演奏時間(※1) "TIME" "TIME" "TIME" "TIME" タイトル "INAM_v1" "INAM_v2" "INAM_rmp" "INAM_APE" アーティスト "IART_v1" "IART_v2" "IART_rmp" "IART_APE" アルバム "IPRD_v1" "IPRD_v2" "IPRD_rmp" "IPRD_APE" コメント "ICMT_v1" "ICMT_v2" "ICMT_rmp" "ICMT_APE" 作成日 "ICRD_v1" "ICRD_v2" "ICRD_rmp" "ICRD_APE" ジャンル "IGNR_v1" "IGNR_v2" "IGNR_rmp" "IGNR_APE" (ID3v2/RiffSIF) 著作権 "ICOP_v2" "ICOP_rmp" ソフトウェア/エンコーダ "ISFT_v2" "ISFT_rmp" (ID3v2) 作曲 "COMP_v2" Orig.アーティスト "OART_v2" URL "URL_v2" エンコードした人 "ENC2_v2" (RiffSIF) ソース "ISRC_rmp" エンジニア "IENG_rmp" (ID3v1/2) トラック番号 "TRACK_v1" "TRACK_v2" "TRACK_APE" [WAV] フォーマット(※1) "AFMT" 演奏時間(※1) "TIME" タイトル(※2) "INAM" タイトル(※2) "ISBJ" アーティスト "IART" アルバム "IPRD" コメント "ICMT" 作成日 "ICRD" ジャンル "IGNR" 著作権 "ICOP" ソフトウェア "ISFT" ソース "ISRC" エンジニア "IENG" [AVI] 音声フォーマット(※1) "AFMT" 映像フォーマット(※1) "VFMT" 時間(※1) "TIME" タイトル(※2) "INAM" タイトル(※2) "ISBJ" アーティスト "IART" コメント "ICMT" 作成日 "ICRD" ジャンル "IGNR" 著作権 "ICOP" ソフトウェア "ISFT" ソース "ISRC" エンジニア "IENG" AVIバージョン "AVIV" (v2.37〜) [VQF] フォーマット(※1) "AFMT" 演奏時間(※1) "TIME" タイトル "INAM" アーティスト "IART" コメント "ICMT" 著作権 "ICOP" 保存名 "FILE" [WMA] 音声フォーマット(※1) "AFMT" 映像フォーマット(※1) "VFMT" 時間(※1) "TIME" タイトル "INAM" トラック "TRACK" アーティスト "IART" アルバム "IPRD" コメント "ICMT" 作成日 "ICRD" ジャンル "IGNR" 著作権 "ICOP" URL(Album) "URL1" URL(関連) "URL2" [OGG] フォーマット(※1) "AFMT" 演奏時間(※1) "TIME" タイトル "INAM" アーティスト "IART" アルバム "IPRD" コメント "ICMT" 作成日 "ICRD" ジャンル "IGNR" トラック番号 "TRACK" [APE] フォーマット(※1) "AFMT" 演奏時間(※1) "TIME" タイトル "INAM" アーティスト "IART" アルバム "IPRD" コメント "ICMT" 作成日 "ICRD" ジャンル "IGNR" トラック番号 "TRACK" [MP4] (v2.53〜) 音声フォーマット(※1) "AFMT" 映像フォーマット(※1) "VFMT" タイトル "INAM" アーティスト "IART" アルバム "IPRD" グループ "IGRP" 作曲 "COMPOSER" ジャンル "IGNR" トラック番号1 "TRACK1" (1以上の数値) トラック番号2 "TRACK2" (1以上の数値) ディスク番号1 "DISC1" (1以上の数値) ディスク番号2 "DISC2" (1以上の数値) テンポ "BPM" (数値) 作成日 "ICRD" (4桁の数値 例:"2004") コンピレーション "COMPILATION" ("1" or "0") コメント "ICMT" ツール "TOOL" (※1)mp3infp_SetValue()では利用できません。 (※2)mp3infpではロード時にINAMを優先、無ければISBJを表示。セーブ時にはISBJを削除、INAMを保存します。 } { const MP3INFP_FILE_UNKNOWN = $00; MP3INFP_FILE_MP3 = $01; MP3INFP_FILE_WAV = $02; MP3INFP_FILE_AVI = $03; MP3INFP_FILE_VQF = $04; MP3INFP_FILE_WMA = $05; MP3INFP_FILE_OGG = $07; MP3INFP_FILE_APE = $08; MP3INFP_FILE_MP4 = $09; } {======================================================================================= 名前: mp3infp_GetType 概要: ファイルの種類を取得する 補足: mp3infp_Load()の後に呼び出してください 引数: なし 戻値: DWORD #define MP3INFP_FILE_UNKNOWN 0x00 #define MP3INFP_FILE_MP3 0x01 #define MP3INFP_FILE_WAV 0x02 #define MP3INFP_FILE_AVI 0x03 #define MP3INFP_FILE_VQF 0x04 #define MP3INFP_FILE_WMA 0x05 #define MP3INFP_FILE_OGG 0x07 #define MP3INFP_FILE_APE 0x08 対応: Ver2.26〜 #define MP3INFP_FILE_MP4 0x09 対応: Ver2.53〜 } //function mp3infp_GetType: DWORD; stdcall external mp3infp; {======================================================================================= 名前: mp3infp_GetValue 概要: タグ情報を取得する 補足: mp3infp_Load()の後に呼び出してください 引数: IN const char *szValueName タグの種類を示す名前(表1を参照) OUT char **buf タグ情報を示すバッファのポインタを受け取るポインタ 戻値: BOOL 成功=TRUE/失敗=FALSE 対応: Ver2.26〜 } //function mp3infp_GetValue (const szValueName: PAnsiChar; buf: PPAnsiChar): BOOL; stdcall external mp3infp; { const MP3INFP_HAS_MP3_ID3V1 = $00000001; MP3INFP_HAS_MP3_ID3V2 = $00000002; MP3INFP_HAS_MP3_RIFFSIF = $00000004; MP3INFP_HAS_MP3_ID3V1_0 = $00000008; // v2.43〜 MP3INFP_HAS_MP3_ID3V1_1 = $00000010; // v2.43〜 MP3INFP_HAS_MP3_ID3V2_2 = $00000020; // v2.43〜 MP3INFP_HAS_MP3_ID3V2_3 = $00000040; // v2.43〜 MP3INFP_HAS_MP3_ID3V2_4 = $00000080; // v2.43〜 MP3INFP_HAS_MP3_APEV1 = $00000100; // v2.47〜 MP3INFP_HAS_MP3_APEV2 = $00000200; // v2.47〜 } {======================================================================================= 名前: mp3infp_mp3_GetTagType 概要: mp3が持っているタグの種類を取得する 補足: mp3infp_Load()の後に呼び出してください 引数: なし 戻値: DWORD (OR) #define MP3INFP_HAS_MP3_ID3V1 0x00000001 #define MP3INFP_HAS_MP3_ID3V2 0x00000002 #define MP3INFP_HAS_MP3_RIFFSIF 0x00000004 #define MP3INFP_HAS_MP3_ID3V1_0 0x00000008 // v2.43〜 #define MP3INFP_HAS_MP3_ID3V1_1 0x00000010 // v2.43〜 #define MP3INFP_HAS_MP3_ID3V2_2 0x00000020 // v2.43〜 #define MP3INFP_HAS_MP3_ID3V2_3 0x00000040 // v2.43〜 #define MP3INFP_HAS_MP3_ID3V2_4 0x00000080 // v2.43〜 #define MP3INFP_HAS_MP3_APEV1 0x00000100 // v2.47〜 #define MP3INFP_HAS_MP3_APEV2 0x00000200 // v2.47〜 対応: Ver2.27〜 } //function mp3infp_mp3_GetTagType: DWORD; stdcall external mp3infp; {======================================================================================= 名前: mp3infp_SetConf 概要: mp3infpの動作設定 引数: IN char *tag 設定項目(表2参照) IN char *val 設定値(表2参照) 戻値: BOOL 成功=TRUE/失敗=FALSE 対応: Ver2.42〜 補足: ・他のプロセスのmp3infp.dll/シェル拡張のmp3infpには影響しない ・設定内容は保存されない } //function mp3infp_SetConf(tag: PAnsiChar; value: PAnsiChar): BOOL; stdcall external mp3infp; {======================================================================================= //////////////////////////////////////////////////////////////////// mp3infp_SetConf()指定する設定項目・値一覧 //////////////////////////////////////////////////////////////////// [Waveファイルのコーデック名称の取得方法](Ver2.42〜) (項目名) "wave_CodecFind" (値) "0"(default) mp3infp内蔵辞書 → Windows APIを利用の順で検索(高速) "1" Windows APIを利用 → 自力解析の順で検索(低速) "2" mp3infp内蔵辞書(高速) "3" Windows APIを利用(低速) [Aviファイルのコーデック名称の取得方法](Ver2.42〜) (項目名) "avi_CodecFind" (値) "0"(default) mp3infp内蔵辞書 → Windows APIを利用の順で検索(高速) "1" Windows APIを利用 → 自力解析の順で検索(低速) "2" mp3infp内蔵辞書(高速) "3" Windows APIを利用(低速) [ID3v1で拡張ジャンルを使用する](Ver2.43〜) (項目名) "mp3_UseExtGenre" (値) "0"(default) 無効 "1" 有効 [ID3v2で文字列をUnicodeで書き込む](Ver2.43〜) (項目名) "mp3_ID3v2Unicode" (値) "0"(default) 無効 "1" 有効 [ID3v2を非同期化する](Ver2.43〜) (項目名) "mp3_ID3v2Unsync" (値) "0" 無効 "1"(default) 有効 [保存時のID3v2バージョン](Ver2.43〜) ※この設定値はmp3infp_Load()の実行によって上書きされます。 (項目名) "mp3_SaveID3v2Version" (値) "2.2" ID3v2.2 "2.3"(default) ID3v2.3 "2.4" ID3v2.4 } {======================================================================================= 名前: mp3infp_SetValue 概要: タグ情報を設定する 補足: mp3infp_Load()の後に呼び出してください 引数: IN const char *szValueName タグの種類を示す名前(表1を参照) IN const char *buf タグ情報を示す文字列 戻値: DWORD -1=失敗 ERROR_SUCCESS=成功 対応: Ver.2.43〜 } //function mp3infp_SetValue (const szValueName: PAnsiChar; const buf: PAnsiChar): DWORD; stdcall external mp3infp; {======================================================================================= 名前: mp3infp_Save 概要: タグ情報を保存する 補足: mp3infp_Load()の後に呼び出してください 引数: IN const char *szFileName 対象ファイル名をフルパスで指定。 戻値: DWORD -1=失敗 -2=2Gバイトを超えるファイルを扱うことはできません。(WAVファイルのみ) ERROR_SUCCESS=成功 (その他)=Win32エラーコード (FormatMessageで文字列を取得できる) 対応: Ver.2.43〜 } //function mp3infp_Save (const szFileName: PAnsiChar): DWORD; stdcall external mp3infp; {======================================================================================= 名前: mp3infp_mp3_MakeId3v1 概要: ID3TAG V1を作成する 補足: mp3infp_Load()の後に呼び出してください 変更は直ちに反映されます mp3ファイルにのみ利用してください(wavファイルは対象外) 引数: IN char *szFileName 対象ファイル名をフルパスで指定。 戻値: DWORD -1=失敗 ERROR_SUCCESS=成功 (その他)=Win32エラーコード (FormatMessageで文字列を取得できる) 対応: Ver.2.43〜 } //function mp3infp_mp3_MakeId3v1 (const szFileName: PAnsiChar): DWORD; stdcall external mp3infp; {======================================================================================= 名前: mp3infp_mp3_DelId3v1 概要: ID3TAG V1を削除する 補足: mp3infp_Load()の後に呼び出してください 変更は直ちに反映されます mp3ファイルにのみ利用してください(wavファイルは対象外) 引数: IN char *szFileName 対象ファイル名をフルパスで指定。 戻値: DWORD -1=失敗 ERROR_SUCCESS=成功 (その他)=Win32エラーコード (FormatMessageで文字列を取得できる) 対応: Ver.2.43〜 } //function mp3infp_mp3_DelId3v1 (const szFileName: PAnsiChar): DWORD; stdcall external mp3infp; {======================================================================================= 名前: mp3infp_mp3_MakeId3v2 概要: ID3TAG V2を作成する 補足: mp3infp_Load()の後に呼び出してください 変更は直ちに反映されます mp3ファイルにのみ利用してください(wavファイルは対象外) 引数: IN char *szFileName 対象ファイル名をフルパスで指定。 戻値: DWORD -1=失敗 ERROR_SUCCESS=成功 (その他)=Win32エラーコード (FormatMessageで文字列を取得できる) 対応: Ver.2.43〜 } //function mp3infp_mp3_MakeId3v2 (const szFileName: PAnsiChar): DWORD; stdcall external mp3infp; {======================================================================================= 名前: mp3infp_mp3_DelId3v2 概要: ID3TAG V2を削除する 補足: mp3infp_Load()の後に呼び出してください 変更は直ちに反映されます mp3ファイルにのみ利用してください(wavファイルは対象外) 引数: IN char *szFileName 対象ファイル名をフルパスで指定。 戻値: DWORD -1=失敗 ERROR_SUCCESS=成功 (その他)=Win32エラーコード (FormatMessageで文字列を取得できる) 対応: Ver.2.43〜 } //function mp3infp_mp3_DelId3v2 (const szFileName: PAnsiChar): DWORD; stdcall external mp3infp; {======================================================================================= 名前: mp3infp_mp3_MakeRMP 概要: mp3形式からRMP形式に変換する 補足: mp3infp_Load()の後に呼び出してください 変更は直ちに反映されます mp3ファイルにのみ利用してください(wavファイルは対象外) 引数: IN char *szFileName 対象ファイル名をフルパスで指定。 戻値: DWORD -1=失敗 ERROR_SUCCESS=成功 (その他)=Win32エラーコード (FormatMessageで文字列を取得できる) 対応: Ver.2.43〜 } //function mp3infp_mp3_MakeRMP (const szFileName: PAnsiChar): DWORD; stdcall external mp3infp; {======================================================================================= 名前: mp3infp_mp3_DelRMP 概要: RMP形式からmp3形式に変換する 補足: mp3infp_Load()の後に呼び出してください 変更は直ちに反映されます mp3ファイルにのみ利用してください(wavファイルは対象外) 引数: IN char *szFileName 対象ファイル名をフルパスで指定。 戻値: DWORD -1=失敗 ERROR_SUCCESS=成功 (その他)=Win32エラーコード (FormatMessageで文字列を取得できる) 対応: Ver.2.43〜 } //function mp3infp_mp3_DelRMP (const szFileName: PAnsiChar): DWORD; stdcall external mp3infp; {======================================================================================= 名前: mp3infp_mp3_MakeApeTag 概要: APE Tagを作成する 補足: mp3infp_Load()の後に呼び出してください 変更は直ちに反映されます mp3ファイルにのみ利用してください(wavファイルは対象外) 引数: IN char *szFileName 対象ファイル名をフルパスで指定。 戻値: DWORD -1=失敗 ERROR_SUCCESS=成功 (その他)=Win32エラーコード (FormatMessageで文字列を取得できる) 対応: Ver.2.47〜 } //function mp3infp_mp3_MakeApeTag (const szFileName: PAnsiChar): DWORD; stdcall external mp3infp; {======================================================================================= 名前: mp3infp_mp3_DelApeTag 概要: APE Tagを削除する 補足: mp3infp_Load()の後に呼び出してください 変更は直ちに反映されます mp3ファイルにのみ利用してください(wavファイルは対象外) 引数: IN char *szFileName 対象ファイル名をフルパスで指定。 戻値: DWORD -1=失敗 ERROR_SUCCESS=成功 (その他)=Win32エラーコード (FormatMessageで文字列を取得できる) 対応: Ver.2.47〜 } //function mp3infp_mp3_DelApeTag (const szFileName: PAnsiChar): DWORD; stdcall external mp3infp; //============================================================================== initialization lpcInitFunc; finalization FreeLibrary(LhModuleHandle); end.