2013-02-05 4 views
0

저는 아래의 간단한 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""" 

답변

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 분 트랙)를 보여줍니다 : 나는 새로운 MP3 파일 편집기를 찾을 수 있어야한다 것처럼

trackLength:06:52 

것 같습니다!

0

당신이 시도 할 수 :

mp3File.commit() 
이 도움이 될 것입니다 경우

아니 생각,하지만 문서화 된 방법이 될 것 같습니다?

+0

나는 이미 시도했지만 그 결과는 완전히 동일합니다. AudioFileIO 클래스의 write 메소드를 처음 시도했지만, 전혀 작동하지 않을 수 있었고, 널 포인터 에러 IIRC가 계속 발생했습니다. 나는 그 순간에 내 전화를 사용하고있어서 정확하게 확인할 수 없다. –

관련 문제