Преобразование Mulaw 8 кГц в PCM 16 кГц

Я пытаюсь получить поток разговора из Twilio в Mulaw 8 кГц, и я хочу преобразовать его в PCM 16 кГц для некоторой обработки (который не поддерживает формат Mulaw 8 кГц), я попробовал этот метод, но безуспешно:
- преобразовать полезную нагрузку строки в base64 buffer.
- преобразуйте буфер в Uint8Array с помощью этого пакета: buffer-to-uint8array.
- преобразовать Uint8Array в Int16Array с помощью этого пакета: alawmulaw.
- затем используйте библиотеку wav для записи результатов.
Я все еще не могу получить действительный аудиофайл после этого процесса. Может ли кто-нибудь сказать мне, что я делаю не так? или помочь мне добиться этого?


person Salah Eddine Bachir Cherif    schedule 20.04.2020    source источник
comment
Я бы сначала заставил это работать из командной строки, а затем реализовать в вашем коде ... либо использовать ffmpeg или sox, либо звуковую рабочую станцию ​​под названием Audacity ... использовать один из этих инструментов для прямого преобразования файла с 8 кГц mulaw в ваш PCM 16 кГц. .. это подтвердит, что ваш входной файл в порядке, и предоставит вам действительный выходной файл, чтобы впоследствии отразить выходной файл вашего кода против   -  person Scott Stensland    schedule 21.04.2020
comment
Я не могу использовать Audacity или ffmpeg, потому что мне это нужно в реальном времени, я мог бы преобразовать файл с помощью ffmpeg, но это не соответствует моим потребностям, поэтому я ищу способ сделать это в реальном времени (при получении данных)   -  person Salah Eddine Bachir Cherif    schedule 21.04.2020
comment
Мое предложение, приведенное выше, не для решения вашей проблемы, чтобы облегчить   -  person Scott Stensland    schedule 21.04.2020
comment
Здравствуйте, я уже пробовал это решение, спасибо!   -  person Salah Eddine Bachir Cherif    schedule 21.04.2020


Ответы (1)


Мне повезло с использованием библиотеки WaveFile (https://www.npmjs.com/package/wavefile)

const wav = new WaveFile();
wav.fromScratch(1, 8000, '8m', Buffer.from(payload, "base64"));
wav.fromMuLaw();
// You can resample.
wav.toSampleRate(16000);
// You can write this straight to a file (will have the headers)
const results = wav.toBuffer();
// Or you can access the samples without the WAV header
const samples = wav.data.samples;

Надеюсь, это поможет!

person Craig Dennis    schedule 23.04.2020
comment
Спасибо!! Я попробую - person Salah Eddine Bachir Cherif; 23.04.2020
comment
@SalahEddineBachirCherif это решение сработало для вас ?, даже я также хочу преобразовать формат ULAW в WAV - person u_pendra; 08.06.2021