[Из песочницы] Беспроводной звук. С компьютера и почти по всей квартире
Как очень хотелось всё сделать на WI-FI…
Конечно, можно было бы начать эту статью с лирического отступления про «умные» дома будущего (или квартиры), в которых повсюду стоят миниатюрные (или не очень) звуковые колонки, услаждающие хозяев музыкой. Вероятно, в ближайшем будущем так оно и случится, когда каждый девайс у нас дома будет оснащен копеечным WI-FI адаптером. Но почему-то в настоящее время такие технические решения, связанные с беспроводной раздачей звука по WI-FI, могут стоить каких-то неразумных денег. Вот, например, мультирум-системы от фирмы «SONOS», где только одна! беспроводная WI-FI колонка, обойдётся покупателю в сумму свыше двадцати тысяч рублей.
Вообще, хорошая статья 2016 года про WI-FI раздачу аудио так и называется «Беспроводные аудиосистемы: криво, дорого, очень интересно» [1], где два последних слова заголовка и отражают надежду автора, что в будущем хоть что-нибудь, наконец-то, изменится в лучшую сторону.
Так что, пока китайцы не завалят нас дешёвыми аудио колонками со своей знаменитой микросхемой ESP8266 (позволяющую наладить полноценный обмен данными по WI-FI c целевым устройством и которую энтузиасты пихают куда угодно вплоть до лампочек и кофеварок и ), нам остается лишь обращаться уже к проверенным временем техническим решениям.
1. Провода. (что как бы уже диссонирует с названием нашей статьи)
2. Блюпуп.
3. FM радио.
Конкретно, в моем случае, мне хотелось слушать запускаемые на компьютере музыкальные композиции во всей квартире, да так чтобы звук шёл отовсюду откуда можно и нельзя. Для этой цели первоначально служили 12 активных колонок расставленных в прихотливом порядке на подоконниках, шкафах и на книжных полках под потолком. Также присутствовал телевизор ответственный за целую стену. Его звуковоспроизводящую систему тоже хотелось использовать параллельно, благо у меня был уже установлен беспроводной HDMI передатчик (включаешь кино на компьютере, а смотришь со звуком по телевизору и никаких тебе тормозных донглей или медиа-проигрывателей с вечно устаревшими видеоформатами).
Итак часть 1. А может сделать всё просто?…
Первоначально я проложил много чего проводочками. В принципе, вдоль окон и на расстояние до 10 метров, все получилось довольно цивилизованно и незаметно, и как оказалось выход звуковой карты компьютера прекрасно тянет даже дюжину активных колонок включенных параллельно (два года уже, кстати, тянет).
Но вот с остальными стенами и дверными проёмами, да ещё и в других комнатах, всё уже было не таким безоблачным. Явно требовалось передать звук по воздуху. Да и телевизор тоже хотелось включить в общую сеть (зря, что ли, там японское качество пропадает?). Тогда я решил воспользоваться технологией Блюпуп…
Но как говорится, всё уже давно украдено придумано до нас. Небезызвестная фирма LOGITECH ещё в 2006 году выпустила так называемую Logitech Wireless Music System for PC с вполне вменяемой стоимостью от 75 долларов. Вы получали в руки Bluetooth передатчик сопряжённый с вашим компьютером, а уже он раздавал звук на такие же блюпуп приёмники в количестве до четырёх, что вполне подходило под мои запросы.
Единственным крупным недостатком этого устройства было то, что его сняли с производства уже где-то лет пять, если не больше. В принципе, можно и сейчас приобрести этот девайс на eBay, если у вас есть желание. Но вот в России его уже днём с огнём не сыщешь. Я нашёл только один комплект в Москве. Но там был всего один приемник, когда мне требовалось, ну, хотя бы два. Поиски аналогичных устройств от других производителей тоже успеха не принесли, единственное, на что я постоянно натыкался, были или просто обычные Bluetooth колонки, либо ещё одно устройство от уже упомянутой фирмы, так называемый Bluetooth Audio Receiver (которое благо, пока еще не сняли с продажи).
Вообще, это тот же Bluetooth приемник, к которому можно подключть активные колонки, но без возможности объединения в сеть, пока у вас нет передатчика. А у нас его нет. Или есть? Может всё-таки можно как-то раздать на несколько таких устройств звук непосредственно с нашего компьютера, который и будет Bluetooth передатчиком?
Я попытался попробовать. В наличие были: Bluetooth колонка, Bluetooth наушники и уже вышеупомянутый Bluetooth Audio Receiver (он ещё может называться Logitech BT Adapter Stereo), с подключенными к нему обычными активными колонками.
Само подключение к списку устройств воспроизведения на компьютере (здесь и далее по умолчанию будет идти речь про семейство Windows) было тривиальным (стандартное для всех блюпуп устройств) и отдельного рассмотрения не заслуживает.
Получается в итоге, что-то похожее на следующую картинку.
Теперь можно попробовать прослушать все подключенные нами аудиоустройства. Как нетрудно выяснить в итоге, мы можем слушать только одно устройство, а именно то, на котором стоит зелёная галочка (что означает устройство по умолчанию). Остальные аудиоустройства молчат, как рыбы, пока не получат вожделенную галочку. С одной стороны это понятно, а с другой немножко удивительно, если мы проведем простой эксперимент.
Пусть, пока по умолчанию работает звуковой выход Real High Definition Audio. Это обычный линейный выход звуковой карты компьютера. Присоединив к нему обычные проводные наушники, мы в этом непосредственно убедимся. Они и воспроизводят в данный момент звук. Но вот, если мы кликнем правой кнопкой мыши по молчащим пока беспроводным наушникам, (в моем случае это MDR-ZX330BT Hands-Free), и выберем свойство «Дополнительно», а в нем «Проверка», то мы услышим, как в динамиках наушников поочерёдно блямкнет. То есть, они нормально подключены, могут транслировать звук (проверочный), но вот музыку, как работающие сейчас проводные, шиш с маслом.
То есть теоретически Windows может распихивать звук на все устройства одновременно (с учетом, конечно, производительности компьютера), но делать этого не хочет. Вы можете выбрать только что-то одно (на самом деле два).
Единственный возможный трюк прослушать одновременно два аудиоустройства в Windows состоит в использовании штатного стереомикшера.
Одним из устройств должен быть линейный аудиовыход компьютера (тот самый к которому вы подключаете проводные наушники и колонки). У меня он обозначен как Real High Definition Audio. Он должен быть в состоянии «Устройство по умолчанию». Теперь выберем второе аудиоустройство.
Переходим с вкладки «Воспроизведение» на «Запись», «Стереомикшер», «Свойства», «Прослушать». В раскрывающемся списке выбираем нужное нам аудиоустройство
Я выбрал имеющийся у меня Logitech BT Adapter Stereo. Теперь можно запускать музыку одновременно на эти два аудиоустройства. И они действительно будут проигрываться одновременно.
Правда, у этой схемы есть два недостатка. Первый — ограничение в два устройства ещё можно пережить. Второй недостаток, перечёркивающий всю схему целиком — это то, что звук звучит рассинхронизировано. Музыка по блюпуп каналу (как впрочем и по телевизионному HDMI), ОТСТАЁТ от музыки проигрывающейся через линейный аудиовыход. Разница, примерно 0,2–0,3 секунды, но из-за этого слушать 99% саундтреков просто невозможно, потому что в в итоге вы слышите звуковую кашу. В редких случаях (звуки там природы или колокольчики всякие), такая рассинхронизация даже по своему забавна, создается этакий эффект глубины и присутствия. Но просто музыку, тем более песни, слушать просто невыносимо.
Вероятно, проблема здесь в буферизации цифровых данных для беспроводной передачи, из-за которой и происходит запаздывание сигнала. Но это в итоге рушит всё. Если бы, можно было ещё как-то настроить задержку сигнала для линейного аудиовыхода, то ситуацию с рассинхронизацией можно было исправить, настроив, например, вручную длительность этой задержки. Но к сожалению штатные средства Windows такой возможности вроде как не представляют.
Казалось бы, тогда можно не использовать стандартный аудиовыход, а взять к примеру, по умолчанию одно Bluetooth устройство, а второе пропустить через вышеупомянутый стереомикшер Windows. Тогда задержки в буферизации будут одинаковые, рассинхронизации не будет и два одновременно играющих устройства мы всё же получим. Но опять-таки, к сожалению, у нас ничего не получится, поскольку эта схема со стереомикшером работает только в том случае, если одним из её участников и является линейный аудиовыход.
Выходит прямо как по книжке «Трое в лодке, не считая собаки» с одним из её персонажей:
«Потом Гаррис стал рассказывать нам истории о том, как он пересекал Ла-Манш в такой шторм, что пассажиров пришлось привязывать к койкам, и только два человека на борту — он сам и капитан корабля — устояли против морской болезни. Иногда теми, кто устоял против морской болезни, оказывались он сам и второй помощник, но неизменно это был он сам и кто-то другой. Если же это были не он сам плюс кто-то другой, то это был он один.»
Как говорится, ничего не прибавить и не отнять. Линейный аудивыход и есть Гаррис. И все равно, после этого я не разочаровался. После этого я попытал счастья с FM передачей…
Часть вторая. FM-трансмиттер. Помощь ультракоротких волн.
После прочтения соответствующей статьи на Хабре [2], в моём воображении сразу возник план построениия радиосети, где в центре есть небольшой FM-передатчик, подключенный к аудиовыходу компьютера, а вокруг него по всей квартире соответственно располагается с пяток FM-приёмников, с выхода которых вещают уже обычные активные колонки. Реализовать идею оказалось несложно.
Был куплен за 500 рублей автомобильный FM-трансмиттер, с линейным входом; в документации он проходит как вход AUX (кстати, не во всех трансмиттерах он имеется! USB входы, чтение карт памяти есть у всех, а вот простейшего линейного входа у половины этих устройств уже нет!).
Пришлось, правда, немного его доработать, поскольку двенадцативольтовое питание вне автомобиля редкость. Поэтому я подключил к трансмиттеру USB шнур, с которого взял провода пятивольтового питания и припаял их ко входу стабилизатора напряжения 3.3 вольт уже внутри самого трансмиттера (там на печатной плате всё обозначено, ошибиться сложно). Аудиовыход компьютера я подключил к AUX входу трансмиттера и при включении тот начал стабильно выдавать в эфир радиоволны на заданной по умолчанию частоте (её значение потом при желании можно настроить кнопочками).
Соответственно для приёмной части был приобретён вот такой FM-приёмник:
Приятной особеннностью этого девайса оказалось наличие разъёма-мамы для наушников, куда прекрасно зашел разьём-папа от активных колонок. Если настроить приёмник на нужную частоту, а настраивается он тоже очень удобно кнопками, а не как по старинке верньером или колёсиком, то вы услышите, как раз то, что передает ваш FM-трансмиттер — ЭТОТ прекрасный тёплый радиозвук. Сразу вспоминается детство, когда среди треска и свиста вы вылавливаете запрещённые песни с BBC. Это не какое-то там холодное чистое компьютерное звучание!
Короче говоря, как ни менял я частоты на трансмиттере и соответственно на приёмнике, нормального чистого звучания добиться мне так и не удалось. Собственно, когда играет сама музыка, то помехи ещё не сильно слышны, но стоит только случиться паузе и вы услышите все возможные турбуленции радиоэфира в радиусе десяти километров. Я уже не говорю о том случае, когда вы НЕ слушаете музыку, а просто допустим, сидите работаете за компьютером;, но и тогда вы тоже слышите сплошной треск и переговоры полиции — приёмник-то работает, что-то ловит.
Поэтому от планов передачи звук по FM-каналам тоже пришлось отказаться.
Часть 3. Всё есть программа…
Вначале я-то искал программы микшеры. Меня не оставляла надежда каким-нибудь программным способом организовать задержку сигнала на аудиовыходе компьютера, чтобы прослушивать одновременно хотя бы два аудиоустройства без рассинхронизации. А цифровые микшеры, по идее, должны делать такие вещи. Но как оказалось, в основном эти программы умеют сводить звуковые дорожки из разных источников в одну финальную, а вот разводить из одной на разные устройства воспроизведения они уже как-то не очень, то есть, это точно не их основная функция. И даже если эта функция существует, то она погребена где-то глубоко в недрах настроек, откуда ее еще надо выкопать. К тому же надо ухитриться как-то интегрировать эти микшеры в аудиопоток того же браузера, музыку с которого, вы, к примеру, слушаете.
Но перебирая все эти микшеры и аудиоредакторы я накнулся на интересную программу Virtual Audio Cable, с помощью которой я и решил в итоге все свои задачи.
Цитата:
Программа создает в системе несколько аудиоустройств, которые называются «виртуальные кабели», каждое из которых содержит входное и выходное устройство для подачи звука. Любое приложение может отправлять свой аудиопоток на «выходную» часть кабеля, в то время как любое другое приложение может получать звук из «входной» части этого виртуального кабеля. Передача происходит полностью в цифровом виде, за счет этого качество звука не снижается.
Программа вроде как изначально платная, но найти бесплатный ее вариант вам тоже никакого труда не составит. И как только вы её нашли, вам остается лишь её запустить и применить к нашим подключенным аудиоустройствам. В моем случае это были: телевизор «SHARP» подсоединённый к компьютеру через беспроводной HDMI канал.
Две штуки Bluetooth Audio Receiver с присоединёнными к ним активными колонками. На одном адаптере четыре колонки, на втором, аж восемь.
Bluetooth наушники «SONY MDR-ZX330BT
Bluetooth колонка BoomBot 2
Вот теперь мы и попробуем заставить функционировать все эти устройства параллельно и без заметных слуху задержек. Проверяем для начала в списке оборудования, что все эти девайсы уже подключены и готовы к работе (это важно, подключение на лету, чревато глюками). Забегая вперёд, скажу, единственное, чем мы не будем пользоваться — это именно линейным аудиовыходом компьютера, поскольку, он как тот герой из книжки вечно тянет одеяло на себя (да-да, Гаррис и этим тоже отличался). Чтобы его полностью нейтрализовать, втыкаем в него самые дешёвые проводные наушники, типа таких:
Ставим Real High Definition Audio (линейный выход) в списке устройств, как устройство по умолчанию, устанавливаем в «Стереомикшере» (см. выше) воспроизведение с него же, закидываем наушники за системный блок и забываем про него теперь уже навсегда.
Теперь же установим программу Virtual Audio Cable. В папке самой программы и подпапке x64 (для тех у кого Windows 64-разрядная)находятся два нужных нам для исполнения файла: vcctlpan.exe и audiorepeater.exe (которую в дальнейшем будем просто называть «аудиорепитер»).
Запускаем сначала первую:
В ней мы фактически устанавливаем количество виртуальных кабелей — один, и источники сигнала «Line». Программу закрываем, больше она нам не потребуется. Запускаем теперь браузер, а в нём какую-нибудь композицию Youtube. Если всё в порядке, то мы услышим еле слышный звук откуда-то из-за системного блока. Это заработали проводные наушники.
А вот со второго файла «audiorepeater.exe» делаем ярлык прямо на рабочий стол, он нам будет требоваться регулярно.
Теперь открываем его в первый раз и меняем в нём две строчки: из выпадающего меню «Wave in» выбираем «Стереомикшер», так как мы провели именно через него аудио канал, а из выпадающего меню «Wave out» выбираем телевизор и жмем «Start». Телевизор должен заголосить. Как и раньше звук с него будет отставать от проводных наушников, но нам уже будет всё равно, мы их просто не услышим.
Вообще, как оказалось, строчку «Wave» in можно не менять, а оставить исходное «Переназначение звуковых устр.». Вроде как программа сама понимает, где нужный вход по умолчанию. Поэтому мы в дальнейшем эту строчку даже и не трогаем. Экономим силы.
Теперь запускаем новый экземпляр аудиорепитера. В нём выбираем первый по счёту Bluetooth Audio Receiver (он немного отличается от второго в названии) и жмем «Start». Начинают голосить колонки подключенные к этому приёмнику.
Тоже самое делаем со вторым Bluetooth приёмником. Теперь голосят колонки подключенные к нему.
Теперь принимаемся за беспроводную колонку BoomBot 2.
И последний штрих — беспроводные наушники MDR-ZX330BT. Играют?
Обратите внимание, что из-за примерно одинаковых задержек буферизации, рассинхронизации звука не ощущается (кстати, её теперь можно подстроить, меняя значение в поле «Total buffer»). Качество звука? Если честно, я не аудиофил, меня вполне устраивает. Хотя конечно, профессионалы в этой области изругают меня матом и за блюпуп передачу и за компьютерные колонки. Что касается дальности связи, в пределах одного помещения сигнал проходит устойчиво на расстоянии в десять метров (больше не мерил, квартира кончилась) и успешно преодолевает одну межкомнатную перегородку.
Хотелось бы конечно, использовать и линейный аудиовыход, раз уж он имеется. Но опять возникает проблема рассинхронизации. Казалось бы, сигнал на него тоже можно пропустить через аудиорепитер и настроить задержку, но увы, он всё равно будет проигрываться параллельно с самим аудиовыходом. То есть, он почему-то всегда присутствует и в виртуальном кабеле и в настоящем. Может у кого-то и получится его победить, но у меня это не вышло.
Теперь о некоторых тонкостях. Не все беспроводные устройств включены по умолчанию, например телевизор или наушники. Поэтому Windows при включении компьютера, назначает устройством по умолчанию какой-нибудь «живой» на этот момент девайс. Вот поэтому мы и используем в этом качестве те самые проводные наушники, чтобы у нас гарантированно было всегда одно и тоже устройство для воспроизведения по умолчанию (а так как они всегда включаются одновременно с компьютером, то система и находит их первыми). Соответственно в стереомикшере сигнал тоже воспроизводится через них, но даже, если там идут наложения звука, нас это уже не волнует (нам их не слышно). А вот если бы их не было, то Windows при запуске, назначило бы устройством по умолчанию какое-нибудь включенное на данный момент удалённое устройство, да еще бы и продублировало его через стереомикшер. Можно, конечно, каждый раз проверять список устройств при запуске, но мне показалось удобным поставить «заглушку» в виде проводных наушников и забыть про эти нюансы. Кстати, сам стереомикшер отключать нельзя, без него ничего не работает.
А теперь о ложках дегтя в нашей бочке мёда:
1. Количество подключенных через программу Bluetooth устройств нельзя довести до теоретического предела (71 штука вроде?). В реальности у меня абсолютно стабильно работают максимум три таких устройства одновременно. Ну и плюс к ним телевизор по HDMI каналу (такое впечатление, что ему абсолютно пофиг на количество соседей; корректно работает всегда). Уже четыре блюпупа начинают рано или поздно заикаться, а буферы «VirtualCable» переполняться. Есть версия, что может быть это Bluetooth адаптер и звуковая карта самого компьютера уже не успевают раздавать свои аудиопотоки.
2. Не все Bluetooth устройства совместимы между собой. Когда я попытался подключить дополнительную беспроводную колонку «Defender» она вдруг начала конфликтовать с БумБотом.
В общем, они пытались петь одновременно, но получалось у них это только поочерёдно. Причем с другими устройствами они не конфликтовали. Только с друг другом. Этот вопрос тоже требует своего изучения.
В итоге все-таки я получил, что хотел, даже в таком ограниченном количественно варианте. Можно слушать пение птичек в лесу и в гостиной и в спальне или смотреть, как играет пламя в камине (в телевизоре, конечно же)и трещат дрова, а за окном завывает зимний ветер или льет дождь или плещут волны. На Youtube полным-полно этих многочасовых видео. Можно расшарить экран на компьютере, детям пустить по телевизору мультики дополнительным экраном и звуком, а самому работать и слушать музыку на самом компе через беспроводные наушники (или телеконференцию на нём смотреть), в то время, как жена в спальне читает книжку и слушает пение птичек в лесу через беспроводные колонки. Ну и так далее.
Буду рад, если моя статья окажется кому-нибудь полезной.
[1] Беспроводные аудиосистемы: криво, дорого, очень интересно
[2] Радионаушники из FM-трансмиттера