I used the Unity Splines Package for the curves (https://docs.unity3d.com/Packages/com.unity.splines@1.0/api/UnityEngine.Splines....).
I generate control points for the spline based on the MIDI: There's a control point every 1/2 beat, and its distance from the center is based on how far it is from the last and next note, maxing out at a value so it doesn't go too far.
Then I have a custom spline follower script that looks at the audio time to move the ball along the spline, such that the ball travels between two control points each 1/2 beat of the song.