Разбираемся с аудио по Bluetooth на десктопных системах — какой кодек вам подойдет?
Беспроводной звук становится все популярнее, и я все чаще встречаю один вопрос — а как мне получить хорошее качество аудио по Bluetooth на Windows или macOS? Разумеется, вы можете купить первый попавшийся адаптер Bluetooth или просто подключить свои наушники к ПК, если на нем уже есть поддержка «синезуба», и вы точно сможете послушать музыку в стерео. Однако на деле кодек, по которому передаются аудиоданные, все же достаточно важен, и я писал об этом в одной из предыдущих статей (рекомендую с ней ознакомиться перед прочтением материала ниже). Поэтому давайте разберемся, как добиться качественного звука или же максимально снизить его задержку.
Что умеют современные системы по умолчанию?
Любые версии Windows 10 и любая macOS за последние 5 лет умеют работать с базовым кодеком SBC и «почти Audio CD» кодеком AptX (на любых Bluetooth-адаптерах). Также macOS умеет работать с неплохим психоакустическим кодеком AAC. Выбора кодека на Windows нет, также нет функционала, чтобы узнать текущий кодек (это умеют делать сторонние программы, например Bluetooth Tweaker, но они платные). Приоритет кодеков в ОС от Microsoft следующий: AptX > SBC. То есть, если ваши наушники поддерживают AptX, система также будет его использовать. Если ваши наушники поддерживают AptX, но вы хотите SBC — этого добиться невозможно.
На macOS все интереснее: приоритет кодеков по умолчанию тут AAC > AptX > SBC. То есть, если ваши наушники поддерживают и AptX, и AAC, будет использоваться последний кодек. Однако есть бесплатная программа под названием Bluetooth Explorer, где можно как менять приоритеты (например, сделать AptX > AAC > SBC), так и вообще отключить AAC и AptX, получая только SBC. Более того, здесь можно менять как bitpool, так и bitrate кодеков, то есть потенциально улучшая качество звука. Однако на деле это могут поддерживать не все наушники, и более высокий битрейт может сказаться на задержке и «дальнобойности».
На macOS можно достаточно тонко настроить звук по Bluetooth, но доступных кодека все равно только три.
По умолчанию как на Windows, так и на macOS кодек SBC имеет битрейт 328 кбит/c при 16 бит и 44.1 КГц. Кодек AptX — 352 кбит/c и 16 бит с 44.1 КГц. Что касается AAC, то его битрейт самый низкий, до 256 кбит/c при 16 бит, зато частота дискретизации выше, 48 КГц.
Я не хочу во всем разбираться и просто хочу послушать музыку, что мне делать?
Пожалуй, это самый массовый подход — хочется просто подключить наушники и слушать музыку. В таком случае вам не нужно делать. совсем ничего: любые наушники и любой Bluetooth-адаптер обязаны поддерживать протокол A2DP и базовый кодек SBC. Поэтому стереозвук вы получите в любом случае.
Однако тут важно понимать две вещи:
- С точки зрения математики SBC неплох, но на его «раскрытие» не тратят время даже такие крупные компании, как Sony и Bose. Поэтому качество музыки с ним может быть ощутимо ниже, чем по проводу, особенно если в вашем ПК стоит нормальная аудиокарта, а не интегрированная от Realtek.
- С этим кодеком обычно максимально высокая задержка — до 300 мс. Да, для прослушивания музыки это абсолютно неважно, но вот при просмотре фильмов вы будете замечать, что резкие звуки (например, выстрелы) будут не совпадать с картинкой. В играх это будет ощущаться еще более остро.
Не-не, я все же хочу получить более-менее качественный звук, что мне делать?
В таком случае имеет смысл смотреть в сторону AptX и AAC. Да, в теории эти кодеки должны давать сравнимое с SBC качество звука, но на практике многие компании настраивают DSP-процессор в своих наушниках на лучшую работу с «продвинутыми» кодеками, как итог — звук по AptX становится «объемнее и басистее», а на AAC появляется лучшая «детальность». Поэтому в народе бытует мнение, что тот же SBC сильно хуже, чем AptX: на деле слышимая разница обусловлена скорее различными настройками наушников, а не математическими различиями между кодеками.
Да, даже такой дешевый адаптер даст вам AptX на Windows 10. Но разумеется о его долговечности и качестве говорить не приходится.
Но, в любом случае, нам, как «конечным слушателям», не особо важно, как получается хороший звук, поэтому если вы слушаете обычную музыку в lossy-кодеках с битрейтом в 200-300 кбит/c, то имеет смысл остановиться на AptX и AAC. В случае с Windows 10 выбора у вас нет — система поддерживает только первый из них. В случае с macOS я бы предложил самостоятельно сравнить: в теории AAC лучше передает музыку с широкой сценой, где есть одновременно и женский вокал, и басы. AptX же лучше справляется с тяжелой музыкой типа рока или метала. Но опять же, конечный результат сильно зависит от настройки процессора в наушниках, поэтому лучше сравнить работу этих кодеков самостоятельно.
Напомню, что в данном случае вам не нужно покупать какой-то специальный адаптер для работы с AptX: любая версия Windows 10 умеет с ним работать на абсолютно любых USB-донглах, хоть с AliExpress за 200 рублей. Основная разница здесь будет только в дальнобойности: если у вас толстые стены и вы слушаете музыку за пределами своей комнаты, имеет смысл купить более дорогой адаптер с лучшей антенной.
Однако ложка дегтя все же есть: что AptX, что AAC все еще привносят ощутимую задержку в 150-200 мс. К слову, я не знаю откуда пошел миф, что у AAC зверская задержка: даже дешевые наушники от Xiaomi при подключении к iPhone с ним давали задержку на уровне 190 мс, а дорогие Sony вообще только 170. Как итог, для музыки это опять же не важно, для фильмов тоже не особо критично (напомню, что по телевизионным стандартам задержка аудио должна лежать в диапазоне от -60 до +100 мс, так что +150 мс не особо ощущается). Пожалуй, такие кодеки плохо будут подходить только для динамичных шутеров, где лишние 150 мс вполне могут стоить жизни вашему персонажу.
По AAC нет никаких огромных задержек, все на уровне AptX.
Я хочу поиграть в наушниках без задержки, что делать?
На этом месте «компетенция» современных десктопных систем заканчивается. Получается, что придется играть по проводу? Нет. Есть кодек AptX-LL, который по качеству звука является абсолютной копией AptX, но при этом сквозная задержка не превышает 40 мс. Что забавно, это временами ощутимо ниже, чем если выводить звук по проводу с интегрированных аудиокарт от Realtek: в таком случае она нередко составляет 60-80 мс, то есть звук по Bluetooth оказывается даже лучше для игр.
Однако не все так просто. Как я уже сказал выше, современные системы не умеют работать с таким кодеком «из коробки», так что придется покупать внешние Bluetooth-адаптеры, которые десктопные ОС будут распознавать как USB-аудиокарты. Я могу выделить два неплохих: это Reiyin WT-04 и Avantree DG80. Первый дешевле, его можно найти на AliExpress за 1400 рублей. За второй придется отдать 2300, зато он дальнобойнее. Оба они имеют приоритет кодеков AptX-LL > AptX > SBC.
Достаточно простой китайский адаптер, который тем не менее умеет работать с AptX-LL.
Также важно понимать, что с точки зрения наушников AptX и AptX-LL это разные кодеки. Поэтому если ваше аудиоустройство поддерживает только AptX, никакой низкой задержки не будет, так что вам нужны наушники именно с поддержкой AptX-LL, а их на рынке не очень-то и много.
Я хочу получить максимально хороший беспроводной звук, что мне делать?
Начну, пожалуй, с самого главного: абсолютно все беспроводные кодеки, даже UAT с битрейтом в 1.2 мбит/c, являются lossy, то есть часть данных будет отсекаться при передаче. Да, разумеется тот же AptX с 352 кбит/c «выкинет» из музыки куда больше, чем LDAC с 990 кбит/c, но факт остается фактом: если вы хотите слушать музыку в неизменном виде, Bluetooth все еще не для вас.
Однако можно прийти к разумному компромиссу, когда реальное качество музыки при передаче снижается настолько слабо, что даже при непосредственном сравнении разница улавливаться будет далеко не всегда. И здесь можно выделить два подхода: простой и дешевый, или замороченный. Начнем с первого.
В 2016 году компания Qualcomm представила AptX HD. 24 бит, 48 КГц, битрейт 576 кбит/с — короче говоря, «почти Hi-Fi». На деле, конечно, все слегка запутаннее. Во-первых, если вы слушаете 16-битную музыку, то разницы с AptX практически не будет: остальные 8 бит просто будут забиваться нулями, и кодек по сути превратится в 16 бит/48 КГц с битрейтом 384 кбит/c. Во-вторых, большинство USB-адаптеров с поддержкой AptX HD опять же работают в режиме 16 бит/48 КГц, и мне было забавно наблюдать за их владельцами, которые при таком подключении «слышали» разницу с обычным AptX. На деле, конечно, разницу-то они слышали, но опять же не между кодеками, а между настройками DSP-процессора в наушниках для разных кодеков,
В итоге единственный USB-адаптер с честным 24-битным AptX HD — это Avantree DG60 второй версии. Стоит он без малого 3000 рублей, зато имеет действительно дальнобойную антенну. И это самый простой способ попасть в мир беспроводного «почти Hi-Fi» звука. Получаемая при таком подключении задержка колеблется на уровне 150-200 мс: для фильмов терпимо, для игр скорее нет, чем да. И тут опять же есть важный момент: этот донгл имеет приоритет AptX HD > AptX-LL > AptX > SBC, но выбора между ними нет. Так что даже если ваши наушники умеют работать и с AptX HD, и AptX-LL, включить последний для игр вы не сможете.
Единственный адаптер с честным AptX HD.
Следующий на очереди — LDAC от Sony. 24 бит, 96 КГц, 990 кбит/c. Наушников с его поддержкой немного, и в основном это, сюрприз, достаточно дорогие решения от Sony. А раз наушников не очень много, то и отдельно создавать USB-донгл с поддержкой LDAC смысла мало, поэтому дешевого и простого способа получить поддержку этого кодека на десктопных ОС нет.
А дорогой и сложный — это покупка отдельного аудиоплеера, умеющего работать как DAC по USB, иными словами умеющего выступать внешней аудиокартой. Проблемы тут две: во-первых, стоят плееры с поддержкой LDAC негуманных денег, за тот же HiBy W3 придется отдать $59, что с учетом доставки в РФ обойдется в тысяч 5 рублей. Стоимость плееров, которые можно купить в России напрямую, нередко еще раза в полтора-два выше. Во-вторых, получаемая задержка звука просто гигантская и доходит до 500 мс: в таком режиме разумеется без проблем можно слушать музыку, но о просмотре фильмов или об играх можно просто забыть.
Ну и самый-самый максимальный кодек, доступный для получения на десктопных ОС — это UAT. 24 бит, 192 КГц, битрейт аж до 1.2 Мбит/c — выглядит внушительно. Однако на деле проблем с ним еще больше, чем с LDAC, по той простой причине, что это собственный кодек китайской компании HiBy, и работает он только с наушниками этой же компании. С одними наушниками. Да-да, только одними — TWS HiBy WH3. И вам нужен будет плеер типа HiBy W3, чтобы передавать на них музыку с ПК. С учетом того, что это внутриканальные наушники, смысла так заморачиваться скорее всего нет, так что этот абзац написан больше для «общего развития».
Достаточно неплохой китайский плеер, умеющий работать с LDAC и UAT, а также выступать внешней аудиокартой.
Вывод: беспроводной звук все еще остается в основном мобильным
В случае со смартфонами на Android проблем выше обычно нет совсем: даже не самые дорогие телефоны поддерживают широкий спектр кодеков от AAC до LDAC с возможностью выбрать любой из них, и вам всего лишь нужны наушники с поддержкой нужного кодека (или даже кодеков). А вот на десктопных ОС с этим все очень плохо: доступно лишь 2-3 кодека, причем на той же Windows 10 переключаться между ними нельзя.
И, что самое печальное, прогресс в этом направлении идет крайне медленно: так, например, возможность узнать заряд беспроводных наушников на ОС от Microsoft встроенными средствами появилась меньше года назад, а macOS вообще до сих пор не умеет это! Так что ожидать в ближайшее время каких-либо подвижек в этом направлении, увы, не стоит, а значит для получения качественного беспроводного звука вам все еще придется заморачиваться с донглами и DAC-плеерами.
Как включить кодек aac windows
Навеяно темой Улучшение звука Bluetooth на наушниках без aptX и LDAC. Решил создать параллельный способ решения проблемы, но со стороны наушников. Сразу скажу способ чуть менее тривиальный, требует некоторых технических навыков, внимательности и оборудования. Ссылки на софт и сопутствующий материал я приложу в конце статьи.
Внимание: описанные ниже манипуляции Вы проводите на свой страх и риск, велик шанс окирпичить свои наушники. Одни из двух имеющихся у меня я по глупости окирпичил, как этого избежать я расскажу.
Так же общая рекомендация: старайтесь как можно меньше лапать чипы на плате наушников, особенно маленькую микросхему SPI FLASH памяти, которая очень боится статики как и любая память, по той же причине лучше предварительно облапать батарею дабы снять с себя заряд и не сидеть в синтетическом махровом халате, шерстяном свитере, а так же убрать подальше кошку.
Однажды я увидел недорогие блютуз наушники с неплохими характеристиками (20 часов прослушивания, блютуз 4.1 и неплохое звучание на мой не искушенный слух). Так я стал владельцем Sven B350MV, позже я их слегка разобрал ради интереса и посмотрел что там за чип, а так же бегло погуглил про него инфу, это был CSR8635, убедился что он поддерживает AAC, а не только стандартный SBC и успокоился. Еще позже я решил взять себе недорогие же блютуз затычки, и прослушал несколько вариантов за ту же цену взял наиболее понравившиеся по звуку Sven SEB-B265MV, к слову аккум у них очень дохлый, садится за 3-4 часа, заряжается за 5-10 минут(буквально). Далее чисто случайно на компьютере обнаружил что у меня обе пары наушников работают в SBC, хотя аппаратная поддержка ААС в чипе есть. Думал дело в компьютере, но распарсив дамп протокола блютуз во время handshake, когда устройства сообщает о себе инфу во время соединения и поддерживаемые протоколы, понял что наушники действительно умеют только SBC. Так и родилась идея поддержку AAC в них включить.
Итак, нам понадобится:
- недорогой программатор на микросхеме FTDI FT232R/RL, подойдет китайский клон за 100руб
- (опционально) преобразователь уровней, я использовал на микросхеме TXS0108E за 40руб
- (опционально) резисторы (я использовал на 10кОм), если не используете преобразователь.
- кастомный драйвер csr-spi-ftdi с гитхаба
- официальный софт CSR (ныне квалком) для чипов
- паяльник естественно
- (опционально) немного МГТФ провода
- (опционально) breadboard
- и самое главное — НЕ спешить
Если вы увлекаетесь Arduino, то скорее всего все выше перечисленное у вас уже есть. В противном случае все можно заказать на Алике по ключевым словам FT232RL для программатора и TXS0108E для преобразователя уровней, либо в местных радио/ардуино магазинах, если не хотите ждать.
Кастомный драйвер можно скачать тут: https://github.com/lorf/csr-spi-ftdi/releases, там же есть подробная инструкция по установке и командам.
Что касается по драйверу, установка его заключается в подмене файла (библиотеки драйвера) в папке уже установленной программы BlueSuite (и других) и выглядит следующим образом:
- Установить BlueSuit или другой нужный софт
- Войти в папку установленной программы (например C:\Program Files (x86)\CSR\BlueSuite 2.6.0\) и сделать бекап(переименовать) файл usbspi.dll
- Скопировать скачанный файл из архива lib-win32/usbspi.dll в папку программы
- Скопировать кастомный usbspi.dll в папку программы
- Подключить программатор FR232 к компьютеру
- Скачать и запустить программу Zadig с http://zadig.akeo.ie/. В меню Options выбрать List all devices, выбрать «FT232R USB UART» или похожий, выбрать libusbK драйвер в окошке стрелочками вверх/вниз и нажать кнопку «Replace driver» или «Install driver». Это подменит драйвер FTDI программатора на совместимый с библиотекой libusb на который использует наш скачанный драйвер.
Немного картинок:
Все, можно запускать программы.
Далее железная часть.
Итак после чтения даташитов по CSR8635 (подозреваю и других) приятным сюрпризом было требование производителя распаивать и выводить пятки интерфейса SPI под дебаг/программатор и SVEN удивительно точно этому требованию следуют и даже подписывают назначение пинов, иначе я бы навряд ли решился на это, у меня совсем не руки хирурга. Так что наша задача тривиальна — подпаяться к этим площадкам:
Кстати слева, в B265 c МГТФ проводами, один провод припаян не правильно.
Далее нам надо подключить это все к программатору и тут есть несколько нюансов.
Во-первых: дело в том что наш программатор работает с уровнями логики 5в и 3.3в (устанавливается перемычкой), а наш чип с 1.8в, для этого нам и нужен двусторонний преобразования уровней, однако в даташите заявлена толерантность к максимальному напряжению 3.6в, следовательно вы можете на свой страх и риск выставить 3.3в на FTDI и подключить все через 10кОм резисторы. Судя по ветке переписки на гитхабе у людей все получилось успешно здесь и здесь.
Во-вторых: если у вас контрафактный чип RS232RL (как у меня именно они стоят в дешевых модулях, оригинальный стоит -6), то там пин DSR подписан как RSD.
Немного матчасти по пинам.
Непосредственно к протоколу SPI относится пина: MOSI/MO и MISO/MI для данных, CLK задает тактирование, CS/CSB — выбор чипа, т.к. позволяет подключать несколько slave чипов.
SPI_PCM(SPI/PCM) — нужен для перевода чипа в режим прошивки, для этого надо подать на него высокий уровень (подключить к питанию (+) через резистор)
GND — это земля (минус), она должна быть общей для наушников, программатора и преобразователя уровней (если есть).
Земля может быть не разведена на площадке, тогда ее стоит взять из usb гнезда зарядки, вся металлическая часть разъемов — это земля. Я же взял землю через платку питания макетной платы с USB к которой подключил наушники:
Если при выборе SPI BCCMD справа в поле будет что-то типо «No FTDI device found» значит либо не подключен программатор либо что-то заменили не правильно. Так же автор драйвера говорит что с USB3 порой FTDI микросхема работает не стабильно, у меня в ноутбуке только USB 3.0, но все благополучно завелось. Вы же по возможности используйте USB2.
Если программатор определился верно — жмем ОК и должно появится окно с бегунком прогресс бара, программа скачивает конфиг нашего устройства:
Если же на этом этапе возникла ошибка — это уже говорит о том, что что-то подключили не правильно, советую перепроверить всю схему подключения и замерить напряжения. Предварительно так же советую зарядить наушники, иногда проблема возникает из-за банальной нехватки по питанию, т.к. по нашей схеме подключения мы просто обеспечиваем сигналы, но не питание чипа. Еще раз советую проверить что земля (GND) соединена со всеми устройствами между собой (наушники — преобразователь — FTDI программатор).
Если все прошло успешно вы увидите следующее окно:
окно программы заполнится полями настроек, вручную там редактировать не удобно, все настройки представлены строками в 16-ричном формате, для этого воспользуемся другой утилитой, а пока мы сохраним дамп настроек. Для этого заходим в пункт File и выбираем Dump а так же имя место сохранениям дампа:
Лучше делать это в мои документы во избежание проблем с правами админа и тд.
После этого опять появится ползунок неопределенного прогресса и прога надолго задумается, если попытаться кликнуть по ней то винда скажет что она не отвечает, не закрывайте ее, жмите «ожидание завершения»(или как там). Что прогресс идет можно убедится открыв этот файл в неблокирующем текстовом редакторе, например Sublime text и убедится что строчки добавляются в файл. Полный размер файла дампа занимает примерно 20-30кб и содержит около 800-900 строк. Как только программа закончит создавать дамп настроек, она никак не уведомит об этом, просто пропадет окно прогрессбара. Сделайте копию оригинального файла настроек и сохраните. С текущим мы будем работать.
Так же желательно сделать дамп EEPROM через консольные утилиты. Для этого открываем командную строку от админа: ПКМ по Пуск и выбираем Windows PowerShell(администратор):