Support multiple sounds, use a callback instead of timer