+int64_t FloatAutos::speed_position(double pos)
+{
+ double length = track->get_length();
+ int64_t l = -1, r = track->to_units(length, 1);
+ if( r < 1 ) r = 1;
+ for( int i=32; --i >= 0 && automation_integral(0,r,PLAY_FORWARD) <= pos; r*=2 );
+ for( int i=64; --i >= 0 && (r-l)>1; ) {
+ int64_t m = (l + r) / 2;
+ double t = automation_integral(0,m,PLAY_FORWARD) - pos;
+ *(t >= 0 ? &r : &l) = m;
+ }
+ return r;
+}
+