Клиент Mumble · Windows · macOS · iOS · iPadOS · Android

Связь для байкеров

Клиент Mumble, сделанный под шум ветра и мотора в шлеме. Windows, macOS, iOS, iPadOS и Android.

Эти полосы — анализатор из самого приложения: микрофон, сигнал после шумоподавления и то, что в итоге уходит на сервер.

Интерком кончается там, где группа растянулась

Bluetooth-интерком связывает мотоциклистов друг с другом и работает, пока между ними несколько сотен метров, не больше. Отстали на перекрёстке — и разговора нет. MumbleWay переносит разговор в интернет: все заходят в один канал Mumble через мобильную связь, и неважно, едет следующий в ста метрах впереди или в другой стране.

Это не универсальное приложение для звонков, которому пририсовали мотоцикл на иконке. Весь тракт обработки звука исходит из того, что микрофон — в сантиметре ото рта, внутри шлема, на скорости, а фоном идут ветер и мотор.

Дальность интеркома и дальность интернет-канала Слева Bluetooth-интерком: двое внутри пунктирного круга связаны, а третий, отставший, оказался за его пределами, и связи с ним нет. Справа те же трое на тех же расстояниях подключены к серверу Mumble, и расстояния между ними больше ничего не значат. BLUETOOTH-ИНТЕРКОМ несколько сотен метров вне зоны MUMBLEWAY ваш сервер Mumble сто метров или другая страна
Интерком — это радиосвязь между шлемами, и она кончается там, где кончается радио. Свой сервер убирает из задачи расстояние и взамен требует связи. На этом размене построено всё приложение.
Дальность Любая

Мобильный интернет, а не радиоканал между шлемами.

Кодек Opus

48 кГц и упреждающая коррекция ошибок, которая растёт по мере ухудшения связи.

Серверы Ваши

Любой сервер Mumble. Ни учётной записи, ни каталога, ни компании посередине.

Что он делает с шумом

Речь в шлеме на скорости — трудный сигнал. Тракт сделан именно под него, и за работой каждой ступени можно наблюдать.

Как блок звука доходит от шлема до остальных Один ряд ступеней слева направо: микрофон, подавление эха, полоса речи, очиститель, смешение, гейт, уровень, подъём, лимитер и выход к остальным. Сплошные стрелки — сам звук, он проходит все ступени именно в этом порядке. Пунктирные стрелки снизу несут не звук, а сведения: уровень фона и отношение сигнал/шум выбирают профиль и задают порог гейта, проверка на голос решает, открыть ли гейт, а то, что убрал очиститель, подсказывает ступени подъёма, что вернуть обратно. то, что говорят другие опорный сигнал Микрофон в шлеме Эхо AEC3 Полоса только речь Очиститель DeepFilterNet 3 Смешение по профилю Гейт с упреждением Уровень автоматически Подъём на голосе Лимитер всегда последний Остальным Opus, 20 мс Профиль по первой секунде речи Это голос? VAD, высота тона, запас Что убрал очиститель и в какой полосе Уровень шума, измеряется непрерывно самое тихое за последнее время, а не среднее звук сведения первым, иначе эхо пройдёт дальше последним, иначе это не лимитер Порядок ступеней взят из кода, а не упрощён для картинки.
Каждый отсчёт идёт по зелёному пути и именно в этом порядке. Оранжевые блоки никто не слышит: это измерения, снятые с сигнала, которые меняют поведение следующих ступеней. Об этом стоит помнить, читая панель диагностики: проверка на голос ничего не убирает, она только решает, открыть ли гейт.
Тот же тракт в трёх условиях, ради которых он сделан Три строки, по одной на условие. Слева то, что слышит микрофон, справа то, что получают остальные. На стоянке фон — тонкая полоса, и речь проходит почти нетронутой. На скорости ветер даёт толстую полосу, которой на переданной стороне уже нет. На светофоре рядом с работающими моторами полоса ещё толще, и её тоже нет. Ступени во всех трёх строках одинаковы, разный только профиль, выбранный по измеренному отношению сигнал/шум. что слышит микрофон что получают остальные Стоя или в помещении сигнал/шум выше 35 дБ Ветер на скорости от 20 до 35 дБ Моторы на светофоре ниже 20 дБ Слабое Обычное Шлем фон речь Ступени во всех трёх одни и те же. Разный только профиль.
Формы здесь условные, а не снятые с реальной записи: в таком размере настоящая превратилась бы в серое пятно, а важно тут другое — какую полосу тракт убирает, а какую оставляет. «Автоматически» выбирает профиль по отношению сигнал/шум в первую секунду после открытия гейта и пересматривает выбор, когда фон заметно падает. Промежутки внутри строки — это не закрытая передача: гейт держится открытым ещё секунду, и именно поэтому одна фраза не приходит тремя обрывками.
Как голосовая активация открывает и закрывает передачу Три дорожки одна над другой. Слово звучит с 200-й по 560-ю миллисекунду. Детектор уверен в нём только с 250-й по 520-ю: он теряет первый согласный и отпускает раньше последнего. В эфир уходит отрезок с 200-й по 720-ю: упреждение в 240 мс возвращает начальный согласный, а секундный хвост доносит конечный и перекрывает паузы внутри фразы, затухая на последних 30 мс. Вы говорите Детектор В эфир s t речь обнаружена идёт передача упреждение 240 мс хвост 1 с затухание 30 мс
Порог принимает решение посреди слога. Задержка звука на 240 мс позволяет открыть передачу на том звуке, который привёл к решению, — и начальный согласный сохраняется; секундный хвост доносит конечный и затухает в самом конце, чтобы не щёлкнуло.

