+ if (speed > 0) {
+ if (start_sample < playback_sample) {
+ cerr << owner()->name() << " SS = " << start_sample << " PS = " << playback_sample << endl;
+ abort ();
+ }
+ } else if (speed < 0) {
+ if (playback_sample < start_sample) {
+ cerr << owner()->name() << " SS = " << start_sample << " PS = " << playback_sample << " REVERSE" << endl;
+ abort ();
+ }
+ }
+
+ if ((speed > 0) && (start_sample != playback_sample)) {
+ cerr << owner()->name() << " playback not aligned, jump ahead " << (start_sample - playback_sample) << endl;
+
+ if (can_internal_playback_seek (start_sample - playback_sample)) {
+ internal_playback_seek (start_sample - playback_sample);
+ } else {
+ cerr << owner()->name() << " playback not possible: ss = " << start_sample << " ps = " << playback_sample << endl;
+ goto midi;
+ }
+ }
+
+ chaninfo->rbuf->get_read_vector (&(*chan)->rw_vector);