2013-02-05 51 views
0

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

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""" 

回答

1

我还在调查,看起来JAudioTagger没有问题。在设置标签之前,我使用Total Recorder将下载质量从128kbps,44,100Hz降至56kbps,22,050Hz。这将文件大小减少到不到一半,并且语音无线电的质量很好。

如果我在原始文件上运行脚本,则不会删除任何音轨。删除音轨的第一部分仅在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 

不是为那些没有被共有录像机处理的文件执行此检查。

标题读出操作的日志也显示(对于一个27分钟轨道):

trackLength:06:52 

看起来好像我必须找到一个新的MP3文件编辑器!

0

而不是

mp3File.save() 

可以尝试:

mp3File.commit() 

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

+0

我已经尝试过,但结果完全一样。我首先尝试了AudioFileIO类的写入方法,但是我根本无法完成这个工作,它一直给出一个空指针错误IIRC。此刻我正在打电话,所以我无法确切地检查。 –