Когда телефон не справляется

Блок звука приходит каждые 10 миллисекунд, и весь тракт должен успеть отработать до прихода следующего. На современном телефоне запас есть, на устаревшем или бюджетном — нет, и делать вид, что это не так, бессмысленно.

Поэтому устройство измеряется по этому сроку при запуске, ещё до первого разговора, и за ним следят дальше, пока вы говорите. Если тракт не укладывается, ступени отключаются по одной — в порядке, который был измерен, а не придуман, и никогда молча.

Тогда же очиститель речи замеряют и отдельно: он единственный настолько велик, что способен решить всё сам по себе. Телефону, у которого одна только модель занимает 4 мс из десяти, негде разместить семь ступеней после неё — что бы ни показывала общая сумма на устройстве, которое пока не в разговоре. Поэтому он сразу берёт модель подешевле, а не спускается через одиннадцать других ступеней, чтобы спустя разговор оказаться там же.

Чем жертвует медленное устройство и в каком порядке Восемь ступеней, спускающихся слева направо. Сначала слабеет очиститель речи, затем перестаёт выплачиваться упреждение, затем вдвое укорачивается фильтр эхоподавителя, затем отключаются три дешёвых детектора, затем отрисовка панели диагностики, затем её живые индикаторы и полоски, затем берётся более дешёвая модель шумоподавления, и в самом конце очиститель выключается совсем. очиститель слабеет упреждение стоит фильтр эха вдвое дешёвые детекторы отрисовка панели индикаторы замирают модель попроще без очистителя жертвуют первым жертвуют последним сначала — то, что дешевле по качеству
Порядок измерен, а не придуман. Две самые дешёвые по качеству уступки дают и самую большую экономию, а то, что стоит дороже всего — очиститель речи, превращающий 1,5 дБ разницы в 16 дБ, — пробуют последним, а не первым.

Первым жертвуют тем, что дешевле всего обходится по качеству. Очиститель речи сначала дважды слабеет — это две самые крупные экономии на всём тракте, и стоят они почти ничего: на голосе поверх музыки первая из них измерилась даже лучше полного режима. Дальше перестаёт выплачиваться упреждение — ни один отсчёт от этого не меняется, растёт только задержка, возвращаясь к прежней. Дальше вдвое укорачивается фильтр эхоподавителя: громкий прямой путь остаётся, теряется примерно 10 мс хвоста за ним. Дальше три детектора, работу которых во многом дублирует измерение уровня. Дальше отрисовка самой панели диагностики: её не жалко, через неё ничей голос не проходит. Дальше остальная «живость» панели — движущиеся индикаторы и полоски собеседников — по той же причине. Дальше более дешёвая и более агрессивная модель шумоочистки. Полное отключение очистителя — тринадцатое и последнее, что будет сделано, потому что именно он превращает 1,5 дБ разницы между речью и паузами в 16.

