使用Java将音频从44.1kHz下采样到16kHz

我有一个应用程序,它记录来自用户麦克风的语音样本,并将其上传到服务器,然后服务器用它做一些事情。 看来我必须使用以下参数进行记录以避免IllegalArgumentException

 Encoding encoding = AudioFormat.Encoding.PCM_SIGNED; float sampleRate = 44100.0F; int sampleSizeInBits = 16; int channels = 2; int frameSize = 4; float frameRate = 44100.0F; boolean bigEndian = false; 

但是我需要将它记录在16khz,而不是44.1,(sampleRate和framerate都是,我假设)并且它必须是单声道(1声道)。 PCM签名也是强制性的,所以这很好。 (服务器非常挑剔,我无法对其进行任何更改。)如何使用Java进行转换?

我通过HttpClient将音频文件作为Filebody提交给servlet,将其保存在服务器上,然后进行处理。

以下是一些自行开始的好链接:

  • 使用文件和格式转换器
  • Java声音教程

或者(为了快速使用)这个免费的库在这里是你想要的:

  • SampleRateConverter.java