Чтение информации о метках mp3 в vb.net - PullRequest
1 голос
/ 12 июня 2011

Я делаю проект в VB.NET 2005, в котором я должен извлечь информацию о тегах mp3-файлов.Для этой цели я использовал код на этой странице .Но проблема в том, что когда один из тегов пуст, он не возвращает никаких значений.

Например, с помощью этого я могу получить информацию об альбоме следующим образом:

    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 ]

3 голосов
/ 12 июня 2011

Тег ID3v1 хранится в последних 128 байтах файла.Первые три байта - это «TAG», указывающий, что файл хранит тег.Итак, сначала проверьте, есть ли в файле тег, а затем прочитайте их.

Я не знаю VB, но я думаю, что прежде чем читать фрейм, сначала следует:

  1. Открыть файл Dim objMP3V1 As New MP3ID3v1("file_path")
  2. Проверьте, содержит ли файл тег ID3v1, проверив, является ли флаг objMP3V1.TagExists истинным
  3. Затем прочитайте поля / кадры.

РЕДАКТИРОВАТЬ

Код в ссылке говорит:

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, то есть первое местоположение поля будет содержать нулевой символ '\0', поэтомуон вернет пустую строку "".Я бы посоветовал вам проверить это на примере музыкального файла с тегами ID3v1.(Вы даже можете создать текстовый файл в формате ID3v1 и протестировать его).

0 голосов
/ 14 июня 2011

Я использовал регулярное выражение для решения этой проблемы. Спасибо за вашу помощь ...

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, "")  

Если вы ищете более профессиональный редактор тегов Вот ссылка !

...