저는 아래의 간단한 Groovy 스크립트를 작성하여 JAudioTagger 라이브러리를 사용하여 mp3 파일의 ID3v1 및 ID3v2 태그 필드 네 개 값을 설정했습니다. 스크립트는 변경 사항을 성공적으로 작성하지만 일부 파일의 처음 5 ~ 10 초도 삭제하고 다른 파일은 영향을받지 않습니다. 큰 문제는 아니지만 간단한 수정을 아는 사람이라면 고맙겠습니다. 모든 파일은 동일한 소스에서 제공되며 모두 v1 및 v2 태그를 가지고 있습니다. 소스 파일에서 명백한 차이점을 찾을 수 없습니다. 대신 JAudioTagger 처음 몇 초 삭제하기
mp3File.save()
의
import org.jaudiotagger.*
java.util.logging.Logger.getLogger("org.jaudiotagger").setLevel(java.util.logging.Level.OFF)
Integer trackNum = 0
Integer totalFiles = 0
Integer invalidFiles = 0
validMP3File = true
def dir = new File(/D:\Users\Jeremy\Music\Speech Radio\Unlistened\Z Temp Files to MP3 Tagged/)
dir.eachFile({curFile ->
totalFiles ++
try {
mp3File = org.jaudiotagger.audio.AudioFileIO.read(curFile)
} catch (org.jaudiotagger.audio.exceptions.CannotReadException e) {
validMP3File = false
invalidFiles ++
}
// Get the file name excluding the extension
baseFilename = org.jaudiotagger.audio.AudioFile.getBaseFilename(curFile)
// Check that it is an MP3 file
if (validMP3File) {
if (mp3File.getAudioHeader().getEncodingType() != 'mp3') {
validMP3File = false
invalidFiles ++
}
}
if (validMP3File) {
trackNum ++
if (mp3File.hasID3v1Tag()) {
curTagv1 = mp3File.getID3v1Tag()
} else {
curTagv1 = new org.jaudiotagger.tag.id3.ID3v1Tag()
}
if (mp3File.hasID3v2Tag()) {
curTagv2 = mp3File.getID3v2TagAsv24()
} else {
curTagv2 = new org.jaudiotagger.tag.id3.ID3v23Tag()
}
curTagv1.setField(org.jaudiotagger.tag.FieldKey.TITLE, baseFilename)
curTagv2.setField(org.jaudiotagger.tag.FieldKey.TITLE, baseFilename)
curTagv1.setField(org.jaudiotagger.tag.FieldKey.ARTIST, "BBC Radio")
curTagv2.setField(org.jaudiotagger.tag.FieldKey.ARTIST, "BBC Radio")
curTagv1.setField(org.jaudiotagger.tag.FieldKey.ALBUM, "BBC Radio - 20130205")
curTagv2.setField(org.jaudiotagger.tag.FieldKey.ALBUM, "BBC Radio - 20130205")
curTagv1.setField(org.jaudiotagger.tag.FieldKey.TRACK, trackNum.toString())
curTagv2.setField(org.jaudiotagger.tag.FieldKey.TRACK, trackNum.toString())
mp3File.setID3v1Tag(curTagv1)
mp3File.setID3v2Tag(curTagv2)
mp3File.save()
}
})
println """$trackNum tracks created from $totalFiles files with $invalidFiles invalid files"""
나는 이미 시도했지만 그 결과는 완전히 동일합니다. AudioFileIO 클래스의 write 메소드를 처음 시도했지만, 전혀 작동하지 않을 수 있었고, 널 포인터 에러 IIRC가 계속 발생했습니다. 나는 그 순간에 내 전화를 사용하고있어서 정확하게 확인할 수 없다. –