gpt4 book ai didi

Java/JAudiotagger : Mp3 wrong ID3 tag size

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:11:38 26 4
gpt4 key购买 nike

我正在使用 JAudiotagger 构建一个 mp3 标记应用程序图书馆。我的应用程序可以很好地读取 mp3 元数据,也可以很好地写入元数据,艺术作品除外。所以我的问题如下:

当我在 mp3 文件中添加了一些作品并保存时,文件越来越大,这是有道理的。但是当我删除一个或所有的艺术作品时,文件大小并没有变小

实际问题出在我的mp3文件的ID3v2标签上。当我删除一件艺术品时,它实际上是从标签中删除的,但标签本身的尺寸根本没有缩小。

我删除作品的方法是这样的:

    // Get the artworkList from the parentFrame.
List<Artwork> list = parentFrame.getArtworkList();

// Get the tag from the parentFrame's mp3File.
AbstractID3v2Tag tag = parentFrame.getTag();

// Get the index of the artwork the user is currently looking at (and
// wants to delete too).
int visibleArtworkIndex = parentFrame.getVisibleArtworkIndex();

// Remove it from the list.
list.remove(visibleArtworkIndex);

// Update the parentFrame's copy of the artworkList.
parentFrame.setArtworkList(list);

// Update the tag (delete its whole artwork field).
tag.deleteArtworkField();

// If the list has more artworks left, add them to the tag.
if (!list.isEmpty()) {
Iterator<Artwork> iterator = list.iterator();
while (iterator.hasNext()) {
try {
tag.addField(iterator.next());
} catch (FieldDataInvalidException e1) {
e1.printStackTrace();
}
}
}

,它实际上从列表中删除了一件艺术品,然后通过删除其所有艺术品并从更新的列表中重新复制它们来更新标签本身。

我的解决方案尝试是:

  • 从更新后的旧标签创建新标签(调用tag.deleteArtworkField()后),然后将艺术作品添加到新标签,但新标签的大小相同和旧的一样。

  • 使用 tag.adjustPadding(File fileToBeTrimmed, int sizeToStoreTagBeforeAudioInBytes, long audioStartByte) 在保存之前修剪 mp3 文件,它会调整开头的填充长度MP3 文件。
    这里的问题是我只知道错误的标签大小而不是正确的标签大小,所以我无法正确修剪 mp3,最终导致音频数据丢失。

为了更好地说明问题,我附上了一些图片:

之前的mp3文件:

before

去除一幅作品后的mp3文件。请注意,标签保持了之前的大小,尽管它的艺术作品较少:

after wrong

文件应该是怎样的:

after correct

希望大家有什么想法。提前致谢。

最佳答案

这从今天起就已修复。

默认情况下,jaudiotagger 不会在您缩小元数据时回收空间,但现在如果您设置

TagOptionSingleton.getInstance().setId3v2PaddingWillShorten(true);

在保存更改之前,它将回收不必要的填充以提供尽可能小的文件大小。

关于Java/JAudiotagger : Mp3 wrong ID3 tag size,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12841454/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com