Alternate
Alternate превращает Android-телефон в USB MIDI-падд для osu!. Весь экран — одна кнопка, и каждое касание отправляет одну из двух нот, чередуя их. Один палец выдаёт то самое попеременное нажатие двух клавиш, которое нужно для стрима, — на скорости, недостижимой одной клавишей.
Это вся идея, и больше приложение ничего не делает.

Почему MIDI
Потому что osu!lazer понимает его нативно. Не нужен ни мост, ни драйвер, ни утилита для переназначения клавиш: телефон появляется как MIDI-устройство, и игра читает его как клавиатуру. Один кабель, одна галочка в настройках ввода.
Обратная сторона решения — iOS. Айфон не умеет притворяться USB MIDI-устройством вовсе; остаются Network MIDI по Wi-Fi и Bluetooth LE MIDI, а они добавляют задержку и джиттер, которые на двухстах ударах чувствуются рукой. Логика портировалась бы за вечер, а то единственное, ради чего приложением стоит пользоваться, — нет.
Одно число
Всё внутри построено вокруг времени от стекла до провода.
MIDI-нота уходит первой: движок определяет ноту, и байт оказывается на проводе раньше, чем тронуто хоть одно состояние анимации. Расчёт темпа идёт потом, в кадровом цикле. На горячем пути нет аллокаций — состояние движка это примитивные массивы, буфер сообщения выделен один раз, пулы частиц кольцевые: нет мусора, значит, нет паузы сборщика посреди стрима. Отправка синхронная, в потоке касания, потому что передача записи в другой поток добавила бы к задержке планирование и ничего не дала бы взамен.
Интервалы меряются по часам самого события ввода, а не по времени обработчика: занятый UI-поток не должен искажать темп. На Android 13+ доставка касаний небуферизованная, и это экономит до кадра. Самый быстрый режим экрана запрашивается на старте — больше кадров в секунду означает и более частый опрос сенсора.
Настроек ровно столько, сколько нужно, чтобы падд сошёлся с игрой и с пальцем. Дребезг в 12 мс отсекает двойное срабатывание от переката пальца и при этом ничего не съедает: реальный альт-тап в двадцать касаний в секунду — это период в 50 мс.

Шкала
На падде три числа: серия, темп и всего касаний. Темп показан ещё и столбиком ячеек, и эта шкала нарочно не линейная.
Ниже ста никто не стримит, поэтому линейные 0–260 тратили бы нижнюю треть впустую и отдавали бы несколько пикселей тому диапазону, который и решает, пройдёшь ты карту или нет. Каждая зона получает долю шкалы по своей важности: разогрев до 140 — первая треть, рабочий темп до 200 — вторая, всё выше делит остаток. 220 оказывается у самого верха, и «за пределом» выглядит именно так.
Шкала одноцветная. Высота и так говорит всё, а градиент поверх неё был вторым голосом, повторяющим то же самое.
Взять себе
Приложение лежит на GitHub под MIT. Нужны Android 7.0 с поддержкой USB MIDI, кабель для передачи данных — не «только зарядка» — и osu!lazer на компьютере. Без кабеля падд тоже открывается: кнопка вместо START читается DEMO, MIDI никуда не уходит, а пощупать ощущение можно.

Движок, расчёт темпа и шкала лежат отдельным модулем без единого Android-импорта. Это и есть то, что позволяет проверять интересную часть без телефона.
05.09.2026