有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java实时将8kHz mulaw转换为16KHz PCM

在我的POC中,我接收到Twilio在8kHz mulaw中传输的对话,我想使用Amazon transcribe进行转录,需要获得16KHz和PCM的音频

我找到了here如何转换文件,但在流媒体中无法转换。。。文件的代码为:

File sourceFile = new File("<Source_Path>.wav");
File targetFile = new File("<Destination_Path>.wav");
AudioInputStream sourceAudioInputStream = AudioSystem.getAudioInputStream(sourceFile);

AudioInputStream targetAudioInputStream=AudioSystem.getAudioInputStream(AudioFormat.Encoding.PCM_SIGNED, sourceAudioInputStream);
System.out.println("Sample Rate1 "+targetAudioInputStream.getFormat().getFrameRate());
AudioFormat targetFormat = new AudioFormat(new AudioFormat.Encoding("PCM_SIGNED"), 16000, 16, 1, 2, 8000, false);

AudioInputStream targetAudioInputStream1 = AudioSystem.getAudioInputStream(targetFormat, targetAudioInputStream);
System.out.println("Sample Rate "+targetAudioInputStream1.getFormat().getFrameRate());

try {
    AudioSystem.write(targetAudioInputStream1, AudioFileFormat.Type.WAVE, targetFile);
} catch (IOException e) {
    e.printStackTrace();
}

实际上,Twilio在Base64中给了我一个播放负载(8KHz,mulaw),但我必须将其转换为16KHz,PCM


共 (1) 个答案

  1. # 1 楼答案

    你需要一个G.711解码器和音频重采样器

    应遵循的步骤:

    1. 使用base64解码器对接收到的有效负载进行解码

    2. 使用此有效负载缓冲区,并使用G.711解码器(mulaw到pcm)进行解码。

    3. G.711解码器的输出需要提供给重采样器进行上采样(8->;16 KHz)

    最后,所有的缓冲器在PCM 16KHz中准备就绪