确定 mp3 文件中的 header 的 Java 代码

标签 java mp3

我一直在编写一个程序,可以确定有关 mp3 文件的所有数据。 根据此网页 (http://www.multiweb.cz/twoinches/mp3inside.htm) 上的信息,我的程序将整个 mp3 文件读入一个字节数组,然后在开头检查标签 v2,在结尾处检查标签 v1文件的结尾。

我的问题是您可以从标题中获取的数据。 据我所知,我需要搜索 1111_1111 的字节,下一个是 111x_xxxx。这个标准有很多匹配项不是 header ,只是随机巧合,所以我制作了一个 MP3Header 类,它具有上述网页上提到的所有字段(ID、层、比特率等)并被覆盖如果 ID、层和频率匹配,则 equals 方法返回 true(我使用我找到的第一个 header 作为基础,并将它之后的每个其他 header 与那个 header 进行比较)。

此方法似乎非常适用于 CBR mp3 文件,但是一些 VBR 文件让我很难过。我发现的第一个 header 不正确,从那时起,整个比较就搞砸了(我没有检查比特率是否相等,所以这不是原因)。我能想到的唯一有效解释是,开头的 Tag 可能包含扩展 ASCII 表中的字符,并且由于 Java 没有 unsigned int,转换时 1111_1111 (255) 字节可能被解释为 -1诠释。 我的问题是,如何确保找到的字节确实是正确的 header ?或者我应该存储符合条件的所有内容,并检查哪一个是最常见的,然后使用它?

谢谢, 伊斯特万

P.S:我知道如果我使用 JMF,这可能只需要几行代码就可以解决,但是我很享受这样编写它的挑战。

最佳答案

我知道已经有库可以执行此任务(请参阅 https://id3.org/Implementations)。或许您可以下载源代码,看看他们是如何做到的?

关于确定 mp3 文件中的 header 的 Java 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6566018/

相关文章:

java - Resteasy 3.09 CorsFilter 问题

java - 为什么Eclipse内存分析器不显示InetSocketAddress字符串值?

Java 获取默认的 UI 颜色

python - 如何将 mp3 转换为 ogg python

python - 上传后自动将 WAV 音频文件转换为服务器上的 MP3?

php - 如何在php中将所有音频格式转换为mp3?

java - Android Studio ListView 自定义

ubuntu - 如何以编程方式从 MP3 中删除静音?

audio - 浏览器中的 MP3 音频支持

java - LDAP - Spring Boot |获取 javax.naming.CommunicationException |连接被拒绝