Love for learning apps.
by•
I love building app since I was a kid, now with AI its easier than ever.
Day 6 will be my fully app pandeiro.app launch https://www.producthunt.com/products/pandeiro-app?launch=pandeiro-app

Hope to be brining some stunning apps. First I'm focusing fully on the PANDEIRO instrument.

Now I'm building a full simulation of the 3D pandeiro !
15 views
Replies
Welcome, André, and good luck on launch day! Focusing on one instrument is a smart start. I build a music app too, and the thing I spent the most time on was touch feel: when a buzz lands even slightly late after the tap, it feels broken. For a pandeiro I imagine the delay between the hit and the sound is the whole game. Are you doing anything with haptics on each hit?
@gbasovv You’re right, latency is the whole game. A few things I do about it:
Hits play on pointerdown (not on release or click), through the Web Audio API with pre-decoded samples, so there’s no network or decoding step between your finger and the sound.
The metronome clock runs in a Worker and schedules sounds ahead of time on the audio clock, so rhythm doesn’t drift when the UI is busy.
There’s a sync calibration (tap along to measure your device’s output delay, with a fine-tune) so the light/animation lines up with what you actually hear. Pandeiro Hero also has its own latency calibration.
Haptics: not yet, honestly. It’s a good idea. Vibration on Android would be easy, but iOS Safari doesn’t support the Vibration API, so I’d want to do it properly rather than half-way. Bluetooth headphones add their own delay, which no web app can remove, only compensate for.
If you try it, I’d love to hear how the latency feels on your device.
@andre_salles1 Playing on pointerdown with pre decoded samples and a clock in a Worker is exactly the right stack, most web music toys miss at least one of those. The calibration step is a nice touch too, Bluetooth delay is the one thing nobody can fix in code. Waiting on haptics until it works properly on iOS makes sense; in my app every buzz goes through one small helper that checks what the device can do first, so the timing logic lives in one place instead of drifting across screens. Will give Pandeiro Hero a try!