2016-05-01 20 views
3

Lyrics3v2タグタイプをMP3ファイルから削除することが可能かどうかは、TagLibSharpライブラリです。TagLibSharpを使用してMP3ファイルからLyrics3v2タグを削除することはできますか?

Thisドキュメントはブロックエントリは、単語「LYRICSBEGIN」で始まり、「LYRICS200」で終わると言っても、それはID3タグがLyrics3v2タグを存在させるために存在しなければならないと述べています。.. reffersはID3v1またはID3v2のタグ、またはそれらの任意のに、とにかく私はその部分を理解していない場合Lyrics3v2タグは、単一のタグタイプであるの一部ではないので、.butそれは、指定しませんID3v1/ID3v2タグタイプの場合、mp3ヘッダに独自のエントリがあるので... ID3v1/ID3v2 "dependancy"については何を意味するのか分かりません。

とにかくその情報が正確であると仮定すると、私は、そのタグがあまりにも削除されますLyrics3v2タグを含むmp3ファイルからはID3v1ID3v2のタグを削除するTagLibSharpを使用することができるはずですか?ただし、タグはまだ存在します。

また、TagLibSharpのクラスを公開しLyricsプロパティはLyrics3v2タグには影響しないようで、すべてこれは非常にconfussingです。

+0

この質問は再び開かれるべきで、すべての私の質問の最初のは、特定のライブラリに、ではないmp3構造自体に固有のものです第二に、私はtaglibsharpを使って実際の解決策を書いたが、私の質問がブロックされて以来、答えを共有することはできない。私は本当にソリューションを公開したいと思っています。その後、モデレータがそれをブロックできます。 – ElektroStudios

+1

質問が再度表示されない場合は、2番目の回答として、他のリンクされた質問に作業ソリューションを追加してください。私は本当にあなたの解決策を見たいと思います!ありがとう。 – PeterCo

+0

@PeterCo私はそれを公開しました:http://stackoverflow.com/questions/26671210/how-to-remove-lyrics3-v2-tag-from-id3/36974341#36974341私はあなたやあなたelse。 – ElektroStudios

答えて

2

私はtaglibsharpを使用して、このソリューションを書きました:

' ************************************************************* 
' THIS CLASS IS PARTIALLY DEFINED FOR THIS STACKOVERFLOW ANSWER 
' ************************************************************* 

Imports System.IO 
Imports System.Text 
Imports TagLib 

''' <summary> 
''' Represents the <c>Lyrics3</c> tag for a MP3 file. 
''' </summary> 
Public Class Lyrics3Tag 

    Protected ReadOnly mp3File As Mpeg.AudioFile 

    ''' <summary> 
    ''' The maximum length for the <c>Lyrics3</c> block to prevent issues like removing a false-positive block of data. 
    ''' <para></para> 
    ''' Note that this is a personal attempt to prevent catastrophes, not based on any official info. 
    ''' </summary> 
    Private ReadOnly maxLength As Integer = 512 ' bytes 

    Private Sub New() 
    End Sub 

    Public Sub New(ByVal mp3File As Mpeg.AudioFile) 
     Me.mp3File = mp3File 
    End Sub 

    ''' <summary> 
    ''' Entirely removes the <c>Lyrics3</c> tag. 
    ''' </summary> 
    <DebuggerStepThrough> 
    Public Overridable Sub Remove() 

     Dim initVector As New ByteVector(Encoding.UTF8.GetBytes("LYRICSBEGIN")) 
     Dim initOffset As Long = Me.mp3File.Find(initVector, startPosition:=0) 

     If (initOffset <> -1) Then 

      ' The Lyrics3 block can end with one of these two markups, so we need to evaluate both. 
      For Each str As String In {"LYRICS200", "LYRICSEND"} 

       Dim endVector As New ByteVector(Encoding.UTF8.GetBytes(str)) 
       Dim endOffset As Long = Me.mp3File.Find(endVector, startPosition:=initOffset) 

       If (endOffset <> -1) Then 

        Dim length As Integer = CInt(endOffset - initOffset) + (str.Length) 
        If (length < Me.maxLength) Then 
         Try 
          Me.mp3File.Seek(initOffset, SeekOrigin.Begin) 
          ' Dim raw As String = Me.mp3File.ReadBlock(length).ToString() 
          Me.mp3File.RemoveBlock(initOffset, length) 
          Exit Sub 

         Catch ex As Exception 
          Throw 

         Finally 
          Me.mp3File.Seek(0, SeekOrigin.Begin) 

         End Try 

        Else ' Length exceeds the max length. 
         ' We can handle it or continue... 
         Continue For 

        End If 

       End If 

      Next str 

     End If 

    End Sub 

End Class 

使用例:

Dim mp3File As New Taglib.Mpeg.AudioFile("filepath") 

Using lyrics As New Lyrics3Tag(mp3File) 
    lyrics.Remove() 
End Using 
関連する問題