我正在以编程方式删除/编辑.mp3音频文件的部分。一个示例场景是在3分钟(0:00-3:00)的音频文件中从1:00-2:00静音/删除音频。我们是否有任何可用于这种情况的库?
[我知道如何使用Javax Sound API(程序包:javax.sound
)为.wav音频文件实现此功能,但看来该API不支持.mp3文件
[如果我使用.wav,这就是我在技术上实现此目标的想法
AudioInputStream read()
方法将音频文件转换为原始音频数据(byte[]
)audioInputStream.getFrameLength()
和audioInputStream.getFrameRate()
API)audioInputStream.getFrameLength()
和audioInputStream.getFrameRate()
API)AudioInputStream
-AudioSystem.getAudioInputStream(ByteArrayInputStream)
参考-AudioInputStream
AudioInputStream
就.wav文件而言,我认为您处于正确的轨道。
帧到时间的转换取决于采样率。例如,44100 fps的投放时间为0.5 =帧位置22050。原始数据可能每帧包含多个字节。 16位编码当然是2个字节,立体声16位是每帧4个字节。
通常在进行处理之前,将字节数据与带符号的PCM浮点数(从-1到1)进行转换是很值得的。
要处理mp3文件,首先必须解压缩文件,进行编辑,然后再压缩回mp3。可以在以下位置的git hub上找到用于mp3编码/解码的库:AudioSystem
很大程度上取决于声音文件在压缩之前的格式。
我不知道从这些工具获取.mp3文件的PCM帧的具体细节。我记得在将数据发送到回放输出之前,必须对JORBIS中的代码进行修改以拦截数据。如果您必须经历类似的事情才能让JLayer为您工作,我不会感到惊讶。