mp3ファイルのカバー(ジャケット)を取得するには

タグの編集
投稿者 ねぼすけ  (社会人) 投稿日時 2016/8/24 07:24:24
ミュージックプレイヤー(ファイルはmp3のみ)を作ろうとしています。WindowsMediaPlayerのような高機能ではなく、①曲名②アーティスト名③アルバム名④曲の長さ⑤ジャケット(画像)
を表示して曲が流れるというものです。①~④まではshell32.dllを利用して取得する情報はたくさんあるのでできましたが、⑤については、その情報がヒットしません。取得するにはどのようにしたら良いのでしょうか。宜しくお願いします。
投稿者 まりもん  (社会人) 投稿日時 2016/8/24 11:28:32
http://www.codeproject.com/Articles/17890/Do-Anything-With-ID
中身を見ていないんですが、これなんか参考になりませんかね?
投稿者 ねぼすけ  (社会人) 投稿日時 2016/8/24 12:28:19
英語の解読に1年、いやそれ以上かかりそうです。
申し訳ありません。
投稿者 まりもん  (社会人) 投稿日時 2016/8/24 13:40:48
MP3のID3v2の中に画像が入っているので、ID3v2を読み込む処理を自分で作成するか
http://glassocean.net/perrys-id3-tag-library/
のようなライブラリを利用して作成することになるかと

自分で作成するとしても、上記ライブラリはオープンソースなので参考になると思います。
投稿者 ねぼすけ  (社会人) 投稿日時 2016/8/24 16:16:25
翻訳かけながら、少し見てみます。色々と探してくれたのでしょう。ありがとうございます。
投稿者 YuO  (社会人) 投稿日時 2016/8/24 20:38:47
ID3tag V2.3およびID3tag V2.4だと,それぞれ,

曲名:TIT2
アーティスト名:TPE1
アルバム名:TALB
曲の長さ (ms):TLEN
ジャケット:APIC

のフレームに入っています。
フレーム自体は10バイトのフレームヘッダとそれに続くフレームデータの繰り返しで,
フレームデータを読むこと自体はバイナリファイルとビット演算に慣れていれば難しくはありません。
TLENの値が信用できるかや,APICのどの情報を使うかなどは別途考える必要がありますが。
# v2がなければv1読む,といったことも必要になります。

・ID3.org - The MP3 Tag Standard
http://id3.org/
ここのDeveloper InformationにID3tag v2.2/3/4の仕様書があります。
※v1はWikipediaのID3タグのページに十分な情報があります。
投稿者 ねぼすけ  (社会人) 投稿日時 2016/8/25 05:29:18
まりもんさん、YuOさん、ありがとうございます。タグに関して、バージョンがいくつもあり、カバーを抜き出す前にタグ、バイナリファイル、ビット演算等の理解が必要だということですね。腰据えてゆっくり取り組んでいきます。
一応解決にチェック入れます。
投稿者 ねぼすけ  (社会人) 投稿日時 2016/10/25 08:54:42
まりもんさんから教えていただいた
http://glassocean.net/perrys-id3-tag-library/
を翻訳機能と貧弱な英語力を駆使し、MP3のID3v2から画像を取得することができるようになりました。
Webの「Instruction」の「Visual Studio Usage Example」によると
1.Webの「Downloads」から「Source Code(.sln,.vbproj)」をクリックして「Perry's ID3 Tag Library v0.4 SOURCE.zip」を得、展開するとその中に「Perry's ID3 Tag Library」があります。
2.Visual Studioで新しいプロジェクトを作成します。デフォルトでは「WindowsApplication1」。
3.「ファイル」→「追加」→「既存のプロジェクト」から「Perry's ID3 Tag Library.vbproj」を開きます。
  ソリューションエクスプローラーでは2つのプロジェクトが見えます。
4.「WindowsApplication1」の「参照」を右クリック→「参照の追加」をクリック。参照マネージャーが開かれ、「プロジェクト」をクリッ クすると「Pery's ID3 Tag Library」が現れます。そこに、チェックを入れます。(参照に加えられる)
5.「WindowsApplication1」から使えるようになります。
使用例として次のコードが載っていました。
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
      Dim myMP3 As New ID3TagLibrary.MP3File(“C:\test.mp3”)
      MessageBox.Show(myMP3.Artist)
End Sub
まだ、ペリーさんのコードの解析はできていませんが、
Dim myMP3 As New ID3TagLibrary.MP3File(.....)
のあと、次のプロパティーで主要な項目が得られます
「myMP3.Artist」でアーティスト名
「.Album」でアルバム
「.Title」で曲名
問題のジャケットの画像ですが、
「myMP3.Tag2.Artwork(0)」
で取得できることがわかりました。(引数が何を意味しているのかは今のところわかりません。100でも同じように取得できます。)
ただ、項目が日本語で書かれている場合はきっちりと取得できていません。
Webに「117Comments」があるので、読み解くと答えが出てきそうな気がしています。