どういういきさつなのか分かりませんが、現在はmp3infpの作者ではない方がUnicode対応版を作成していてWin32工作小屋
サポートBBSにアップしているようです。
Unicode版の方はBBSでダウンロードしたファイルを解凍してインストーラを起動してmp3infpをインストールしないとmp3infp.dllを取り出せないようです。
また解凍したフォルダの直下にインストーラがないのでインストールの仕方が分かりづらく戸惑ってしまいます。
インストーラは解凍したフォルダ中のsrc\installフォルダ中にあります。
mp3infp254h_u10.exeなどのバージョン番号つきの実行ファイルがインストーラなのでそれを起動させてインストールします。
インストールできたらWindowsのSystem32フォルダにmp3infp.dllがあるのでそれをコピーして使います。
unit use_mp3infpW;
interface
uses
Windows;
const
mp3infp = 'mp3infp.dll';
{
function mp3infp_GetVer: DWORD; stdcall';
function mp3infp_ViewPropEx(hWnd: HWND; const szFileName: PAnsiChar; dwPage: DWORD; modeless: BOOL; param1: DWORD; param2: DWORD): Integer; stdcall';
function mp3infp_ViewProp(hWnd: HWND; const szFileName: PAnsiChar; dwPage: DWORD): BOOL; stdcall;
function mp3infp_GetType: DWORD; stdcall;
function mp3infp_Load(hWnd: HWND; const szFileName: PAnsiChar): DWORD; stdcall;
function mp3infp_GetValue(const szValueName: PAnsiChar; buf: Pointer): BOOL; stdcall;
function mp3infp_mp3_GetTagType: DWORD; stdcall;
function mp3infp_SetConf(tag: PAnsiChar; value: PAnsiChar): BOOL; stdcall;
function mp3infp_SetValue (const szValueName: PAnsiChar; const buf: PAnsiChar): DWORD; stdcall;
function mp3infp_Save (const szFileName: PAnsiChar): DWORD; stdcall;
function mp3infp_mp3_MakeId3v1 (const szFileName: PAnsiChar): DWORD; stdcall;
function mp3infp_mp3_DelId3v1 (const szFileName: PAnsiChar): DWORD; stdcall;
function mp3infp_mp3_MakeId3v2 (const szFileName: PAnsiChar): DWORD; stdcall;
function mp3infp_mp3_DelId3v2 (const szFileName: PAnsiChar): DWORD; stdcall;
function mp3infp_mp3_MakeRMP (const szFileName: PAnsiChar): DWORD; stdcall;
function mp3infp_mp3_DelRMP (const szFileName: PAnsiChar): DWORD; stdcall;
function mp3infp_mp3_MakeApeTag(const szFileName: PAnsiChar): DWORD; stdcall;
function mp3infp_mp3_DelApeTag (const szFileName: PAnsiChar): DWORD; stdcall;
}
{=======================================================================================
名前: 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;
function mp3infp_ViewPropExA(hWnd: HWND;
const szFileName: PAnsiChar; dwPage: DWORD; modeless: BOOL; param1: DWORD; param2: DWORD): Integer;
stdcall external mp3infp;
function mp3infp_ViewPropExW(hWnd: HWND;
const szFileName: PWideChar; 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;
function mp3infp_ViewPropA(hWnd: HWND;
const szFileName: PAnsiChar; dwPage: DWORD): BOOL;
stdcall external mp3infp;
function mp3infp_ViewPropW(hWnd: HWND;
const szFileName: PWideChar; 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;
function mp3infp_LoadA(hWnd: HWND;
const szFileName: PAnsiChar): DWORD;
stdcall external mp3infp;
function mp3infp_LoadW(hWnd: HWND;
const szFileName: PWideChar): 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;
function mp3infp_GetValueA(
const szValueName: PAnsiChar; buf: PPAnsiChar): BOOL;
stdcall external mp3infp;
function mp3infp_GetValueW(
const szValueName: PWideChar; buf: PPWideChar): 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;
function mp3infp_SetValueA(
const szValueName: PAnsiChar;
const buf: PAnsiChar): DWORD;
stdcall external mp3infp;
function mp3infp_SetValueW(
const szValueName: PWideChar;
const buf: PWideChar): 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;
function mp3infp_SaveA(
const szFileName: PAnsiChar): DWORD;
stdcall external mp3infp;
function mp3infp_SaveW(
const szFileName: PWideChar): 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;
function mp3infp_mp3_MakeId3v1A(
const szFileName: PAnsiChar): DWORD;
stdcall external mp3infp;
function mp3infp_mp3_MakeId3v1W(
const szFileName: PWideChar): 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;
function mp3infp_mp3_DelId3v1A(
const szFileName: PAnsiChar): DWORD;
stdcall external mp3infp;
function mp3infp_mp3_DelId3v1W(
const szFileName: PWideChar): 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;
function mp3infp_mp3_MakeId3v2A(
const szFileName: PAnsiChar): DWORD;
stdcall external mp3infp;
function mp3infp_mp3_MakeId3v2W(
const szFileName: PWideChar): 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;
function mp3infp_mp3_DelId3v2A(
const szFileName: PAnsiChar): DWORD;
stdcall external mp3infp;
function mp3infp_mp3_DelId3v2W(
const szFileName: PWideChar): 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;
function mp3infp_mp3_MakeRMPA(
const szFileName: PAnsiChar): DWORD;
stdcall external mp3infp;
function mp3infp_mp3_MakeRMPW(
const szFileName: PWideChar): 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;
function mp3infp_mp3_DelRMPA(
const szFileName: PAnsiChar): DWORD;
stdcall external mp3infp;
function mp3infp_mp3_DelRMPW(
const szFileName: PWideChar): 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;
function mp3infp_mp3_MakeApeTagA(
const szFileName: PAnsiChar): DWORD;
stdcall external mp3infp;
function mp3infp_mp3_MakeApeTagW(
const szFileName: PWideChar): 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;
function mp3infp_mp3_DelApeTagA(
const szFileName: PAnsiChar): DWORD;
stdcall external mp3infp;
function mp3infp_mp3_DelApeTagW(
const szFileName: PWideChar): DWORD;
stdcall external mp3infp;
implementation
end.
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.