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

标签 java amazon-web-services twilio audio-streaming audio-converter

在我的 POC 中,我正在接收来自 Twilio 的 8kHz mulaw 对话流,我想使用需要以 16KHz 和 PCM 格式获取音频的 Amazon Transcribe 对其进行转录。

我找到了 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。

最佳答案

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

要遵循的步骤:

  • 使用 base64 解码器对接收到的 Payload 进行解码。
  • 使用此有效负载缓冲区并使用 G.711 解码器(mulaw 到 pcm)进行解码
  • G.711 解码器的输出需要提供给重采样器进行上采样(8->16 KHz)

  • 最后所有的缓冲区都准备好了 PCM 16KHz。

    关于java - 将 8kHz mulaw 实时转换为 16KHz PCM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59767373/

    相关文章:

    java - 让 Applet 查看器与我的代码一起显示

    java - 在 Android 中从不同 View 调用按钮

    ios - 将代码推送到 github 时出现 Twilio 框架压缩问题

    javascript - 如何为 Twiml Nodejs 提供服务

    ios - 如何设置 twilio 通话记录?

    Java线程似乎无法正常运行

    java - 如何将值映射回枚举?

    django - ELB 的 SSL 但使用 Apache 设置

    amazon-web-services - AWS Lambda - 安装RAM磁盘

    javascript - 如何使用 Amazon Cognito 托管的 Web UI 获取用户参数