是否有Java库可以通过编程方式删除.mp3音频文件的一部分?

问题描述 投票:0回答:1

我正在以编程方式删除/编辑.mp3音频文件的部分。一个示例场景是在3分钟(0:00-3:00)的音频文件中从1:00-2:00静音/删除音频。我们是否有任何可用于这种情况的库?

[我知道如何使用Javax Sound API(程序包:javax.sound)为.wav音频文件实现此功能,但看来该API不支持.mp3文件

[如果我使用.wav,这就是我在技术上实现此目标的想法

  1. 音频由帧组成。每个帧代表一个时隙。使用AudioInputStream read()方法将音频文件转换为原始音频数据(byte[]
  2. 找到代表开始时隙的帧(使用audioInputStream.getFrameLength()audioInputStream.getFrameRate() API)
  3. 找到代表结束时隙的帧(使用audioInputStream.getFrameLength()audioInputStream.getFrameRate() API)
  4. 删除数组中开始和结束时隙之间的帧
  5. 将字节数组转换为AudioInputStream-AudioSystem.getAudioInputStream(ByteArrayInputStream)

参考-AudioInputStreamAudioInputStream

java audio mp3 wav javasound
1个回答
0
投票

就.wav文件而言,我认为您处于正确的轨道。

帧到时间的转换取决于采样率。例如,44100 fps的投放时间为0.5 =帧位置22050。原始数据可能每帧包含多个字节。 16位编码当然是2个字节,立体声16位是每帧4个字节。

通常在进行处理之前,将字节数据与带符号的PCM浮点数(从-1到1)进行转换是很值得的。

要处理mp3文件,首先必须解压缩文件,进行编辑,然后再压缩回mp3。可以在以下位置的git hub上找到用于mp3编码/解码的库:AudioSystem很大程度上取决于声音文件在压缩之前的格式。

我不知道从这些工具获取.mp3文件的PCM帧的具体细节。我记得在将数据发送到回放输出之前,必须对JORBIS中的代码进行修改以拦截数据。如果您必须经历类似的事情才能让JLayer为您工作,我不会感到惊讶。

© www.soinside.com 2019 - 2024. All rights reserved.