Nano Hash - криптовалюты, майнинг, программирование

Можно ли с помощью TagLibSharp удалить тег Lyrics3v2 из файла MP3?

Интересно, можно ли удалить тип тега Lyrics3v2 из файла MP3, используя TagLibSharp.

В этой документации указано, что запись блока начинается со слова "LYRICSBEGIN" и заканчивается на "LYRICS200", а также говорит, что должен присутствовать тег ID3, чтобы существовал тег Lyrics3v2... но не указано, ссылается ли к тегу ID3v1 или ID3v2 или к любому из них, в любом случае, я не понимаю эту часть, потому что тег Lyrics3v2 является тегом одного типа, не является частью типа тега ID3v1/ID3v2, у него есть собственная запись в заголовке mp3, так что... я не понимаю, что это значит для тега ID3v1/ID3v2. > "зависимость".

В любом случае, предполагая, что информация верна, я смогу использовать TagLibSharp для удаления тегов ID3v1 и ID3v2 из mp3-файла, содержащего < strong>Lyrics3v2, то этот тег тоже будет удален? Однако тег все еще существует.

Кроме того, свойство Lyrics, раскрывающее классы TagLibSharp, похоже, не влияет на тег Lyrics3v2, все это очень запутывает.


  • Этот вопрос следует открыть повторно, во-первых, мой вопрос относится к конкретной библиотеке, а не к самой структуре mp3, а во-вторых, я написал рабочее решение с использованием taglibsharp, но не могу поделиться ответом, так как мой вопрос заблокирован. Я просто очень хочу опубликовать решение, после этого модератор может его заблокировать. 01.05.2016
  • Если они не откроют ваш вопрос повторно, добавьте свое рабочее решение к другому связанному вопросу в качестве второго ответа. Очень хотелось бы увидеть ваше решение! Спасибо. 01.05.2016
  • @PeterCo Я опубликовал его: stackoverflow.com/questions/26671210/ Надеюсь, он может быть полезен для вас или для кого-то еще. 02.05.2016
  • @ElektroStudios: я снова открыл вопрос. Теперь вы можете удалить свой ответ из stackoverflow.com/q/26671210/444991 и опубликовать его здесь. 05.05.2016

Ответы:


1

Согласно Как удалить тег Lyrics3 v2 из id3? ответ "Нет". Вы найдете обходной путь в связанном ответе ниже.

01.05.2016

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
06.05.2016
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..