Java 合并MP3文件的问题

Java 合并MP3文件的问题,java,merge,mp3,duration,Java,Merge,Mp3,Duration,我有一个Java应用程序,它允许用户上传一个用户录制的MP3文件,然后将版权声明合并到文件的开头。没有对文件进行编码和解码,这有点麻烦(我避免了解码/编码,因为:1.我真的想避免处理开销2.不太喜欢在不同平台上运行时使用dll/共享库的复杂性,即LAME) 我的解决方案是读取采样频率,上传文件的比特率和单声道/立体声特征,并选择与这些特征相匹配的相应版权简介,然后通过读取简介和用户录制为FileInputStream并将简介和用户文件写入FileOutputStream,将其附加到文件前面 回放

我有一个Java应用程序,它允许用户上传一个用户录制的MP3文件,然后将版权声明合并到文件的开头。没有对文件进行编码和解码,这有点麻烦(我避免了解码/编码,因为:1.我真的想避免处理开销2.不太喜欢在不同平台上运行时使用dll/共享库的复杂性,即LAME)

我的解决方案是读取采样频率,上传文件的比特率和单声道/立体声特征,并选择与这些特征相匹配的相应版权简介,然后通过读取简介和用户录制为FileInputStream并将简介和用户文件写入FileOutputStream,将其附加到文件前面

回放是事情变得有趣的地方。根据操作系统/浏览器和已安装的播放机的不同,网页中会显示文件的长度为35秒(介绍长度),或者会随着文件下载到播放机而逐渐增加播放时间(大约45分钟)。我假设文件的持续时间由不同的播放器和浏览器处理。Win7上的Safari和Firefox似乎采取了“渐进式”的方式,Win7上的Chrome和IE9只显示35秒的介绍长度,尽管整个45分钟的合并录音都会播放

最后,在iOS上,Safari仅在持续时间内显示NaN/NaN,并且无论合并录制的总长度如何,仅播放15分钟

因此,我得出的结论是,“合并”仍然是问题的根源。问题是:我能在不采取更复杂的解码/编码路线的情况下解决这个问题吗?我删除了两个文件的ID3标记,然后使用mp3agic中的jar将标记添加回合并文件。我所能想到的是,一些播放器只阅读介绍的框架,然后在遇到录制的用户部分时出于某种原因停止播放。我不知道为什么会发生这种情况,除非我丢失的MP3帧一定有某种特征,导致播放器认为它已经到达文件的结尾(即使它在前35秒后继续播放)。据我所知,MP3的整个持续时间都没有存储的地方。由播放器计算文件的播放时间


我应该找什么?我保留了合并前和合并后的文件,当我比较比特率、采样频率和单声道/立体声特性时,它们是相同的。合并假定相同的文件应该可以工作。但是,在某些操作系统/浏览器/播放器组合上,框架(我假设)中有一些不同的东西干扰了播放器的持续时间计算。我遗漏了什么?

不太了解这个领域,但这是一个有趣的问题-各种浏览器/操作系统组合对原始文件有什么作用?i、 e.如果您删除附加代码并保持MP3原样?也许这些限制仍然存在?我不太了解这个领域,但这是一个有趣的问题-各种浏览器/操作系统组合对原始文件有什么作用?i、 e.如果您删除附加代码并保持MP3原样?也许这些限制还会存在?