在vb.net中读取mp3标签信息

时间:2011-06-12 06:26:02

标签: vb.net tags mp3 id3-tag

我正在VB.NET 2005中做一个项目,我必须提取mp3文件的标签信息。为此,我使用了page中的代码。但问题是当其中一个标记为空时,它没有返回任何值。

例如,使用此功能,我可以检索此类相册信息,

    Dim album As String = ""
    album = objMP3V1.Frame(MP3ID3v1.FrameTypes.Album)

但是我不知道怎么检查相册变量是否为空,我检查了专辑变量

    If (album = "") Then
        MsgBox("true")
    ElseIf (album Is Nothing) Then
        MsgBox("true")
    ElseIf (album Is DBNull.Value) Then
        MsgBox("true")
    End If

但没有成功,有人可以帮助我。

2 个答案:

答案 0 :(得分:3)

ID3v1标记存储在文件的最后128个字节中。前三个字节是“TAG”,告诉该文件存储标签。因此,首先检查文件是否有标签,然后阅读它们。

我不知道VB,但我想在阅读框架之前,你应该首先:

  1. 打开文件Dim objMP3V1 As New MP3ID3v1("file_path")
  2. 测试,如果文件中有一个ID3v1标签,则测试objMP3V1.TagExists标志是否为真
  3. 然后阅读字段/框架。
  4. 修改

    链接中的代码

    FileGet(intFile, strTag, lngLOF - 127, True)
            If (strTag.ToUpper <> "TAG") Then
    
                ' No ID3v1 tag found
    
                mblnTagExists = False
                mobjFrame(0) = ""
                mobjFrame(1) = ""
                mobjFrame(2) = ""
                mobjFrame(3) = ""
                mobjFrame(4) = ""
                mobjFrame(5) = ""
                mobjFrame(6) = ""
    
            Else
    
                ' ID3v1 tag found
    
                mblnTagExists = True
    
                ' Read all frames from the file
    
                FileGet(intFile, strTitle)
                FileGet(intFile, strArtist)
                FileGet(intFile, strAlbum)
                FileGet(intFile, strYear)
                FileGet(intFile, strComment)
                FileGet(intFile, bytDummy)
                FileGet(intFile, bytTrack)
                FileGet(intFile, bytGenre)
    
                ' Assign the frame content to the properties
    
                mobjFrame(0) = strTitle
                mobjFrame(1) = strArtist
                mobjFrame(2) = strAlbum
                mobjFrame(3) = strYear
                mobjFrame(4) = bytTrack
                mobjFrame(5) = strComment
                mobjFrame(6) = bytGenre
    
            End If
        End If
    

    因此,如果标签不存在,则应将""指定为字符串。

    ID3v1字段具有固定长度,因此如果album字段中没有字符串,则它应包含num字符串,即字段的第一个位置将包含空字符{{1}因此,它将返回一个空字符串'\0'。 我会告诉你在带有ID3v1标签的样本音乐文件上查看这个。 (您甚至可以创建使用ID3v1格式化的文本文件并对其进行测试。)

答案 1 :(得分:0)

我使用正则表达式来解决这个问题。谢谢你的帮助......

Imports System.Text.RegularExpressions
dim RegEx As New RegularExpressions.Regex("^[a-zA-Z0-9]+$")
dim Match As Match
dim film as string
film = song.Frame(MP3ID3v1.FrameTypes.Album)
Match = RegEx.Match(film)
film1 = IIf((Match.Success), film.ToString, "")  

如果您正在寻找更专业的标签editior,请a link