Я погуглил эту проблему за последние 2 недели и не смог найти алгоритм или решение. У меня есть какой-то короткий WAV-файл, но он имеет MULAW-сжатие, и Python, похоже, не имеет функции внутри wave.py
, которая может успешно распаковать его. Поэтому я взял на себя обязательство построить декодер на python.
Я нашел некоторую информацию о MULAW в основных элементах:
- Википедия
- Сравнение по закону А-закона
- Некоторая библиотека кодеков c-esc
Так что мне нужно некоторое руководство, так как я не знаю, как приблизиться к переходу от подписанного короткого целого к полноволновому сигналу. Это моя первоначальная мысль из того, что я собрал до сих пор:
Итак, из вики я получил уравнение для сжатия и распаковки по закону:
сжатие:
декомпрессия:
Таким образом, судя по уравнению сжатия, получается, что вывод ограничен диапазоном float
от -1 до +1 и со знаком короткого целого числа от –32 768 до 32 767, так что, похоже, мне нужно преобразовать его из short int
до float
в определенном диапазоне.
Теперь, если честно, я раньше слышал о квантовании, но я не уверен, стоит ли сначала пытаться деквантовать, а затем декомпрессировать, или другим способом, или даже если в этом случае это то же самое. ... учебники / документация могут быть немного хитрыми с терминологией.
Предполагается, что звуковой файл, с которым я работаю, содержит звук «А», подобный синтезу речи. Вероятно, я смог бы убедиться в успехе, сравнив две формы сигнала в некотором программном обеспечении для звука и в специальном анализаторе волн, но мне бы очень хотелось уменьшить количество проб и ошибок. раздел этого процесса.
Итак, что я имел в виду:
u = 0xff
data_chunk = b'\xe7\xe7' # -6169
data_to_r1 = unpack('h',data_chunk)[0]/0xffff # I suspect this is wrong,
# # but I don't know what else
u_law = ( -1 if data_chunk<0 else 1 )*( pow( 1+u, abs(data_to_r1)) -1 )/u
Итак, есть ли какой-то алгоритм или важные шаги, которые мне нужно предпринять в форме first : декомпрессия , second : квантование : третий ?
Поскольку все, что я нахожу в Google, - это как читать тип файла с .wav
PCM-модуляцией, а не как управлять им, если возникает дикое сжатие.