gpt4 book ai didi

java - 在 Java 中连接 mp3 文件

转载 作者:行者123 更新时间:2023-12-02 06:16:41 24 4
gpt4 key购买 nike

我在连接 mp3 文件时遇到一些问题。例如,我有 5 个 mp3 文件。我想将它们连接到一个文件。

我试试这个:

try {
InputStream in = new FileInputStream("C:/a.mp3");
byte[] buffer = new byte[1024];
OutputStream os = new FileOutputStream(new File("C:/output.mp3",
true));
int count;
while ((count = in.read(buffer)) != -1) {
os.write(buffer, 0, count);
os.flush();
}
in.close();
in = new FileInputStream("C:/b.mp3");// second mp3
while ((count = in.read(buffer)) != -1) {
os.write(buffer, 0, count);
os.flush();
}
in.close();
os.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}

但这不起作用。在此过程结束时,我得到一个 mp3 文件,它包含源 mp3 文件中的所有音乐数据,但在选项中,我仅从第一个源 mp3 文件中看到 fihish mp3 的时间。而且,当我尝试使用这个最终的 mp3 文件时,当我使用 Xuggle 库将此 mp3 音频添加到 mp4 视频时,我收到错误。

我确信,每个 mp3 源文件中记录元信息的字节数都有问题。也许存在一些用于正确连接 mp3 的库?

最佳答案

您的方法存在多个问题。

a.) 如果源文件中有任何元数据,则复制元数据。在串联文件中,这些元数据(Id3v1 和 Id3v2)将出现多次,甚至更糟,出现在不应该出现的位置(Id3v1必须位于文件末尾,Id3v2在开始IIRC)。这可能会使解码器感到困惑,将文件识别为损坏的文件(它可能会播放第一部分,然后在第二部分的意外元数据上打嗝)。

b.) 计算 MP3 的长度并不是那么简单,需要计算文件中 MP3 帧的数量。由于没有 header 告诉帧数,因此唯一安全的方法是按顺序扫描文件(如解码)。在引入 MP3 时,这曾经是一项成本高昂的操作,因此引入了多种方法来解决此问题(VBR header block 和 Id3 元标记)。如果您的播放器依赖这些,它总是会将长度检测为仅第一部分。

c.) 即使您正确地去除元数据,您也只能使用相同的参数(采样率)连接 MP3 流,某些解码器甚至可能对比特率和类型(单声道/MS/Istereo 等)有额外的限制。 )。

你看,这是可以做到的,但它并非微不足道。

关于java - 在 Java 中连接 mp3 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21381585/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com