Визначення BPM силами користувача — яке працює
Ось так виглядає UI визначення BPM
Отже… як же ж його допомогти користувачу визначити темп пісні?
Я залишив модель “теп на раз”, але з ключовою різницею.
Перша ітерація бачила послідовність тепів як сигнал, який ми перетворюємо на BPM. Більше тепів — краще сигнал… це якщо тепи чіткі. Але більше тепів — більше шансів на помилку. Особливо тому, що пісня — це не бій метронома, та не кожний “раз” ти почуєш однаково.
Оскільки характер пісні змінюється, фактично в нас є шанс задати чітку послідовність, тільки поки грає куплет чи приспів, чи інша рівномірна частина. Розумієш — в моделі “послідовність тепів” є практична стеля якості.
Тому я знайшов іншу модель. Пісня містить послідовність “разів”, та наша задача — її викрити. Тепати можна в будь-який “раз” - не обовʼязково в кожний. Всі “рази”, який відмітить користувач, додають інформації: між двома “разами” завжди є кратний проміжок.
Тоді користувач вільний обрати ті “рази”, де їх добре чути. І від того сигнал стає чистішим!
Ба більше, виходить, що формула впевненості значно виграє, якщо в нас є тепи з початку та з кінця пісні. Бо та ж похибка на великому проміжку значить менше! А оце вже зовсім інший досвід!
Бо раніше було навпаки: навіть маленька похибка в тепах могла протягом цілої пісні повністю зсунути ритм. Тоді доводилося старатися та бути чіткіше. І це я розумів, а як пояснити простому користувачеві?
Можливо, я ще перероблю цей UI, щоб більше спрямовувати користувача до правильних дій — як-от визначення “раз” на початку та кінці пісні. Але в цілому — вже задоволений.