2013-02-05 157 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。此刻我正在打電話,所以我無法確切地檢查。 –