Как преобразовать сигнал ADPCM G.726 в сигнал PCM? - PullRequest
3 голосов
/ 24 марта 2010

Я обычно обращаюсь к встроенным аудио библиотекам SoX или Window для этого материала, но похоже, что ни у одного из них нет кодеков G.726.

Так что у меня есть последовательность байтов, которые, как я знаю, закодированы как G.726, хотя скорость передачи битов и мю-закон или А-закон в настоящее время неизвестны (эксперимент определит эти параметры), и мне нужно декодировать их в обычный сигнал PCM.

Я загрузил эталонную реализацию из Рекомендации МСЭ-Т (Рекомендация МСЭ-Т G.191), но я немного запутался в том, как использовать функцию G726_decode.Согласно документации inp_buf и out_buf должны иметь одинаковую длину smpno, и оба буфера являются 16-битными буферами.Мне кажется, что шаг пропущен;в противном случае сжатие не выполняется с помощью G.726.Согласно странице Википедии на G.726 размер выборки зависит от битрейта (от 2 до 5 бит).Должен ли я сам выполнять декомпрессию в образцы?Поэтому, если я предполагаю максимальное сжатие (2-битные выборки), то каждый байт будет производить 4 выборки.

Пример:

char b = /* read the code from input */
short inp[4], output[4];
inp[0] = b & 0x0003;
inp[1] = b & 0x000C >> 2;
inp[2] = (b & 0x0030) >> 4;
inp[3] = (b & 0x00C0) >> 6;
G726_state state;
memset(&state, 0, sizeof(G726_state));
G726_decode(inp, output, 4, "u", 2, 1, &state);
/* ouput now contains 4 PCM samples */

Или я что-то упустил полностью?

1 Ответ

5 голосов
/ 24 марта 2010

Похоже, что ffmpeg на самом деле не может этого сделать, так как я думал, что наверняка сможет ... однако, пока я гуглял, я нашел эту запись в списке рассылки ffmpeg , котораяпредлагает решение.

По сути, есть отдельная программа под названием g72x ++ , которая, кажется, способна декодировать аудио в необработанный PCM.

...