Кодек AAC (Advanced Audio Coding) создавался в далёком 1997 году как более качественный, чем mp3, кодек для сжатия аудио. И в чём-то он действительно лучше, например: доступны более высокие частоты дискретизации (до 96 кГц) и сам алгоритм использует психоакустические особенности человеческого слуха.
Сейчас AAC является основным аудио-кодеком для сжатия с потерями экосистемы Apple. Ещё он основной на YouTube и даже российском ТВ-вещании. 😀 Но нам интересна его беспроводная реализация. Во всех iPhone и во многих Android-устройствах доступна передача музыки по Bluetooth с помощью конвертирования этим кодеком.
Так как параметров Bluetooth-передачи не хватает для трансляции музыки без потерь (lossless), используются кодеки: алгоритмы, которые разделяют передаваемый сигнал на части и отправляют «по воздуху» на наушники. А там, в свою очередь, через тот же кодек происходит «распаковка» и цифро-аналоговое преобразование сигнала в музыку. Думаю, все любители портативного аудио примерно знают эти схемы. 😎
Основные кодеки для передачи звука по Bluetooth: SBC, AAC, aptX, aptX Low Latency, aptX HD, LDAC. Кроме того, относительно недавно был представлен ещё один кодек от Qualcomm: aptX Adaptive, но устройства с ним пока только ожидаются. Какой из кодеков лучше – вопрос спорный. Если брать только битрейт, то AAC сильно отстаёт. Однако на слух хорошая его реализация (в iPhone) не сильно отличается от aptX.
Сравнение работы AAC в двух основным мобильных операционных системах интересно тем, что это единственный кодек, кроме «древнего» SBC, который используется в обеих. Apple упорно не хотят платить Qualcomm за лицензию на aptX. Видимо, руководствуясь принципом: если не слышно разницы, зачем платить больше? 😀
1. Частотный диапазон AAC
AAC сжимает аудио с потерями: «лишние» частоты отсекаются, сигнал выравнивается (добавляются «перекрывающие» блоки информации), корректируются ошибки. Примерно по такому же принципу работают все lossy кодеки (кодеки для сжатия с потерями).
Потери в основном выражаются в урезанном частотном диапазоне: обычно верхняя граница ВЧ. Кроме того, из-за выравнивания сигнала могут добавляться (и чаще всего добавляются) искажения, которые могут быть в любой области диапазона.
Посмотрим, как работает AAC (источник – lossless аудио-файл) в сравнении с SBC на некоторых Android-смартфонах и iPhone:
Сразу видны серьёзные отличия в реализации AAC на разных смартфонах. Стоит учитывать несколько моментов:
- человек теоретически может слышать звуки в районе 20 Гц – 20 кГц;
- бОльшая часть «материала» в музыке находится ниже 16-18 кГц;
- с возрастом мы хуже воспринимаем ВЧ (до 16-17 кГц в среднем после 30 лет)
Рассмотрим край ВЧ-диапазона покрупнее:
Как видно, AAC на Huawei P20 Pro «срезает» ВЧ очень рано: около 14 кГЦ. Эти частоты слышат даже совсем немолодые люди, если не было проблем со слухом. Samsung Galaxy Note 8 (через AAC) ограничивает верхний порог до 17 кГц. Но iPhone 7 справляется лучше: около 19 кГЦ.
Особенно интересен этот разброс результатов в сравнении с работой SBC-кодека на тех же Android-смартфонах. Верхние границы диапазона на всех «подопытных» выше, хоть и с бОльшими искажениями. Но главное, что они очень похожи: то есть кодек SBC работает более-мене одинаково на разных телефонах.
2. Уровень фонового шума AAC
Уровень фонового шума показывает границу, после которой шум от алгоритмов сжатия кодека (в общем случае – от любой воспроизводящей аппаратуры) становится неотличим от полезного сигнала – музыки. Чем ниже и стабильнее этот уровень по всему диапазону частот, тем более тихие звуки мы сможем услышать (если они есть на записи).
Правильнее всего ориентироваться от самого верхнего пика, он может заглушить более тихие звуки. Поэтому в этих графиках важен не только уровень, но то, насколько они ровные («плотные»).
На графике отлично видно, что уровень фонового шума при использовании AAC у Huawei P20 Pro и Galaxy Note 8 ощутимо выше, чем у iPhone 7. В промежутках между пиками (тестовыми сигналами) видно, что AAC хорошо отфильтровывает места, где «звуковой информации» нет.
По этому графику также видно, что алгоритмы, используемые в AAC, учитывают психоакустику. Громче всего тестовый звук на 1 кГц (в этом диапазоне наш слух наиболее чувствителен), и шум вокруг него также наиболее высокий. Получается, что кодек AAC «маскирует» более тихие звуки на одной и той же частоте под более громкими: чем громче звук, тем выше фоновый шум.
Именно так и работает наш слух: мозг маскирует тихие звуки, если есть более громкие на этих. Мы воспринимаем оркестровую музыку цельным «полотном», а не отдельными сигналами (хоть и разделяем инструменты). Этот же принцип: сложно услышать что-то тихое сквозь шум пылесоса, например.
CD-качество подразумевает уровень фонового шума -96 дБ. Конечно, в случае AAC такое качество не достигается, хотя на iPhone на 1 кГц мы видим шум -91 дБ, что в целом неплохо. А вот на Android-телефонах пики подбираются к -50 дБ: уровнем, когда фоновый шум явно различим.
3. Причины плохого качества работы кодека AAC на Android
Основных причин разницы качества AAC на Android и iOS две:
- приоритизация процессов по энергоёмкости на Android;
- разные программные средства кодирования AAC;
В Andriod есть алгоритмы Energy Aware Scheduling (EAS). Эта система изменяет приоритеты процессов по их энергоёмкости. То есть, выбор на какую задачу будет отведено больше процессорной мощности (а процессор в смартфонах выполняет огромное количество задач одновременно) может варьироваться.
Если система настроена на экономию заряда аккумулятора, как у Huawei P20 Pro, то при выполнении сложной для процессора задачи приоритет будет отдан именно оптимизации энергопотребления. Как было показано выше, AAC использует психоакустические алгоритмы при кодировке, а это довольно тяжёлая нагрузка на процессор. Соответственно, эта задача будет выполняться с меньшим битрейтом и качеством в целом для оптимизации затрат энергии.
Если бы EAS дал процессу кодировки AAC высокий приоритет, он сильно «просаживал» бы батарею, хотя качество бы улучшилось. Но в приоритете именно экономия заряда, качеством EAS в данном случае жертвует.
Вторая основная причина – разные «кодировщики», программные средства кодирования AAC. В iOS используется Apple AAC, считающийся наиболее качественным из существующих. А в Android по умолчанию – Fraunhofer FDK AAC, он чуть хуже «справляется со своими обязанностями».
Apple AAC, естественно, не существует «под» Linux, поэтому установить его на Android-смартфон не удастся. А на iPhone, как известно, вообще лучше ничего стороннего не устанавливать. 😉
Кроме того, в программной среде Android на аппаратном уровне поддерживается множество форматов аудио, в отличие от iOS. Не стоит забывать и про аудио-туннелирование, которое работает с 4.4 версии Android. Это передача кодирования\декодирования аудио на выделенную часть общего чипсета – DSP (digital signal processor) – цифровой сигнальный процессор.
В iPhone используется более-менее одинаковые процессоры, а в Android смартфонах они могут сильно отличаться, отсюда разная работа аудио-туннелирования и разница в итоговой кодировке AAC, например.
4. Особенности AAC
Ещё один интересный момент заключается в том, что даже файлы уже закодированные в AAC, меняются при передаче по Bluetooth-версии этого кодека. То есть, перекодируются ещё раз. До этого тестовые файлы были в формате без сжатия.
В общем и целом, картина повторяется. Спад у iPhone идёт ощутимо позднее и уже ближе подбирается к верхней границе слуха, в отличие от Android-телефонов.
Из графика уровня фонового шума явно видно, что даже в iPhone AAC-файл перекодируется при передаче через Bluetooth AAC: добавляется около 15 дБ шума. Общая же тенденция не изменилась: как с lossless, так и с AAC файлами при передаче «во воздуху» через одноимённый кодек лучше выглядит iPhone: искажений пере-кодировка тут добавляет меньше.
В итоге можно сказать, что AAC – весьма интересный кодек. О его качестве нельзя судить, просто отталкиваясь от уровня фонового шума и частотного диапазона, как в случае с другими кодеками. AAC в своих алгоритмах учитывает психоакустику, слуховое маскирование – только в цифрах качество тут не измерить.
5. Итог
Учитывая всё вышесказанное, становится понятно, что качественная реализация AAC (на iPhone) даёт очень неплохой итоговый результат, слабо отличимый на слух от кодеков «высокого качества», например, aptX. Однако, если кодирование происходит в более низком битрейте, как на протестированных Android-смартфонах, качество страдает очень сильно.
Самое главное – отличия в работе AAC на разных смартфонах. Тот же SBC, например, показывает более стабильные результаты от модели к модели. Соответственно, если ваш телефон работает под управлением Android, AAC не обязательно качественнее, чем SBC, как это часто считается.
На некоторых моделях SBC может показать лучшие результаты, чем AAC. И не только в цифрах, но и на слух. Поэтому, если вы купили наушники с поддержкой AAC, но звук в связке с вашим телефоном вам не нравится, попробуйте переключиться на SBC, возможно именно в вашей модели AAC реализован хуже.
Реализация AAC на iPhone лучше – звучание очень сильно (для сжатия с потерями) приближено к CD-качеству. В среде Android AAC работает хуже, чаще всего на более низком битрейте, отсюда дополнительные искажения и потери сжатия. При этом на разных телефонах итоговый результат может сильно варьироваться.