ホーム >プログラム >Delphi 6 ローテクTips >mp3infp.dllをDelphiから使う

今はもう使わなくなったのですが、もったいないので載せておきます。
値を取得したりプロパティページを呼び出したりするのは確認していますが、書き込み系は私は必要なかったのでコンバートしただけで試していません。
使う場合は注意してください。

Unicode対応版のmp3infp.dllについては「Unicode対応版mp3infp.dllをDelphiから使う」をどうぞ。


mp3infp_GetValueの使い方の例。
wmaのタイトルを表示させる場合、多分こんな感じでいいんじゃないかと思います。

implementation
uses
  use_mp3infp;


procedure TForm1.Button1Click(Sender: TObject);
var
  lp_PStr: PChar;
begin
  if (OpenDialog1.Execute) then begin
    mp3infp_Load(Handle, PChar(OpenDialog1.FileName));
    if (mp3infp_GetValue('INAM', @lp_PStr)) then begin
      ShowMessage(String(lp_PStr));
    end;
  end;
end;

unit use_mp3infp;

interface
uses
  Windows;


{
function mp3infp_GetVer: DWORD; stdcall;
function mp3infp_ViewPropEx(hWnd: HWND; const szFileName: PChar; dwPage: DWORD; modeless: BOOL; param1: DWORD; param2: DWORD): Integer; stdcall;
function mp3infp_ViewProp(hWnd: HWND; const szFileName: PChar; dwPage: DWORD): BOOL; stdcall;
function mp3infp_GetType: DWORD; stdcall;
function mp3infp_Load(hWnd: HWND; const szFileName: PChar): DWORD; stdcall;
function mp3infp_GetValue(const szValueName: PChar; buf: PPChar): BOOL; stdcall;
function mp3infp_mp3_GetTagType: DWORD; stdcall;
function mp3infp_SetConf(tag: PChar; value: PChar): BOOL; stdcall;
function mp3infp_SetValue(const szValueName: PChar; const buf: PChar): DWORD; stdcall;
function mp3infp_Save(const szFileName: PChar): DWORD; stdcall;
function mp3infp_mp3_MakeId3v1 (const szFileName: PChar): DWORD; stdcall;
function mp3infp_mp3_DelId3v1  (const szFileName: PChar): DWORD; stdcall;
function mp3infp_mp3_MakeId3v2 (const szFileName: PChar): DWORD; stdcall;
function mp3infp_mp3_DelId3v2  (const szFileName: PChar): DWORD; stdcall;
function mp3infp_mp3_MakeRMP   (const szFileName: PChar): DWORD; stdcall;
function mp3infp_mp3_DelRMP    (const szFileName: PChar): DWORD; stdcall;
function mp3infp_mp3_MakeApeTag(const szFileName: PChar): DWORD; stdcall;
function mp3infp_mp3_DelApeTag (const szFileName: PChar): DWORD; stdcall;
}


{=======================================================================================
名前:  mp3infp_GetVer
概要:  mp3infpのバージョンを取得する
引数:  なし
戻値:  DWORD  バージョン情報
        Ver.2.11  = 0x0211
備考:
対応:  Ver2.11〜
}

function mp3infp_GetVer: DWORD; stdcall external 'mp3infp.dll';


{=======================================================================================
名前:  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: PChar; dwPage: DWORD; modeless: BOOL; param1: DWORD; param2: DWORD): Integer; stdcall external 'mp3infp.dll';

{=======================================================================================
名前:  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: PChar; dwPage: DWORD): BOOL; stdcall external 'mp3infp.dll';


{=======================================================================================
名前:  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: PChar): DWORD; stdcall external 'mp3infp.dll';


{
////////////////////////////////////////////////////////////////////
表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.dll';


{=======================================================================================
名前:  mp3infp_GetValue
概要:  タグ情報を取得する
補足:  mp3infp_Load()の後に呼び出してください
引数:
        IN const char *szValueName    タグの種類を示す名前(表1を参照)
        OUT char **buf                タグ情報を示すバッファのポインタを受け取るポインタ
戻値:  BOOL 成功=TRUE/失敗=FALSE
対応:  Ver2.26〜
}

function mp3infp_GetValue(const szValueName: PChar; buf: PPChar): BOOL; stdcall external 'mp3infp.dll';


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.dll';


{=======================================================================================
名前:  mp3infp_SetConf
概要:  mp3infpの動作設定
引数:  IN char *tag      設定項目(表2参照)
        IN char *val      設定値(表2参照)
戻値:  BOOL 成功=TRUE/失敗=FALSE
対応:  Ver2.42〜
補足:  ・他のプロセスのmp3infp.dll/シェル拡張のmp3infpには影響しない
        ・設定内容は保存されない
}

function mp3infp_SetConf(tag: PChar; value: PChar): BOOL; stdcall external 'mp3infp.dll';


{=======================================================================================
////////////////////////////////////////////////////////////////////
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: PChar; const buf: PChar): DWORD; stdcall external 'mp3infp.dll';


{=======================================================================================
名前:  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: PChar): DWORD; stdcall external 'mp3infp.dll';


{=======================================================================================
名前:  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: PChar): DWORD; stdcall external 'mp3infp.dll';


{=======================================================================================
名前:  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: PChar): DWORD; stdcall external 'mp3infp.dll';


{=======================================================================================
名前:  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: PChar): DWORD; stdcall external 'mp3infp.dll';


{=======================================================================================
名前:  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: PChar): DWORD; stdcall external 'mp3infp.dll';


{=======================================================================================
名前:  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: PChar): DWORD; stdcall external 'mp3infp.dll';


{=======================================================================================
名前:  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: PChar): DWORD; stdcall external 'mp3infp.dll';


{=======================================================================================
名前:  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: PChar): DWORD; stdcall external 'mp3infp.dll';


{=======================================================================================
名前:  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: PChar): DWORD; stdcall external 'mp3infp.dll';

implementation

end.