Как FLAC сокращает файл, не меняя звук
В цифровой записи музыка хранится как последовательность чисел — измерений звуковой волны. Многие значения связаны между собой: соседние отсчёты обычно похожи, потому что звук меняется плавно, а не скачет каждую долю секунды. FLAC использует эту предсказуемость, чтобы записать данные компактнее.
Вместо каждого числа — разница
Кодек анализирует короткие участки записи и строит для них прогноз: каким, вероятно, будет следующий отсчёт на основе предыдущих. Затем он сохраняет не сами исходные числа целиком, а разницу между прогнозом и фактическим значением. Если прогноз удачен, разница мала и её можно закодировать несколькими битами. Для участков, которые предсказать труднее, FLAC хранит более подробные остаточные данные — так, чтобы можно было восстановить каждый отсчёт точно.
Это похоже на описание ряда «100, 101, 102» не тремя отдельными числами, а начальным значением и двумя прибавлениями по единице. Но музыкальный сигнал намного сложнее, поэтому предсказание подбирается для небольших фрагментов, а метод кодирования учитывает, насколько велики и часты ошибки прогноза.
Почему при распаковке ничего не теряется
FLAC относится к сжатию без потерь. При декодировании проигрыватель повторяет расчёты в обратном порядке: восстанавливает предсказанные значения и прибавляет к ним сохранённые разницы. В результате получается та же последовательность отсчётов, что была до сжатия, а не приблизительная копия.
За точность приходится платить размером: FLAC обычно не делает файл таким маленьким, как форматы, которые отбрасывают часть звуковых данных. Зато архив, копия записи или мастер-файл после многократного сохранения не накапливает потерь: каждый раз звук можно вернуть к исходным цифровым значениям.






