JAudiotaggerライブラリを使用して mp3 タグ付けアプリケーションを構築しています。私のアプリケーションは mp3 メタデータを正常に読み取り、アートワークを除いてメタデータも正常に書き込むことができます。だから私の問題は次のとおりです:
mp3 ファイルにいくつかのアートワークを追加して保存すると、ファイルが大きくなります。これは理にかなっています。しかし、アートワークを 1 つまたはすべて削除しても、ファイル サイズは小さくなりません。
実際の問題は、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()
)、アートワークを新しいタグに追加しますが、新しいタグは古いタグと同じサイズでした。を使用して保存する直前に mp3 ファイルをトリミングするに
tag.adjustPadding(File fileToBeTrimmed, int sizeToStoreTagBeforeAudioInBytes, long audioStartByte)
は、MP3 ファイルの先頭のパディングの長さを調整します。
ここでの問題は、正しいタグ サイズではなく間違ったタグ サイズしか知らないため、mp3 を正しくトリミングできず、オーディオ データが失われてしまうことです。
問題をよりよく説明するために、いくつかの画像を含めました。
前の mp3 ファイル:
アートワークを 1 つ削除した後の mp3 ファイル。アートワークが少ないにもかかわらず、タグが以前のサイズを維持していることに注意してください。
そして、ファイルがどうあるべきか:
誰にでもアイデアがあることを願っています。前もって感謝します。