VB.NET(2005で試しました。2003でも動作すると思います)で、MP3のタグ情報(ID3v1)を取得してみたいと思います。
第1章.ID3タグについて
音声ファイルフォーマットであるmp3には、ID3タグと呼ばれる情報を保存するエリアがあります。
このエリアには、タイトル、アーティスト名、作成年など、その楽曲の情報を保存することができます。
ID3タグにはいくつかバージョンがあるのですが、今回はID3v1.1について説明したいと思います。
MP3ファイルの後ろ128バイトがID3タグエリアとなっており、表のようなフォーマットとなっています。
| 項目 | バイト数 |
| *1 | 3 |
| タイトル | 30 |
| アーティスト | 30 |
| アルバム | 30 |
| 作成年 | 4 |
| コメント | 28 |
| トラック番号 | 1 |
| ジャンル | 1 |
*1)先頭3バイトには"TAG"という文字列が保存される
第2章.タグ情報を取得する
第1章で、ID3v1.1のタグ情報は128バイトであることを説明しました。
1)このことから、ファイルサイズが128バイトに満たない場合はタグ情報が無いことになりますので、処理は行わないこととします。
2)次に、タグ情報は、ファイルの終わり128バイトのエリアにあることがわかっているので、FileStreamのSeekメソッドで読み込み位置をセットします。
3)読み込んだ128バイトの先頭3バイトが"TAG"となっているかを確認します。
4)各データを読み込む
第3章.コーディング
上記をふまえてコーディングした例を示します。
例ではButton1をクリックしたときにOpenFileDialogを表示して、選択させたMP3のタグ情報を取得しています。
(取得した値はどこでも使っていません (;´-`))
あくまでも例ですので、実際には各個人で使いやすいようにクラスライブラリ化するなどしてみてください。
VB.NETでMP3タグ情報を読み込む
Private title As String
Private artist As String
Private album As String
Private year As String
Private comment As String
Private track As Integer
Private genre As String
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim dlgOpen As New OpenFileDialog
Dim buff(127) As Byte
If dlgOpen.ShowDialog() Then
Dim fs As New FileStream(dlgOpen.FileName, FileMode.Open, FileAccess.Read)
If fs.Length <= 128 Then
Exit Sub
End If
fs.Seek(-128, SeekOrigin.End)
For I As Integer = 0 To 127
buff(I) = fs.ReadByte()
Next
fs.Close()
If Encoding.Default.GetString(buff, 0, 3) = "TAG" Then
title = Encoding.Default.GetString(buff, 3, 30)
artist = Encoding.Default.GetString(buff, 33, 30)
album = Encoding.Default.GetString(buff, 63, 30)
year = Encoding.Default.GetString(buff, 93, 4)
comment = Encoding.Default.GetString(buff, 97, 28)
track = Convert.ToInt32(buff(126))
genre = Convert.ToInt32(buff(127))
End If
End If
End Sub