Tabify на Мак вышел, Windows до сих пор снится в кошмарах: продолжение истории про приложение для музыкантов
Привет Пикабу! Недавно я рассказывал как полгода плясал с бубном вокруг Tabify, редактора табов для музыкантов. Вышла версия для macOS. И у меня для вас неожиданная новость: это было проще, чем Windows. Намного проще.
Как звук устроен в Windows. Ну, или как он «устроен»
Когда делаешь приложение где гитара подключается к компьютеру, звук обрабатывается в реальном времени и висят VST-плагины, тебе нужна минимальная задержка. Если между щипком струны и звуком в наушниках проходит больше ~10 мс, играть невозможно. Ощущение, будто звонишь себе по межгороду.
В Windows для работы со звуком есть, внимание:
MME: древний, как мамонт, и примерно такой же быстрый;
DirectSound: чуть моложе мамонта;
WASAPI: современный, у него два режима, shared и exclusive, и ведут они себя как два разных человека;
ASIO: правильный путь для музыкантов, только это вообще не часть Windows. Это сторонний стандарт, и драйвер под него пишет производитель звуковой карты. Как умеет.
Выбрали ASIO, потому что музыкантам на windows нужен именно он. Дальше началось кино. У каждой звуковой карты свой драйвер со своими представлениями о прекрасном. Одна карта честно отдаёт стерео-вход, другая отдаёт 8 каналов, из которых живые два, и угадай какие. Частота дискретизации в программе одна, в драйвере другая. Буфер выставили, драйвер сделал вид, что согласился, и молча поставил свой.
В истории коммитов этого периода у нас реально лежат подряд:
В истории коммитов этого периода у нас реально лежат подряд:
ASIO Fixes
ASIO FIXES
ASIO config fixed
ASIO: optimization, Stereo input reworked...
А вишенка на торте это VST-плагины. Плагин - это чужой код, который грузится прямо в твою программу и работает со звуком в реальном времени. Если он что-то делает не так, а под Windows вместе с кривым ASIO-драйвером это случается, можно поймать не просто вылет, а синий экран. У нас был коммит с честным описанием: «загрузка сохранённых VST отключена - пока что случается BSOD». Синий экран. От табулатуры. В 2026 году.
Отдельная песня это окна плагинов. Многие VST рисуют свой интерфейс через старый оконный цикл Windows. Пока пользователь крутит ручку в окне плагина, наш поток может, скажем так, задуматься о вечном. Пришлось выделять под плагины отдельный поток и учить его не зависать после модальных окон.
А что на маке?
На маке есть CoreAudio. Один. Его используют все, от системных звуков до профессиональных студий. Задержка низкая из коробки, драйверы у большинства звуковых карт либо не нужны вообще (class compliant), либо сделаны прилично, потому что вариантов нет. Частоты, буферы, каналы - всё через одно API, которое ведёт себя одинаково.
Подключил движок, выбрал устройство и работает. Я сидел и ждал подвоха минут сорок. Подвоха не было.
Плагины тоже, на маке помимо VST3 есть AudioUnit, родной формат Apple. Написали сканер для AU, подцепили окна VST - и, что удивительно, ничего синим не загорелось.
«Но ведь не бывает так, чтобы всё было хорошо»
Не бывает. Мак отыгрался на другом, и всё это не про звук, а про «Apple лучше знает»:
Подпись и нотаризация. Без них macOS просто не даст запустить приложение, скажет «повреждено, выбросите в корзину». Чтобы подписать сборку, надо сидеть физически за маком или хотя бы в удалённом рабочем столе. По SSH Apple подписывать не даёт никогда, даже если очень попросить.
Плавающая панель падала, если у приложения нет разрешения «Универсальный доступ». Не «не работала», а именно падала.
Установщик ставил приложение не туда. Пришлось убеждать его, что программы живут в /Applications.
В полноэкранном режиме пропадала кнопка входа. Потому что почему бы и нет.
Но знаете что? Это всё лечится за вечер. ASIO лечился месяцами.
Дальше Linux и телефоны
Linux уже в работе, и, если честно, сам я сижу на Fedora, так что это личное. Движок под Linux собирается и запускается, плагины находятся. Тут свой формат, LV2, и для него есть библиотека lilv, которая их ищет. Ещё пришлось повоевать с окном, которое на Linux поначалу открывалось прозрачным. Буквально. Приложение запущено, а окна нет. Призрак табулатуры. Приятным бонусом оказалось что все плагины с windows работающие через yabridge сразу просканировались и подхватились.
Отдельное спасибо GStreamer, который без полного набора плагинов в AppImage отказывался проигрывать звук и даже не говорил почему.
Мобилка. Android-сборка уже собирается, у неё даже есть иконка (это важно, без иконки не считается). Понятно, что VST на телефоне не будет. Но открыть табы, посмотреть, послушать, позаниматься с метрономом в автобусе, вот это хочется.
Если вы играете на маке, заходите на tabify.ru и пробуйте. Если на Linux, напишите в комментах, какой у вас дистрибутив и звуковая подсистема (PipeWire? JACK? «Не знаю, просто работает»?), это реально поможет тестированию.














