Jaudiotager正在删除曲目的前几秒

Jaudiotager正在删除曲目的前几秒,audio,groovy,id3,Audio,Groovy,Id3,我编写了一个简单的Groovy脚本(如下),使用JAudioTagger库设置mp3文件中ID3v1和ID3v2标记字段的四个值。脚本成功地进行了更改,但也删除了某些文件的前5到10秒,其他文件不受影响。这不是什么大问题,但如果有人知道一个简单的解决方法,我将不胜感激。所有的文件都来自同一个源,都有v1和v2标签,我可以在源文件中找到没有明显区别的解释 import org.jaudiotagger.* java.util.logging.Logger.getLogger("org.jaudi

我编写了一个简单的Groovy脚本(如下),使用JAudioTagger库设置mp3文件中ID3v1和ID3v2标记字段的四个值。脚本成功地进行了更改,但也删除了某些文件的前5到10秒,其他文件不受影响。这不是什么大问题,但如果有人知道一个简单的解决方法,我将不胜感激。所有的文件都来自同一个源,都有v1和v2标签,我可以在源文件中找到没有明显区别的解释

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"""
而不是

    mp3File.save()
你能试试吗

    mp3File.commit()

不知道这是否会有帮助,但这似乎是记录在案的方法?

我仍在调查中,Jaudiotager似乎没有问题。在设置标签之前,我使用Total Recorder将下载质量从128kbps、44100Hz降低到56kbps、22050Hz。这将文件大小减少到一半以下,语音广播的质量也很好

如果在原始文件上运行脚本,则不会删除任何音频曲目。只有Total Recorder处理过的文件才会删除音频曲目的第一部分

查看这些文件的JAudioTagger日志,标题似乎有问题:

Checking further because the ID3 Tag ends at 0x23f9 but the mp3 audio doesnt start until 0x7a77
Confirmed audio starts at 0x7a77 whether searching from start or from end of ID3 tag
对于尚未由Total Recorder处理的文件,不执行此检查

标题读取操作的日志还显示(27分钟的曲目):


看来我得找一个新的MP3文件编辑器了

我已经试过了,但结果完全一样。我第一次尝试AudioFileIO类的write方法,但我根本无法让它工作,它一直给出一个空指针错误IIRC。我现在正在打电话,所以我无法准确检查。
trackLength:06:52