Takafumi Horiuchi

Метроном с пульсом

Обзор

Круг в центре экрана пульсирует в тот же момент и с той же силой, что и щелчок. Я создал метроном для iPhone без рекламы, учётных записей и экрана настроек.

Экран метронома. Белый круг в центре чёрного экрана, четыре точки долей над ним и 120 BPM с −/+ под ним. На каждой доле круг увеличивается и возвращается к исходному размеру.
Этот экран работает прямо на странице по тем же формулам, что и приложение (120 BPM, четыре доли в такте). Коснитесь круга, чтобы остановить его.

Я сделал его для собственных занятий на тенор-саксофоне. Открыл — и можно сразу начинать; даже если звук плохо слышен, доли остаются видны. Всё, от замысла и дизайна до реализации на SwiftUI и синтеза щелчков, я сделал сам.

Управление — коснуться того, что хочешь изменить

На экране только точки долей, круг и число темпа. Ни меню, ни пояснений: меняешь сам объект, касаясь его.

Экран в остановленном состоянии. Светло-серый круг с треугольником воспроизведения, четыре точки сверху, 120 BPM и −/+ снизу, маленький ⓘ в левом верхнем углу.
ⓘ
Открывает страницу поддержки.
Точки
Касание добавляет долю (1–7). Проведите пальцем, чтобы увеличить или уменьшить их число.
Круг
Касание запускает или останавливает. Удерживайте, затем отбивайте ритм композиции, чтобы задать темп.
Числа
Перетаскивайте для ускорения или замедления. Медленное движение даёт точную настройку. −/+ меняет значение на единицу.
Экран в остановленном состоянии. Единственный текст на нём — числа и «BPM».

Пульс — тот же момент, та же сила

Круг увеличивается, когда звук достигает уха, а не когда отправляется на выход. Задержка Bluetooth-наушников около 0.1–0.3 секунды компенсируется по данным о выходной задержке, которые сообщает iOS. Размер расширения пропорционален громкости щелчка: на первой доле звук выше и громче, а круг увеличивается заметно сильнее.

График щелчков и размера круга за такт из четырёх долей. Кривая сразу растёт с каждым щелчком: до 1.25 исходного размера на первой доле и до 1.15 на долях 2–4, затем немного опускается ниже 1 и возвращается.
Щелчки (заливка) и размер круга (линия) за один такт при 120 BPM, четыре доли в такте. Круг достигает максимума через 0.02 секунды после звука, сжимается чуть сильнее нужного, как желе, и замирает.

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

Темп касаниями — тишина, пока отбиваешь ритм

При долгом нажатии круг начинает дрожать, как желе. Касайтесь его в ритме композиции или темпа в голове: в месте касания появляется вмятина, круг колышется и восстанавливается. Вибрация передаёт темп обратно вам.

Шесть кадров контура после одного касания верхнего края. Вмятина появляется на 0.03 секунды, возврат начинается на 0.08; на 0.17 и 0.3 круг слегка деформируется по вертикали и горизонтали, а на 1.3 снова становится круглым.
Контур после одного касания верхнего края, построенный по тем же формулам, что и в приложении. Пунктир показывает идеальный круг.
Версия приложения для разработки. В режиме ввода темпа круг серый. Ниже открыта японская панель «Настройка желе» с ползунками и пояснениями, в том числе «Упругость (скорость колебаний): 3.6 цикла/секунду» и «Вязкость (затухание): 0.10».
Я настраивал колебания в панели, доступной только в версии для разработки. Менял ползунками десять значений, включая упругость и вязкость, и касался круга, проверяя ощущения. Сравнив варианты «пудинг», «варабимоти» и «более жидкий», выбрал по умолчанию «желе»: живой отскок, затихающий примерно за 0.9 секунды.

Во время касаний звук намеренно отсутствует. Немедленный звуковой отклик пришёл бы через Bluetooth с задержкой и наложился на щелчки метронома. Когда касания прекращаются, щелчки в заданном темпе начинаются почти неслышно и за шесть секунд достигают обычной громкости.

После пяти касаний точки вибрации постепенно уменьшаются, а столбики щелчков за шесть секунд вырастают от почти неслышного уровня.
Пять касаний при 120 BPM, затем остановка. Снизу вверх: касания, вибрация (меньше — слабее), щелчки (выше — громче). Громкость растёт равномерно в децибелах, без резкого скачка от едва слышного звука.

Звук — выбрать на слух высоту, не теряющуюся за саксофоном

Щелчки синтезируются из синусоид, без аудиофайлов. Я сделал страницу для сравнения и провёл три сравнительных прослушивания через динамик iPhone, играя на тенор-саксофоне. Выбрал 1875 Hz и 1250 Hz — в 1.25 раза выше исходных частот: выше самой сильной области саксофона и ниже области, склонной звучать пронзительно.

Ось частот от 100 Hz до 10 kHz. Диапазон тенор-саксофона занимает нижнюю часть, пронзительная область находится на 2.5–4 kHz. Щелчки 1250 Hz и 1875 Hz расположены между ними; исходные 1000 Hz и 1500 Hz обозначены пунктиром.
Заливка показывает область концентрации энергии тенор-саксофона (слабее вправо), штриховка — пронзительные 2.5–4 kHz. Пунктиром показаны исходные звуки (1000/1500 Hz), сплошными линиями — выбранные. Высота линии означает громкость.

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

Убрать лишнее — что я не включил

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

Реклама, отслеживание и аккаунты
Решено с самого начала. Приложение само не инициирует сетевые обращения.
Экран настроек
Всё происходит на одном экране.
Выбор тембров
Двух звуков, для акцентированных и неакцентированных долей, достаточно. Варианты порождают сомнения.
Ползунок громкости
Достаточно кнопок громкости устройства.
Светлая тема
Только один чёрный экран.
Восемь долей и больше
12/8 считаем в четыре доли, 9/8 — в три.
Деление долей (восьмые, триоли, шестнадцатые)
Не обязательно для работы приложения. Первый кандидат на будущее дополнение.
Ввод темпа числом
Достаточно −/+ и перетаскивания.

Реализовано на SwiftUI без сторонних библиотек. Работает на iPhone с iOS 17 и новее. Английское название — No Ads Simplest Metronome. Готовлю публикацию в App Store (сентябрь 2026). Полная инструкция и политика конфиденциальности размещены на странице поддержки (на английском).