+ samplepos_t snap_pixel_to_sample(double x, bool ensure_snap = false);
+
+ /** Convert a timestamp in beats into samples (both relative to region position) */
+ samplepos_t region_beats_to_region_samples(Temporal::Beats beats) const;
+ /** Convert a timestamp in beats into absolute samples */
+ samplepos_t region_beats_to_absolute_samples(Temporal::Beats beats) const {
+ return _region->position() + region_beats_to_region_samples (beats);
+ }
+ /** Convert a timestamp in samples to beats (both relative to region position) */
+ Temporal::Beats region_samples_to_region_beats(samplepos_t) const;
+ double region_samples_to_region_beats_double(samplepos_t) const;
+
+ /** Convert a timestamp in beats measured from source start into absolute samples */
+ samplepos_t source_beats_to_absolute_samples(Temporal::Beats beats) const;
+ /** Convert a timestamp in beats measured from source start into region-relative samples */
+ samplepos_t source_beats_to_region_samples(Temporal::Beats beats) const {
+ return source_beats_to_absolute_samples (beats) - _region->position();
+ }
+ /** Convert a timestamp in absolute samples to beats measured from source start*/
+ Temporal::Beats absolute_samples_to_source_beats(samplepos_t) const;