Я обычно обращаюсь к встроенным аудио библиотекам 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 */
Или я что-то упустил полностью?