The TextAlive API provides information about the timing of a song's lyrics. The tutorials are in Japanese, but the code samples are enough to get the gist of how it works.

Timing Info

Let p be an instance of the Player class.

The effect of this is that whichever division type you choose to work with, you'll have two parallel linked lists to deal with. The timing boundaries of the lyrics don't necessarily align with those of the beats, so you'll be advancing your position in them at different times.

Listener Methods

onVideoReady

This is called once the lyrics information is loaded. Initialization that relies on having the lyrics can go here.

onTimeUpdate

This is the main frame update method, it gets constantly called while the song is playing and provides the timestamp of the current position.

onSeekComplete

If a seek is requested, this method is called once all the adjustment in the player is done.
This is supposed to provide the timestamp that the song ends up at, but in practice the player will jump a little after this gets called.
It's best to just use this to flag that a seek has happened, and then handle it in onTimeUpdate when that gets the real timestamp.