I will probably check the code later, totally missed the previous post lol. I can't guarantee the best optimizations, though, but I'll see what I can do
If you're using random songs simfiles, I am pretty sure the Rand or RandInt( function might be at fault.
Otherwise, an idea I would have is that you check through xLIB xLIB Revolution or Super Mario Smash Dance code for how I did my rhythm games engines. They are not GH games, they're DDR-style, and uses xLIB (or Celtic III) for displaying graphics, but it might give a small idea and hopefully help. Just assume everything that is real(1 is Output( and real(4 is Disp "". Also my levels were pre-rendered and external and only 3 are avaliable so that part might be a bit different.
EDIT: screenshot of it in action (altough you need to use a browser tha supports higher than 10 frames a second in animated GIFs, like Firefox or Opera, or Quicktime Player)
But nice to see new version coming up, though
EDIT: Also if in any case it can be made faster, I would recommend still keeping it a lil slow for begginers, though, lol