Ниже лестницы остаётся ещё одно. Если всё, что выше, уже отключено, а блоки всё равно опаздывают, тракт смотрит, на что на самом деле уходит время. Подавление эха — единственная ступень, стоимость которой задаёт не ваш телефон, а собеседник: пока на той стороне молчат, она почти ничего не делает. Поэтому на редком устройстве, где блоки не укладываются именно из-за неё, её фильтр укорачивают ещё раз, шагами, пока он не покроет только прямой путь — самый громкий — и ничего сверх того. Совсем её не выключают: на громкой связи это самовозбуждение, а защита, которая его бы поймала, отключена одиннадцатью ступенями раньше.

Обратно в течение сеанса тракт не поднимается. Устройство, которое опоздало однажды, опоздает и снова, а тракт, включающий и выключающий ступени вслед за нагрузкой, звучал бы хуже любого из двух состояний. Перезапуск приложения пробует весь тракт заново.

И вам об этом говорят. Отключённые ступени в панели диагностики зачёркнуты, значок на панели инструментов превращается в жёлтое предупреждение — чтобы вы узнали, не идя специально смотреть, — а сама панель словами объясняет, что именно отключено и чего это стоит.

Панель диагностики после того, как тракт урезали: в панели
              инструментов жёлтое предупреждение, вместо анализатора — надпись,
              что он отключён, в списке ступеней зачёркнуты «Подавление шума»,
              «Обратная связь» и «Очистка», очиститель речи показывает
              «Выключен», а предупреждение говорит, что весь тракт потянуло бы
              более мощное устройство.
Низ лестницы — и панель, которая об этом говорит.

Что стоит иметь в виду: измеряется устройство таким, каким оно попалось, а не таким, каким могло бы быть. Компьютер, занятый в момент запуска чем-то ещё, может начать на ступень ниже, чем он же на холостом ходу.

Смотрите, как всё работает

Большинство голосовых приложений не показывают ничего. Человек жалуется, что его обрезало, — и выяснить, на какой ступени это произошло, просто нечем.

В MumbleWay есть панель диагностики с живым анализатором спектра: сразу три кривые — микрофон, сигнал после шумоподавления и то, что реально уходит в эфир, — и по индикатору на каждую ступень тракта. Полезнее всего тот момент, когда кривая передачи ложится в ноль, а две другие нет.

Ещё он умеет записывать то, что услышал микрофон, вместе с тем, что тракт об этом решил, блок за блоком. Тогда запись, на которой пропал звук, можно разобрать, а не гадать. Появилось это не от хорошей жизни: однажды целый круг измерений пришлось выбросить, когда выяснилось, что записи сделаны встроенным микрофоном телефона, а не гарнитурой. По самому звуку не понять, чем он записан, — а запись изнутри приложения берёт то, что получил сам тракт.

Панель диагностики в момент, когда речь обнаружена: три кривые,
              кривая передачи закрашена, индикаторы речи, гейта и отправки на
              сервер зелёные.
Речь обнаружена и уходит в эфир.
Та же панель без речи: кривая передачи легла в ноль, подпись
              «не передаётся», индикаторы речи, гейта и отправки красные.
Речи нет: кривая передачи ложится в ноль, а две другие нет.
Главный экран на iPhone, подключён к публичному серверу: время
              обхода по UDP, кто в канале, список каналов и индикатор
              микрофона.
Подключено: задержка, канал и индикатор.

На компьютере то же самое выглядит как окно из двух панелей: слева ваши серверы, справа канал и те, кто в нём.

MumbleWay на Windows: слева сохранённые серверы с задержкой и
         временем обхода по UDP, справа канал и его участники, внизу
         индикатор микрофона.
Windows, подключено. То же приложение, которому дали развернуться.
Панель диагностики на Windows: анализатор с отмеченными на нём
         порогом открытия шумоподавителя и уровнем шума, оценка фона и
         выбранный по ней профиль, индикаторы ступеней и ступень очистителя
         речи, а под ними четыре колонки счётчиков — по входящему звуку, по
         устройству, по тому, куда уходят 10 мс блока, и по серверу.
