Конвертировать 8 кГц мулав в 16 кГц PCM в режиме реального времени - PullRequest
3 голосов
/ 16 января 2020

В моем PO C я получаю потоковую передачу разговора от Twilio в 8kHz mulaw, и я хочу транскрибировать его с помощью Amazon Transcribe, который должен получить звук в 16KHz и PCM.

Я нашел здесь как преобразовать файл, но не удалось сделать это в потоковом режиме ... Код для файла:

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) но я должен преобразовать его в 16 кГц, PCM.

1 Ответ

2 голосов
/ 16 января 2020

Вам нужен декодер G.711 и аудио ресемплер.

Шаги, которые необходимо выполнить:

  1. использовать декодер base64 для декодирования полученной полезной нагрузки.

  2. использовать этот буфер полезной нагрузки и декодировать с использованием декодера G.711 (от мула до pcm)

  3. выходной сигнал декодера G.711 необходимо передать ресэмплер для повышения дискретизации (8-> 16 кГц)

Наконец все буферы готовы в PCM 16 кГц.

...