0

JAudioTaggerライブラリを使用してmp3ファイルのID3v1およびID3v2タグフィールドの4つの値を設定する簡単なGroovyスクリプト(以下)を作成しました。スクリプトは変更を正常に行いますが、一部のファイルの最初の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"""
4

2 に答える 2

1

まだ調査中ですが、JAudioTaggerに問題はないようです。タグを設定する前に、Total Recorderを使用して、ダウンロードの品質を128kbps、44,100Hzから56kbps、22,050Hzに下げます。これにより、ファイルサイズが半分未満になり、音声ラジオの品質は良好になります。

元のファイルでスクリプトを実行すると、オーディオトラックは削除されません。オーディオトラックの最初の部分の削除は、TotalRecorderによって処理されたファイルでのみ発生します。

これらのファイルの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

このチェックは、TotalRecorderによって処理されていないファイルに対しては実行されません。

ヘッダー読み取り操作のログには、次の情報も表示されます(27分のトラックの場合)。

trackLength:06:52

新しいMP3ファイルエディタを探す必要があるようです。

于 2013-02-06T03:15:49.350 に答える
0

それ以外の

    mp3File.save()

試していただけますか:

    mp3File.commit()

それが役立つかどうかはわかりませんが、それは文書化された方法のようですか?

于 2013-02-05T13:07:43.150 に答える