Панель диагностики: в широком окне все счётчики видны сразу, а не столбиком.
MumbleWay на macOS, подключено к публичному серверу: слева
              карточка сервера, у которой путь голоса отмечен жёлтым как
              «Туннель TCP», справа двое в канале и дерево каналов, внизу
              живой индикатор микрофона.
macOS. Здесь написано TCP, а не UDP: сеть не пропускала голосовой порт — и приложение об этом говорит, а не начинает молча звучать хуже.

Достоинства

Дальность не ограничивает

Тех, кого развела пробка, перекрёсток или граница, разговор по-прежнему держит вместе. Интеркому это не под силу ни за какие деньги.

Ваш сервер — ваши правила

Подойдёт любой сервер Mumble — хоть поднятый дома на Raspberry Pi. Регистрироваться негде и незачем, и в публичных каталогах ваш канал не появляется.

Больше двух человек

В канал Mumble заходит столько людей, сколько разрешит сервер, — и без цепочки промежуточных звеньев, на которой держатся (и разваливаются) групповые интеркомы.

Он показывает свою работу

Живой анализатор, состояние каждой ступени и записи, где рядом со звуком лежат все принятые по нему решения.

Ничего не собирается

Ни учётных записей, ни аналитики, ни рекламы, ни телеметрии. Звук нигде не сохраняется, пока вы сами не включите запись. См. политику приватности.

Свободное ПО

GPL v3, открытый исходный код и общий документированный протокол — тот же, на котором говорят другие клиенты, а не протокол одной фирмы.

Недостатки

Стоит прочитать, прежде чем на него полагаться. Всё перечисленное — правда, и ни один пункт не лечится настройкой.

Нет связи — нет разговора

Это главная слабость. В низине, в тоннеле и в мёртвой зоне интерком работает, а это — нет. Если вы ездите в основном по глухим местам, интерком подойдёт лучше, а это будет дополнением к нему.

Он тратит трафик и батарею

Примерно 3–6 МБ на час разговора, больше — когда на плохой связи растёт коррекция ошибок. Телефон, который часами гонит голос через мобильную сеть с выключенным экраном, греется заметно сильнее обычного.

Задержка сетевая, а не как у радио

Сам тракт добавляет немного — упреждение выплачивается до 200 мс, — а вот сеть добавляет: рассчитывайте на пару сотен миллисекунд при хорошей мобильной связи и больше при плохой, тогда как у интеркома между соседними шлемами задержки почти нет. Разговаривать это не мешает, а вот перебить собеседника на полуслове выходит уже не так, как вживую.

Bluetooth ухудшает качество звука

Микрофон гарнитуры доступен только через профиль hands-free, а он моно и узкополосный. Пока идёт разговор, музыка через ту же гарнитуру звучит в телефонном качестве. Так устроен сам Bluetooth, а не это приложение: то же самое происходит при любом звонке.

Нужен сервер

Никакой службы MumbleWay, где можно было бы зарегистрироваться, не существует. Кто-то в группе должен поднять сервер Mumble или арендовать его — это осознанный выбор, и всё же шаг, которого интерком ни от кого не требует. Это занимает минут десять.

Музыка изредка может открыть передачу

Это был главный недостаток приложения, а стал сноской. Речь поверх собственной музыки проходит теперь в 98% случаев вместо 63%, а очиститель убирает 19 дБ из пауз между словами: там, где музыка была на полтора децибела тише речи, теперь она тише на шестнадцать. В поездках с тех пор музыка открывает передачу лишь изредка, и то, что проходит, уходит сильно приглушённым, а не в полный уровень.

Нулём это всё же не стало, и причину стоит знать: детектор учили отличать речь от шума, а музыка — ни то ни другое. Режим по кнопке убирает саму возможность, если нужна гарантия, а работа идёт в открытую, вместе с описанием каждой уже провалившейся попытки.

Что дальше

Настройки

Что делает каждая настройка и какие из них действительно важны в поездке.

В дороге

Что работает на практике: вдвоём, группой, с пассажиром, на слёте.

Свой сервер

Сервер Mumble на Windows, macOS или Linux примерно за десять минут.