WristBeat

Project

WristBeat

WristBeat: Haptyczny metronom na watchOS

Implementacja Core Haptics w SwiftUI

Metronom na Apple Watch, który nie klika w słuchawkach ani na głośniku. Rytm czuć na nadgarstku, a tempo można zmieniać bez wyciągania telefonu.

WristBeat main screen
WristBeat presets

O projekcie

Chciałem sprawdzić, czy Apple Watch może działać jako metronom, który nie przeszkadza innym muzykom i nie walczy z odsłuchem. Najtrudniejsze było utrzymanie równego pulsu przy wygaszonym ekranie i zmieszczenie sterowania w bardzo małym interfejsie.

Najważniejsze elementy

Integracja Core Haptics

Różne wzory wibracji rozróżniają akcent i słabsze części taktu, dzięki czemu rytm da się czytać bez patrzenia na ekran.

Obsługa Digital Crown

Tempo zmienia się pokrętłem zegarka. To wygodniejsze na scenie lub próbie niż trafianie palcem w małe przyciski.

Algorytm Tap Tempo

Tap tempo liczy tempo z kilku ostatnich uderzeń, więc można szybko złapać BPM utworu bez ręcznego wpisywania wartości.

Background Execution

Metronom działa po wygaszeniu ekranu, korzystając z WKExtendedRuntimeSession i audio session do utrzymania pracy w tle.

Wyzwania i rozwiązania

Problem

Standardowe timery w watchOS mogą być nieprecyzyjne przy wygaszonym ekranie ze względu na oszczędzanie energii.

Rozwiązanie

Implementacja AVAudioSession w połączeniu z pętlą o wysokim priorytecie, aby utrzymać stabilność rytmu niezależnie od stanu urządzenia.

Stack technologiczny

LanguageSwift 5
UISwiftUI (100% declarative)
FrameworksWatchKit, Core Haptics, AVFoundation
ArchitectureMVVM
ToolsXcode, TestFlight