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

标签 java audio mp3 wav javasound

我正在以编程方式删除/编辑.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
    AudioSystem

    最佳答案

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

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

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

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

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

    关于java - 是否有Java库可以通过编程方式删除.mp3音频文件的一部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58943416/

    相关文章:

    iphone - iOS:允许用户选择音频是否在后台播放

    Swift 如何在 macOS 中编辑 .mp3 文件的元数据 (ID3)

    java - 在 Android 中访问基于 Soap 的 Web 服务

    java - 查找数组中相同的元素并防止重复计数

    android - 无法在NDK oboe LiveEffect示例代码中更改音频源

    c# - 如何在C#中从存储流中播放MP3?

    c++ - C\C++开源PCM到Mp3转换器?

    java - 带参数的 HttpURLConnection

    Java:strings.xml 中的换行符不起作用

    javascript - 提示用户声音权限