.NET TIPS MP3ファイルからタイトルやアーティスト名などを取得するには?[C#、VB]デジタルアドバンテージ 遠藤 孝信2007/05/10 |
|
|
MP3ファイルには、曲のタイトルやアーティスト名といった付加情報(「ID3タグ情報」と呼ばれる)が格納されている。Windowsのエクスプローラでは、ファイルのプロパティ・ダイアログでそれらを確認できる。
MP3ファイルのプロパティ(ID3タグ情報) |
MP3ファイルに格納されている曲のタイトルやアーティスト名、ジャンルといったID3タグ情報を見ることができる。このダイアログでは値の部分をクリックしてその内容を編集することも可能。 |
プログラムからMP3ファイルのID3タグ情報を得るには、MP3ファイルをオープンし、そのフォーマット仕様(ID3.orgで規定されている)に従って順に読み出すこともできるが、Windowsに含まれるShell32.dllの機能を利用すれば、非常に容易に取得できる(ただし主要な項目のみ)。
本稿ではShell32.dllの機能を使用してMP3ファイルのID3タグ情報を取得する方法について解説する。
Shell32.dllの参照設定
Shell32.dll(既定ではC:\WINDOWS\System32に格納されている)は.NETのアセンブリではなくCOMコンポーネントであり、その機能をC#やVBから利用するには、まず参照設定を行う必要がある。
Visual Studioを利用している場合には、ソリューション・エクスプローラ上でプロジェクト内の「参照設定」の項目を右クリックして「参照設定の追加」を実行し、開く[参照の追加]ダイアログの[COM]タブで「Microsoft Shell Controls And Automation」の項目を追加する。
コマンドラインでコンパイルを行う場合には、.NET Framework SDKなどに含まれているツール「TlbImp.exe」を使用して、COMコンポーネントを呼び出すためのインターフェイスとなるアセンブリをまず作成する。これにはコマンド・プロンプトで「TlbImp.exe Shell32.dll」を実行すればよい。これによりアセンブリ・ファイル「Shell32.dll」が作成されるので、コンパイル時には/reference:オプション(省略形は「/r:」)によりそれを参照する(このファイルはプログラムの実行時にも必要であるため、実行ファイルと同じディレクトリに配置する)。
Shell32.dllによりID3タグ情報を表示するサンプル・プログラム
ID3タグ情報を取得するには、Shell32.dllに含まれる以下の3つのクラス/インターフェイスを使用する(これらの名前空間は既定では「Shell32」となる)。
- ShellClassクラス
- Folderインターフェイス
- FolderItemインターフェイス
これらを使用してMP3ファイルのID3タグ情報を表示するサンプル・プログラムを次に示す。ここでは「C:\mp3」ディレクトリにある「james.mp3」というファイルを対象にしている。
| ||
MP3ファイルのID3タグ情報を表示するサンプル・プログラム(上:C#、下:VB) | ||
コンパイル時にはShell32.dllを参照設定する必要がある。 |
プログラムでは、まずShellClassクラスのインスタンスを作成する。次にMP3ファイルの存在するフォルダをパラメータに指定してNameSpaceメソッドを呼び出し、Folderオブジェクトを取得する。続いて、MP3ファイルのファイル名をパラメータに指定してFolderオブジェクトのParseNameメソッドを呼び出し、FolderItemオブジェクトを取得する。
そして最後にFolderオブジェクトのGetDetailsOfメソッドを呼び出すことにより、各ID3タグ情報を文字列として取得できる。このときGetDetailsOfメソッドの第2パラメータには、取得したい情報に対応した番号を指定する。この番号は、エクスプローラで詳細表示可能な列の項目の並びに(ほぼ)対応している。
エクスプローラで表示可能な列の一覧は、エクスプローラのメニューの[表示]−[詳細表示の設定]により表示することができる。
エクスプローラで表示可能な列の一覧 |
メニューの[表示]−[詳細表示の設定]により表示できる。 |
GetDetailsOfメソッドの第2パラメータに指定可能な番号と、エクスプローラの詳細表示時の列項目のヘッダ・タイトル(名前、サイズ、種類など)の一覧については、次のようなプログラムにより取得することもできる。
| ||
GetDetailsOfメソッドで指定可能な項目一覧を表示するサンプル・プログラム(上:C#、下:VB) | ||
コンパイル時にはShell32.dllを参照設定する必要がある。 |
GetDetailsOfメソッドの第1パラメータでnull(VBの場合にはNothing)を指定しているところがポイントだ。
このプログラムの実行結果を表形式で表すと次のようになる。
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
上記サンプル・プログラムの実行結果 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ただしエクスプローラの詳細表示時の列項目はWindowsのシェル拡張機能により追加可能である。上記の結果はWindows XP Professional SP2の既定の状態で実行したときのものだ。
カテゴリ:クラス・ライブラリ 処理対象:ファイル&ディレクトリ 使用ライブラリ:ShellClassクラス(Shell32名前空間) 使用ライブラリ:Folderインターフェイス(Shell32名前空間) 使用ライブラリ:FolderItemインターフェイス(Shell32名前空間) |
|
「.NET TIPS」 |
- 第2回 簡潔なコーディングのために (2017/7/26)
ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている - 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう - 第1回 明瞭なコーディングのために (2017/7/19)
C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える - Presentation Translator (2017/7/18)
Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|