Здарова, народ! Если вы читаете уже третью расшифровку подкаста GoLang Awesome, то получается я не зря что ли её тут писал?! В любом случае: тема сегодняшнего выпуска – кодеки передачи звука по Bluetooth.

И поскольку каждый выпуск у нас связан с библиотекой, то героиня сегодняшнего – gaad. Название сложное и непонятное, но следите за руками: GAdvanced Audio Decoder.

Библиотека позволяет парсить аудиоданные, закодированные кодеком AACВ первом выпуске мы уже познакомились с кодеком FLAC, а что за новый AAC?

AAC – это кодек для сжатия звука с потерями, специфичный для передачи звука по Bluetooth.

Какие вообще кодеки для передачи звука по Bluetooth существуют?

AAC и SBC – самые популярные. Помимо них ещё есть aptX, а также кодеки для прослушивания в высоком качестве LDAC и LHDC. Что-то на эльфийском, да? Сейчас пробежимся по каждому и станет понятнее.

SBC или subband codec – это самый базовый и по звучанию, и по требованиям аудио-кодек. Он достаточно простой с точки зрения обработки звука, из-за чего де-факто является стандартным кодеком для всех аудиоустройств. Суть его алгоритма заключается в том, что он разделяет аудио-данные на несколько частотных полос и каждую обрабатывает индивидуально. Кодек адаптивный, поэтому в зависимости от выбранного битрейта он вырезает из каждого диапазона частоты, которые, как бы, “не влезли”. И тут может сложиться такая забавная ситуация, когда битрейт настолько низкий, что почти все высокие частоты не влезли, и остались только басы.

Ещё есть кодек aptX, а вернее даже целое семейство. Хотя, историю про семейство я буквально на минуту отложу, и расскажу про так называемый, классический aptX. Вы не поверите, но он был реализован аж в 80-х годах, и активно использовался производителями фильмов и радиостанциями для кодирования звука. При том что сам Bluetooth был представлен аж в 1998 году. И стоит заметить, что классический aptX при сходном битрейте звучит не лучше, чем SBC. Однако максимальный битрейт у него может быть выше. Так почему же aptX считается более предпочтительным, чем SBC?

Потому что на самом деле сейчас существует целое семейство кодеков aptX. Например, aptX HD – модернизированный aptX, который позволяет передавать музыку на ещё большем битрейте.

Или, к примеру, aptX Low Latency, который, исходя из названия, подразумевает уменьшенные задержки при передаче звука игры, например.

И самый свежий из этого семейства: aptX Adaptive. Это кодек, который подстраивает битрейт под радиоэфир, чтобы максимально избежать задержек и прерывания звука (в случае, если он перегружен, например).

Давайте быстренько пробежимся и по LDAC и LHDC.

LDAC был представлен компанией Sony как кодек, который может передавать звук на битрейте аж до 990 кбит/с. При этом частота дискретизации может быть до 96 кГц. И это действительно высокие показатели для действительно качественного звучания. Хотя, и ложка дёгтя в этом звучании значительна: стабильность соединения невысокая, и при возникновении помех звук будет прерываться.

Его основной конкурент – кодек LHDC, который активно продвигает компания Huawei. Он тоже является кодеком для прослушивания музыки в высоком качестве с битрейтом аж до 900 кбит/с. Но при этом обещает быть более стабильным, чем LDAC. Также предлагает и Low Latency версию для игр.

И, когда мы, наконец, обсудили каждый из самых известных кодеков, давайте вернёмся к виновнику этого выпуска: кодеку AAC.

AAC – как я уже говорил ранее, это аудио кодек для передачи звука по Bluetooth. При этом использует алгоритм сжатия с потерями. Интересно, что активно используется компанией Apple. В момент сжатия, также, как и mp3, ориентируется на психоакустическую модель, вырезая то, что, скорее всего, услышано не будет. Если вдруг вы не слушали первый выпуск, то немного расскажу вам про психоакустику.

Психоакустика – это наука, которая изучает как мы воспринимаем звук. Например, вы наверняка знаете, что человек слышит в диапазоне от 16 Гц до 20 кГц. Всё что за пределами этого диапазона можно вырезать, если, конечно, за вас не слушает музыку собака, у которой верхняя точка диапазона раза в два выше, чем у человека.

Возвращаясь к людям: существует ещё такая особенность, что большинство взрослых людей не могут слышать звук частотой выше 16 кГц. Следовательно, всё что за пределами этого диапазона можно также смело вырезать, тем самым уменьшив количество данных.

В отличии от mp3, в AAC психоакустическая модель, и в целом технология сжатия сильно проработанней, поэтому при меньшем битрейте качество звука будет выше. Однако, этот кодек сложный для вычислений, и требует качественный декодер. Который можно встретить не во всех устройствах. В итоге мы имеем как бы крутой кодек, который поддерживает аж до 48 аудиоканалов, частоту дискретизации до 96 кГц, но вот от устройства к устройству качество звука будет разниться.

Но тем не менее, аудиопоток, закодированный AAC, вы сможете легко спарсить библиотекой Go Advanced Audio Decoder  , с которой и началось наше погружение в мир кодеков для передачи звука по Bluetooth.

Библиотека понимает как переменный битрейт, так и постоянный. Последний коммит был относительно недавно: 18 мая. А звёздочек у репозитория 107. Возможно, это не самая лучшая библиотека для работы с AAC на Go, но среди именно нативной реализации аналогов я не нашёл. В основном только биндинги  к сишным библиотекам.

И, думаю, на этом можно заканчивать. Надеюсь, что вам было интересно послушать /посмотреть /почитать про аудиокодеки для передачи звука по Bluetooth. Не стесняйтесь комментировать выпуски (на YouTube или в Telegram ), а я отправился готовить следующий выпуск. Услышимся через неделю!