首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JAudioTagger删除曲目的前几秒

JAudioTagger删除曲目的前几秒
EN

Stack Overflow用户
提问于 2013-02-05 19:38:21
回答 2查看 769关注 0票数 0

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

代码语言:javascript
复制
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"""
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-06 11:15:49

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

如果我在原始文件上运行我的脚本,则不会删除任何音轨。删除音轨的第一部分仅发生在已由Total Recorder处理的文件中。

查看这些文件的JAudioTagger日志记录,似乎确实存在标题问题:

代码语言:javascript
复制
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分钟的磁道):

代码语言:javascript
复制
trackLength:06:52

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

票数 1
EN

Stack Overflow用户

发布于 2013-02-05 21:07:43

而不是

代码语言:javascript
复制
    mp3File.save()

你能不能试试:

代码语言:javascript
复制
    mp3File.commit()

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14706654

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档