Как конвертировать Linear16 PCM wav в G711 8-битный 8-килограммовый MULAW wav с тем же качеством, что и g711.org? - PullRequest
0 голосов
/ 04 января 2019

Я использую NAudio, чтобы попытаться преобразовать wav-файлы Linear16 PCM, которые поступают из стороннего API-интерфейса Text-to-Speech API, в 8-битную 8-килограммовую MULAW G711, которая будет работать в качестве приглашения телефонии. Использование методов, описанных в документации авторов библиотеки и некоторых публикаций о переполнении стека, и, в частности, следуя предложению выполнить двухэтапное преобразование.

dynamic foo = JsonConvert.DeserializeObject<dynamic>(result);

byte[] decoded = Convert.FromBase64String(foo.audioContent.ToString());

WaveFormat newFormat = new WaveFormat(8000, 16, 1);
WaveFormat mulaw = WaveFormat.CreateMuLawFormat(8000, 1);

using (MemoryStream mem = new MemoryStream(decoded))
using (WaveFileReader reader = new WaveFileReader(mem))
using (var conversionStream = new WaveFormatConversionStream(newFormat, reader))
using (var convStream2 = new WaveFormatConversionStream(mulaw, conversionStream))
{
     WaveFileWriter.CreateWaveFile("voiceprompt_downsample_8bit-8khz.wav", convStream2);
     File.WriteAllBytes("voiceprompt_raw.wav", decoded);
}

К сожалению, результирующее качество звука преобразованного файла довольно сильно ухудшилось (чего и следовало ожидать). Однако, если я возьму тот же исходный файл, который запускаю с помощью кода выше, и отправлю его в конвертер по адресу g711.org и выберу «BroadWorks Classic (8Khz, Mono, u-law)» результирующий звук звучит намного лучше (особенно обратите внимание, что в некоторых наших подсказках он не обрезает / не сжимает буквы S в таких словах, как «доступ» и «пароль»).

Я подтвердил, что оба аудиофайла (тот, который я конвертирую с помощью NAudio, и тот, который я сгенерировал с помощью g711.org), воспроизводятся в соответствии с запросами нашей системы телефонии.

Хотите знать, есть ли у кого-нибудь опыт работы с NAudio какие-либо предложения о том, что я могу сделать по-другому в NAudio, чтобы получить выходное качество преобразованного файла, совпадающее с тем, что я получаю с сайта g711.org?

1 Ответ

0 голосов
/ 07 января 2019

Сам разобрался, проблема в том, что мне нужно было использовать один из других вариантов для повторной выборки звука, а не просто использование WaveFormatConversionStream. После повторной выборки с MediaFoundationResampler качество звука значительно улучшилось по сравнению с тем, что я получал с ACM через WaveFormatConversionStream.

Этот документ помог мне прийти к осознанию ...

...