итак, мы получили спектральное представление каждой полосы фрейма, и это занимает у нас столько же памяти, сколько и изначальный PCM-сигнал. как мы можем урезать его в несколько раз?
здесь приходит на помощь психоакустическая модель, определяющая наиболее важные части спектра. что за зверь? это алгоритм, выкидывающий все, что человек не услышит:
- маскирует соседние частоты. например, есть громкая часть спектра на 300 Гц - значит, можно скипнуть части спектра в районе 280 и 320 Гц. бытовой пример - если влететь в отбойник передом машины, то вы не заметите, что на капот насрала птица
- уделяет больше внимания средним частотам - у человеческого уха больше динамический диапазон здесь
- определяет порог, выше которого частоты спектра нужно описать точнее, а ниже которого в целом похуй.
психоакустическая модель - это часть енкодера, и mp3-плееру (декодеру) все равно, какие части спектра были похерены - он просто восстанавливает исходный сигнал. чуваки сравнивают разные енкодеры, но сходятся в том что на высоких битрейтах (192..320 кбит/с) сильно большой разницы между реализациями нет, и считают LAME лучшим.
здесь приходит на помощь психоакустическая модель, определяющая наиболее важные части спектра. что за зверь? это алгоритм, выкидывающий все, что человек не услышит:
- маскирует соседние частоты. например, есть громкая часть спектра на 300 Гц - значит, можно скипнуть части спектра в районе 280 и 320 Гц. бытовой пример - если влететь в отбойник передом машины, то вы не заметите, что на капот насрала птица
- уделяет больше внимания средним частотам - у человеческого уха больше динамический диапазон здесь
- определяет порог, выше которого частоты спектра нужно описать точнее, а ниже которого в целом похуй.
психоакустическая модель - это часть енкодера, и mp3-плееру (декодеру) все равно, какие части спектра были похерены - он просто восстанавливает исходный сигнал. чуваки сравнивают разные енкодеры, но сходятся в том что на высоких битрейтах (192..320 кбит/с) сильно большой разницы между реализациями нет, и считают LAME лучшим.
❤2
следующий этап - квантирование значений. квантирование - это округление значений, и более значимые части спектра мы стараемся описать более точно, менее значимые - примерно, или выбрасываем совсем. рулит этим процессом т.н. distortion-rate loop - енкодер бежит по исходному файлу, кодирует его часть, проверяет - уложились ли мы в битрейт? достаточно ли точно кодирован сигнал? если да - идем дальше, если нет - пробуем заново.
здесь есть еще оптимизации - коэффициенты, полученные после MDCT, кодируются не абсолютными значениями, а дельтами; кодек умеет находить транзиенты и для них использовать более короткое окно, енкодер использует буфер для возможности выделения большего количества байт для тяжеловесных кусков - я не буду углубляться тут
здесь есть еще оптимизации - коэффициенты, полученные после MDCT, кодируются не абсолютными значениями, а дельтами; кодек умеет находить транзиенты и для них использовать более короткое окно, енкодер использует буфер для возможности выделения большего количества байт для тяжеловесных кусков - я не буду углубляться тут
❤1🤓1🗿1
живой пример, смотрите на картинки. я взял кусок аудиофайла длиной в один фрейм (0.026 секунд), оставил от него одну полосу частот и закинул в серум, где есть редактор волноформ. в нем нижний график - это форма волны, а самый верхний - это амплитуды гармоник, формирующих сигнал (рис 1). чтобы представить, как происходит кодирование, я оставил первые 18 гармоник, как это делает MDCT (рис 2), и затем каждую гармонику квартировал одним из четырех значений (рис 3)
в изначальном варианте, чтобы закодировать спектр, нам нужно 18*256=4608 бит, в конечном - 18*4=72 бита. охуенный выигрыш на два порядка!
сравните формы волны - они почти не отличаются. в начале и в конце волны есть отличия, но при кодировании они нивелируются при помощи OLA.
в изначальном варианте, чтобы закодировать спектр, нам нужно 18*256=4608 бит, в конечном - 18*4=72 бита. охуенный выигрыш на два порядка!
сравните формы волны - они почти не отличаются. в начале и в конце волны есть отличия, но при кодировании они нивелируются при помощи OLA.
❤2⚡2
вообще, идея «представить что-то в виде суммы его частей, уравнять похожие части и выкинуть лишние» - очень вкусная для сжатия чего угодно, не только аудио, но и видео, и картинок. великий и ужасный JPEG эксплуатирует ту же идею, и буквально то же самое косинусное преобразование, только использует другой базис
❤2
и наверно, это все, что делает енкодер! вот так просто и непринужденно мы все поняли.
последний момент - как кодировать стерео-сигнал? авторами формата было решено, что сайд не так сильно нужен, чтобы воссоздать ощущение стерео - и они предложили кодировать отдельно мид (сумму двух каналов) и сайд (их разницу), а потом сайд сжимать более агрессивно. это все называется joint stereo, и вообще необязательно в mp3, и сейчас не особо в ходу, но раньше, когда в ходу были mp3 с битрейтом 128 кбит/с и ниже - это помогало улучшить качество кодирования моно-составляющей сигнала, да и панорама в те годы будто бы в среднем была поуже
последний момент - как кодировать стерео-сигнал? авторами формата было решено, что сайд не так сильно нужен, чтобы воссоздать ощущение стерео - и они предложили кодировать отдельно мид (сумму двух каналов) и сайд (их разницу), а потом сайд сжимать более агрессивно. это все называется joint stereo, и вообще необязательно в mp3, и сейчас не особо в ходу, но раньше, когда в ходу были mp3 с битрейтом 128 кбит/с и ниже - это помогало улучшить качество кодирования моно-составляющей сигнала, да и панорама в те годы будто бы в среднем была поуже
❤2⚡1🗿1
когда мы декодируем mp3, мы инвертируем все то, что наделали при кодировании:
- bitstream был закодирован кодом Хаффмана? раскодируем
- спектр полос фрейма был квантирован? восстанавливаем коэффициенты спектра и зануляем те, что не были заданы
- аудио описано спектром в базисе косинусных функций? применяем инвертированное модифицированное дискретное косинусное преобразование (IMDCT) и получаем аудио для каждой из 32 полос аудио
- полосы аудио в низком частотном диапазоне? шифтим их туда, где они должны быть
- у нас 32 полосы, а мы хотим получить одну? суммируем полосы
- фреймы теперь пересекаются по времени? используем OLA, чтобы бесшовно склеить переходы между фреймами
забавно, что декодировать в реальном времени научились не сразу - например, топовый в 1989 году 486 процессор задыхался от вычислительной сложности. сейчас, впрочем, декодировать можно чуть ли не на ардуинах, есть и аппаратные реализации на FPGA
- bitstream был закодирован кодом Хаффмана? раскодируем
- спектр полос фрейма был квантирован? восстанавливаем коэффициенты спектра и зануляем те, что не были заданы
- аудио описано спектром в базисе косинусных функций? применяем инвертированное модифицированное дискретное косинусное преобразование (IMDCT) и получаем аудио для каждой из 32 полос аудио
- полосы аудио в низком частотном диапазоне? шифтим их туда, где они должны быть
- у нас 32 полосы, а мы хотим получить одну? суммируем полосы
- фреймы теперь пересекаются по времени? используем OLA, чтобы бесшовно склеить переходы между фреймами
забавно, что декодировать в реальном времени научились не сразу - например, топовый в 1989 году 486 процессор задыхался от вычислительной сложности. сейчас, впрочем, декодировать можно чуть ли не на ардуинах, есть и аппаратные реализации на FPGA
❤3🤓3
ну че, мы молодцы? давайте к изначальному вопросу - почему mp3 громче нуля играет?
современные треки жмут будь здоров, превращая волноформу в кирпич, который так и норовит вылезти выше 0, но никогда этого не делает. если такой трек перевести в спектральное представление - малейшее изменение любой части этого спектра приведет к тому, что при обратном преобразовании сигнал будет превышать 0 в какие-то моменты времени.
mp3 - это не архив и не та же вавка только в хуевом качестве. mp3 - это по сути партитура для аддитивного синтезатора из 576 синусоид.
на этой поэтичной ноте завершаю рассказ, всем спасибо кто осилил или хотя бы попытался ❤️🩹
современные треки жмут будь здоров, превращая волноформу в кирпич, который так и норовит вылезти выше 0, но никогда этого не делает. если такой трек перевести в спектральное представление - малейшее изменение любой части этого спектра приведет к тому, что при обратном преобразовании сигнал будет превышать 0 в какие-то моменты времени.
mp3 - это не архив и не та же вавка только в хуевом качестве. mp3 - это по сути партитура для аддитивного синтезатора из 576 синусоид.
на этой поэтичной ноте завершаю рассказ, всем спасибо кто осилил или хотя бы попытался ❤️🩹
❤7🤓1
рекап:
mp3 это такой формат аудио, который при кодировании:
- делит входящий сигнал на фреймы и полосы частот,
- потом преобразует в спектр,
- при этом учитывает непрерывную природу аудиосигнала,
- затем оставляет наиболее важные части спектра
- и выбрасывает лишнее,
- а опционально - оптимизирует стерео.
а при декодировании делает все наоборот
mp3 это такой формат аудио, который при кодировании:
- делит входящий сигнал на фреймы и полосы частот,
- потом преобразует в спектр,
- при этом учитывает непрерывную природу аудиосигнала,
- затем оставляет наиболее важные части спектра
- и выбрасывает лишнее,
- а опционально - оптимизирует стерео.
а при декодировании делает все наоборот
❤1⚡1
я вижу тема с лекциями не заходит, теперь посты будут следующего содержания:
- всем доброе утро я посрал!
- кружочек где крутится обложка трека
- стикер из нижнего телеграма
- ЗАПИШИСЬ НА МОЙ КУРС СЕГОДНЯ
- всем доброе утро я посрал!
- кружочек где крутится обложка трека
- стикер из нижнего телеграма
- ЗАПИШИСЬ НА МОЙ КУРС СЕГОДНЯ
⚡14😁6🤓3
Bad Zu
В мире, где продюсер — никто, оператор сэмплов из сплайса
охуенно сказано кстати
недавно пару чужих проектов довелось посмотреть, и очень печально смотреть как искусство продакшена постепенно возвращается к уровню ejay, также известный как «собери из заранее предоставленных квадратиков трек мечты»
музыку писать - это должно больше быть похоже на рисование маслом, а не на игру в конструктор. ну вы артисты, художники, новаторы, или что? 🙁
недавно пару чужих проектов довелось посмотреть, и очень печально смотреть как искусство продакшена постепенно возвращается к уровню ejay, также известный как «собери из заранее предоставленных квадратиков трек мечты»
музыку писать - это должно больше быть похоже на рисование маслом, а не на игру в конструктор. ну вы артисты, художники, новаторы, или что? 🙁
❤5