PhoneMic
PhoneMic превращает Android-телефон в микрофон для Windows. Телефон слушает, компьютер принимает звук по Wi-Fi или по USB-кабелю, а Discord, Zoom, OBS и любая другая программа видят его как обычный микрофон. Сопряжение делается один раз, по QR-коду, дальше это одно касание на телефоне.
Похожие приложения уже есть, и подводят они обычно в двух местах: связь через какое-то время отваливается, а чтобы её завести, надо повозиться. PhoneMic сделан вокруг того, чтобы не делать ни того, ни другого.

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

Волна — не анимация из файла, а одна закрученная лента из тридцати четырёх
тонких линий. Каждая линия смешивает две формы волны, cos θ · f(x) + sin θ · g(x), и θ шагает поперёк пучка. Где обе формы проходят через ноль, линии
стягиваются в узел, в остальных местах расходятся веером — отсюда объём. Всё это
рисуется дважды, сложением цвета: широко и бледно для свечения, потом тонко и
ярко. Выключенная, лента схлопывается в тусклую нить, пока идёт подключение —
дышит.
Оба приложения чисто чёрные: на OLED-экране чёрный пиксель не светится вовсе.
Две дороги
По Wi-Fi звук идёт по UDP, пакетами по 10 мс, по одному пакету на датаграмму.
По USB — по TCP через adb reverse, и телефон стучится на 127.0.0.1. Для
кабеля хватает включённой отладки по USB: программа на компьютере сама
пробрасывает порт для каждого подключённого телефона и чинит проброс, если
какая-нибудь другая программа перезапустила adb-сервер.
Телефон всегда сначала пробует кабель. Выдернул кабель — поток сразу уходит на Wi-Fi. Вставил обратно — через несколько секунд, когда понятно, что кабель остаётся на месте, возвращается на USB. Микрофон между этим не выключается.
Компьютер в сети телефон ищет по всем адресам, которые были в QR-коде, а если ни один не ответил — широковещательным приветствием. Роутер выдал компьютеру новый IP — сопряжение от этого не ломается.
Чтобы связь не умирала вместе с экраном, запись идёт в фоновом сервисе с блокировками сна и Wi-Fi: Android не может ни заглушить приложение, ни усыпить радио. Если связь всё-таки оборвалась, обе стороны поднимают её сами. Три секунды тишины от другой стороны считаются обрывом, и телефон снова начинает здороваться, пока не достучится.
По кабелю задержка около 30 мс, по Wi-Fi — 50–100.
Буфер
Wi-Fi доставляет пакеты неровно, и вся сложность PhoneMic живёт в буфере на компьютере, который это неровное прячет.
У каждого пакета есть порядковый номер, а значит, известно, когда он пришёл бы в идеальной сети. Самый ранний недавний приход — точка отсчёта, опоздание — на сколько пакет от неё отстал. Точка отсчёта медленно ползёт вверх, на полмиллисекунды в секунду: так телефон, чьи часы идут чуть медленнее компьютерных, не принимается за растущий джиттер.
Худшее опоздание буфер помнит долго, потому что сбои Wi-Fi ходят волнами, но с потолком. Полсекундную паузу вроде сканирования сетей буфером не спрячешь, не сделав запаздывающим каждый звонок, поэтому ей разрешено один раз щёлкнуть.
Разницу между тем, сколько звука в буфере есть и сколько нужно, он добирает так, чтобы не было слышно. Основную работу делают паузы в речи: звука лишнего — тихие куски по 5 мс выбрасываются, не хватает — пауза растягивается на 5 мс. Сигналу без пауз остаётся скорость воспроизведения, которую буфер подгоняет не больше чем на 1%. Если звук всё-таки кончился, он затухает, а не обрывается щелчком.
Режимов три: «Мин. задержка» на 20–40 мс для кабеля или отличного Wi-Fi, «Баланс» по умолчанию, обычно 50–100, и «Надёжный» на 100–150 для забитой или слабой сети.
Проверка без голоса
Протокол записан в документе вместе с точными байтами эталонных пакетов, и обе стороны, Kotlin и C#, проверяют в тестах именно эти байты. Поменяешь формат на одной — тесты упадут на другой.
Буфер гоняется на виртуальных часах против симуляции сети: десять минут плохого
Wi-Fi с расходящимися часами проходят за несколько секунд. Для проверки всей
цепочки никому не надо говорить в микрофон: в отладочном режиме телефон играет
тон 1 кГц, а probe записывает то, что выходит из виртуального кабеля, и
сообщает частоту, уровень и пропуски.
Взять себе
Windows не умеет превращать звук программы в микрофон без драйвера, поэтому PhoneMic выводит звук в VB-Audio Virtual Cable — бесплатное виртуальное аудиоустройство. Его второй конец, CABLE Output, и есть микрофон, который выбирается в Discord, Zoom или OBS.
Приложение лежит на GitHub под MIT,
сборки — в последнем релизе:
.apk для телефона и .exe для компьютера. Нужны Windows 10 или 11 с
VB-Audio Virtual Cable и Android 8.0 с сервисами
Google Play — для встроенного сканера QR. Для Wi-Fi телефон и компьютер должны
быть в одной сети, для кабеля — отладка по USB на телефоне и adb на
компьютере.

Ни аккаунта, ни облака, ни аналитики: звук идёт с телефона прямо на компьютер. Шифрования нет — код в QR не даёт чужим устройствам случайно влезть в микрофон, но от того, кто слушает сеть нарочно, не защищает. В чужой сети — кабель.
01.10.2026