Takafumi Horiuchi

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

Обзор

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

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

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

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

Элементы управления — точки долей, круг и значение темпа. Меню и текстовых инструкций нет: коснитесь того, что хотите изменить.

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

Пульс: согласовать время и интенсивность с каждым щелчком

Пульсация круга согласуется по времени со щелчком с учётом выходной задержки, которую сообщает iOS. Bluetooth-наушники могут вносить задержку примерно 0,1–0,3 секунды. Величина расширения пропорциональна громкости щелчка: на первой доле звук выше и громче, а круг увеличивается заметно сильнее.

График щелчков и размера круга за такт из четырёх долей. С каждым щелчком круг увеличивается: до 1,25 исходного размера на первой доле и до 1,15 на долях 2–4. Затем он ненадолго сжимается чуть меньше исходного размера и возвращается в состояние покоя.
Щелчки (заливка) и размер круга (линия) за один такт при 120 BPM, четыре доли в такте. Круг достигает максимального размера через 0,02 секунды после начала щелчка, затем, подобно желе, сжимается чуть меньше исходного размера и возвращается в состояние покоя.

Поток обработки аудио планирует каждую долю с точностью до отсчёта. Расчёт времени не накапливает погрешность: даже через час непрерывного воспроизведения отклонение остаётся в пределах 0,5 отсчёта.

Область применимости и условия расчёта значения 0,5 отсчёта ещё требуют подтверждения. Это значение не следует понимать как оценку момента, когда звук достигает слушателя, или точности синхронизации с экраном.

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

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

Шесть кадров, показывающих контур круга после одного касания его верхнего края. Через 0,03 секунды сверху появляется вмятина, через 0,08 начинается возврат, через 0,17 и 0,3 круг слегка деформируется по вертикали и горизонтали, а через 1,3 секунды снова становится круглым.
Контур после одного касания верхнего края, построенный по тем же формулам, что и в приложении. Пунктир показывает идеальный круг.
Версия приложения для разработки. В режиме ввода темпа касаниями круг серый. Ниже — панель «Настройка желе» на японском языке с ползунками и пояснениями, в том числе «Упругость (скорость колебаний): 3,6 цикла в секунду» и «Вязкость (затухание колебаний): 0,10».
Я настраивал колебания в панели, доступной только в версии для разработки. Менял ползунками десять параметров, включая упругость и вязкость, и касался круга, чтобы ощутить результат. Сравнив варианты «пудинг», «варабимоти» и «более жидкий», я выбрал по умолчанию «желе»: живой отскок, затихающий примерно за 0,9 секунды. Панель на снимке — на японском языке.

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

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

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

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

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

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

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

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

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

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