mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-30 18:37:40 +01:00
remove all remaining vestiges of per-track varispeed from libardour
This commit is contained in:
parent
703a88d074
commit
17e976b486
12 changed files with 45 additions and 105 deletions
|
|
@ -77,12 +77,11 @@ class LIBARDOUR_API DiskIOProcessor : public Processor
|
|||
bool hidden() const { return _flags & Hidden; }
|
||||
bool recordable() const { return _flags & Recordable; }
|
||||
bool non_layered() const { return _flags & NonLayered; }
|
||||
bool reversed() const { return _actual_speed < 0.0f; }
|
||||
|
||||
virtual void non_realtime_locate (framepos_t);
|
||||
|
||||
void non_realtime_set_speed ();
|
||||
bool realtime_set_speed (double sp, bool global);
|
||||
void non_realtime_speed_change ();
|
||||
bool realtime_speed_change ();
|
||||
|
||||
virtual void punch_in() {}
|
||||
virtual void punch_out() {}
|
||||
|
|
|
|||
|
|
@ -118,7 +118,6 @@ class LIBARDOUR_API DiskReader : public DiskIOProcessor
|
|||
bool overwrite_queued;
|
||||
IOChange input_change_pending;
|
||||
framecnt_t wrap_buffer_size;
|
||||
framecnt_t speed_buffer_size;
|
||||
MonitorChoice _monitoring_choice;
|
||||
|
||||
int _do_refill_with_alloc (bool partial_fill);
|
||||
|
|
|
|||
|
|
@ -432,7 +432,6 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop
|
|||
void request_overwrite_buffer (boost::shared_ptr<Route>);
|
||||
void adjust_playback_buffering();
|
||||
void adjust_capture_buffering();
|
||||
void request_track_speed (Track *, double speed);
|
||||
void request_input_change_handling ();
|
||||
|
||||
bool locate_pending() const { return static_cast<bool>(post_transport_work()&PostTransportLocate); }
|
||||
|
|
@ -1697,7 +1696,6 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop
|
|||
void locate (framepos_t, bool with_roll, bool with_flush, bool with_loop=false, bool force=false, bool with_mmc=true);
|
||||
void start_locate (framepos_t, bool with_roll, bool with_flush, bool for_loop_enabled=false, bool force=false);
|
||||
void force_locate (framepos_t frame, bool with_roll = false);
|
||||
void set_track_speed (Track *, double speed);
|
||||
void set_transport_speed (double speed, framepos_t destination_frame, bool abort = false, bool clear_state = false, bool as_default = false);
|
||||
void stop_transport (bool abort = false, bool clear_state = false);
|
||||
void start_transport ();
|
||||
|
|
|
|||
|
|
@ -40,7 +40,6 @@ class LIBARDOUR_API SessionEvent {
|
|||
public:
|
||||
enum Type {
|
||||
SetTransportSpeed,
|
||||
SetTrackSpeed,
|
||||
Locate,
|
||||
LocateRoll,
|
||||
LocateRollLocate,
|
||||
|
|
|
|||
|
|
@ -163,12 +163,12 @@ class LIBARDOUR_API Track : public Route, public Recordable
|
|||
int internal_playback_seek (framecnt_t);
|
||||
void non_realtime_locate (framepos_t);
|
||||
void realtime_handle_transport_stopped ();
|
||||
void non_realtime_set_speed ();
|
||||
void non_realtime_speed_change ();
|
||||
int overwrite_existing_buffers ();
|
||||
framecnt_t get_captured_frames (uint32_t n = 0) const;
|
||||
int set_loop (ARDOUR::Location *);
|
||||
void transport_looped (framepos_t);
|
||||
bool realtime_set_speed (double, bool);
|
||||
bool realtime_speed_change ();
|
||||
void transport_stopped_wallclock (struct tm &, time_t, bool);
|
||||
bool pending_overwrite () const;
|
||||
void prepare_to_stop (framepos_t, framepos_t);
|
||||
|
|
|
|||
|
|
@ -49,8 +49,6 @@ DiskIOProcessor::DiskIOProcessor (Session& s, string const & str, Flag f)
|
|||
: Processor (s, str)
|
||||
, _flags (f)
|
||||
, i_am_the_modifier (false)
|
||||
, _actual_speed (0.0)
|
||||
, _target_speed (0.0)
|
||||
, _buffer_reallocation_required (false)
|
||||
, _seek_required (false)
|
||||
, _slaved (false)
|
||||
|
|
@ -204,7 +202,7 @@ DiskIOProcessor::non_realtime_locate (framepos_t location)
|
|||
}
|
||||
|
||||
void
|
||||
DiskIOProcessor::non_realtime_set_speed ()
|
||||
DiskIOProcessor::non_realtime_speed_change ()
|
||||
{
|
||||
if (_buffer_reallocation_required) {
|
||||
_buffer_reallocation_required = false;
|
||||
|
|
@ -217,31 +215,18 @@ DiskIOProcessor::non_realtime_set_speed ()
|
|||
}
|
||||
|
||||
bool
|
||||
DiskIOProcessor::realtime_set_speed (double new_speed, bool global)
|
||||
DiskIOProcessor::realtime_speed_change ()
|
||||
{
|
||||
bool changed = false;
|
||||
const framecnt_t required_wrap_size = (framecnt_t) ceil (_session.get_block_size() * fabs (_session.transport_speed())) + 2;
|
||||
bool _buffer_reallocation_required;
|
||||
|
||||
DEBUG_TRACE (DEBUG::Transport, string_compose ("%1 will run at %2\n", name(), new_speed));
|
||||
|
||||
if (_target_speed != new_speed) {
|
||||
_target_speed = new_speed;
|
||||
changed = true;
|
||||
|
||||
framecnt_t required_wrap_size = (framecnt_t) ceil (_session.get_block_size() * fabs (new_speed)) + 2;
|
||||
|
||||
if (required_wrap_size > wrap_buffer_size) {
|
||||
_buffer_reallocation_required = true;
|
||||
}
|
||||
if (required_wrap_size > wrap_buffer_size) {
|
||||
_buffer_reallocation_required = true;
|
||||
} else {
|
||||
_buffer_reallocation_required = false;
|
||||
}
|
||||
|
||||
if (changed) {
|
||||
if (!global) {
|
||||
_seek_required = true;
|
||||
}
|
||||
SpeedChanged (); /* EMIT SIGNAL */
|
||||
}
|
||||
|
||||
return _buffer_reallocation_required || _seek_required;
|
||||
return _buffer_reallocation_required;
|
||||
}
|
||||
|
||||
int
|
||||
|
|
@ -255,13 +240,6 @@ DiskIOProcessor::set_state (const XMLNode& node, int version)
|
|||
_flags = Flag (string_2_enum (prop->value(), _flags));
|
||||
}
|
||||
|
||||
if ((prop = node.property ("speed")) != 0) {
|
||||
double sp = atof (prop->value().c_str());
|
||||
|
||||
if (realtime_set_speed (sp, false)) {
|
||||
non_realtime_set_speed ();
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -149,7 +149,7 @@ DiskReader::set_state (const XMLNode& node, int version)
|
|||
void
|
||||
DiskReader::realtime_handle_transport_stopped ()
|
||||
{
|
||||
realtime_set_speed (0.0f, true);
|
||||
realtime_speed_change ();
|
||||
}
|
||||
|
||||
void
|
||||
|
|
@ -239,11 +239,21 @@ DiskReader::run (BufferSet& bufs, framepos_t start_frame, framepos_t end_frame,
|
|||
uint32_t n;
|
||||
boost::shared_ptr<ChannelList> c = channels.reader();
|
||||
ChannelList::iterator chan;
|
||||
framecnt_t playback_distance = 0;
|
||||
const bool need_disk_signal = result_required || _monitoring_choice == MonitorDisk || _monitoring_choice == MonitorCue;
|
||||
frameoffset_t playback_distance = nframes;
|
||||
|
||||
_need_butler = false;
|
||||
playback_distance = calculate_playback_distance (nframes);
|
||||
|
||||
|
||||
if (speed != 1.0f && speed != -1.0f) {
|
||||
interpolation.set_speed (speed);
|
||||
midi_interpolation.set_speed (speed);
|
||||
playback_distance = midi_interpolation.distance (nframes);
|
||||
}
|
||||
|
||||
if (speed < 0.0) {
|
||||
playback_distance = -playback_distance;
|
||||
}
|
||||
|
||||
if (!need_disk_signal) {
|
||||
|
||||
|
|
@ -277,7 +287,7 @@ DiskReader::run (BufferSet& bufs, framepos_t start_frame, framepos_t end_frame,
|
|||
|
||||
if (playback_distance <= (framecnt_t) chaninfo->rw_vector.len[0]) {
|
||||
|
||||
if (fabsf (_actual_speed) != 1.0f) {
|
||||
if (fabsf (speed) != 1.0f) {
|
||||
(void) interpolation.interpolate (
|
||||
n, nframes,
|
||||
chaninfo->rw_vector.buf[0],
|
||||
|
|
@ -295,7 +305,7 @@ DiskReader::run (BufferSet& bufs, framepos_t start_frame, framepos_t end_frame,
|
|||
/* We have enough samples, but not in one lump.
|
||||
*/
|
||||
|
||||
if (fabsf (_actual_speed) != 1.0f) {
|
||||
if (fabsf (speed) != 1.0f) {
|
||||
interpolation.interpolate (n, chaninfo->rw_vector.len[0],
|
||||
chaninfo->rw_vector.buf[0],
|
||||
outgoing);
|
||||
|
|
@ -343,7 +353,7 @@ DiskReader::run (BufferSet& bufs, framepos_t start_frame, framepos_t end_frame,
|
|||
get_playback (mbuf, playback_distance);
|
||||
|
||||
/* vari-speed */
|
||||
if (_actual_speed != 0.0 && fabsf (_actual_speed) != 1.0f) {
|
||||
if (speed != 0.0 && fabsf (speed) != 1.0f) {
|
||||
MidiBuffer& mbuf (bufs.get_midi (0));
|
||||
for (MidiBuffer::iterator i = mbuf.begin(); i != mbuf.end(); ++i) {
|
||||
MidiBuffer::TimeType *tme = i.timeptr();
|
||||
|
|
@ -352,7 +362,7 @@ DiskReader::run (BufferSet& bufs, framepos_t start_frame, framepos_t end_frame,
|
|||
}
|
||||
}
|
||||
|
||||
if (_actual_speed < 0.0) {
|
||||
if (speed < 0.0) {
|
||||
playback_sample -= playback_distance;
|
||||
} else {
|
||||
playback_sample += playback_distance;
|
||||
|
|
@ -436,26 +446,6 @@ DiskReader::run (BufferSet& bufs, framepos_t start_frame, framepos_t end_frame,
|
|||
bufs.set_count (cnt);
|
||||
}
|
||||
|
||||
frameoffset_t
|
||||
DiskReader::calculate_playback_distance (pframes_t nframes)
|
||||
{
|
||||
frameoffset_t playback_distance = nframes;
|
||||
|
||||
if (_target_speed != 1.0f && _target_speed != -1.0f) {
|
||||
interpolation.set_speed (_target_speed);
|
||||
midi_interpolation.set_speed (_target_speed);
|
||||
playback_distance = midi_interpolation.distance (nframes);
|
||||
}
|
||||
|
||||
_actual_speed = _target_speed;
|
||||
|
||||
if (_actual_speed < 0.0) {
|
||||
return -playback_distance;
|
||||
} else {
|
||||
return playback_distance;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
DiskReader::set_pending_overwrite (bool yn)
|
||||
{
|
||||
|
|
@ -486,7 +476,7 @@ DiskReader::overwrite_existing_buffers ()
|
|||
|
||||
/* AUDIO */
|
||||
|
||||
bool reversed = (_target_speed * _session.transport_speed()) < 0.0f;
|
||||
const bool reversed = _session.transport_speed() < 0.0f;
|
||||
|
||||
/* assume all are the same size */
|
||||
framecnt_t size = c->front()->buf->bufsize();
|
||||
|
|
@ -829,7 +819,7 @@ DiskReader::refill_audio (Sample* mixdown_buffer, float* gain_buffer, framecnt_t
|
|||
int32_t ret = 0;
|
||||
framecnt_t to_read;
|
||||
RingBufferNPT<Sample>::rw_vector vector;
|
||||
bool const reversed = (_target_speed * _session.transport_speed()) < 0.0f;
|
||||
bool const reversed = _session.transport_speed() < 0.0f;
|
||||
framecnt_t total_space;
|
||||
framecnt_t zero_fill;
|
||||
uint32_t chan_n;
|
||||
|
|
@ -877,8 +867,8 @@ DiskReader::refill_audio (Sample* mixdown_buffer, float* gain_buffer, framecnt_t
|
|||
the playback buffer is empty.
|
||||
*/
|
||||
|
||||
DEBUG_TRACE (DEBUG::DiskIO, string_compose ("%1: space to refill %2 vs. chunk %3 (speed = %4)\n", name(), total_space, _chunk_frames, _actual_speed));
|
||||
if ((total_space < _chunk_frames) && fabs (_actual_speed) < 2.0f) {
|
||||
DEBUG_TRACE (DEBUG::DiskIO, string_compose ("%1: space to refill %2 vs. chunk %3 (speed = %4)\n", name(), total_space, _chunk_frames, _session.transport_speed()));
|
||||
if ((total_space < _chunk_frames) && fabs (_session.transport_speed()) < 2.0f) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
@ -1391,7 +1381,7 @@ DiskReader::refill_midi ()
|
|||
}
|
||||
|
||||
size_t write_space = _midi_buf->write_space();
|
||||
bool reversed = (_target_speed * _session.transport_speed()) < 0.0f;
|
||||
const bool reversed = _session.transport_speed() < 0.0f;
|
||||
|
||||
DEBUG_TRACE (DEBUG::DiskIO, string_compose ("MIDI refill, write space = %1 file frame = %2\n", write_space, file_frame));
|
||||
|
||||
|
|
|
|||
|
|
@ -1706,5 +1706,5 @@ DiskWriter::adjust_buffering ()
|
|||
void
|
||||
DiskWriter::realtime_handle_transport_stopped ()
|
||||
{
|
||||
realtime_set_speed (0.0f, true);
|
||||
realtime_speed_change ();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -391,7 +391,6 @@ setup_enum_writer ()
|
|||
REGISTER (_Session_RecordState);
|
||||
|
||||
REGISTER_CLASS_ENUM (SessionEvent, SetTransportSpeed);
|
||||
REGISTER_CLASS_ENUM (SessionEvent, SetTrackSpeed);
|
||||
REGISTER_CLASS_ENUM (SessionEvent, Locate);
|
||||
REGISTER_CLASS_ENUM (SessionEvent, LocateRoll);
|
||||
REGISTER_CLASS_ENUM (SessionEvent, LocateRollLocate);
|
||||
|
|
|
|||
|
|
@ -1231,10 +1231,6 @@ Session::process_event (SessionEvent* ev)
|
|||
overwrite_some_buffers (static_cast<Track*>(ev->ptr));
|
||||
break;
|
||||
|
||||
case SessionEvent::SetTrackSpeed:
|
||||
set_track_speed (static_cast<Track*> (ev->ptr), ev->speed);
|
||||
break;
|
||||
|
||||
case SessionEvent::SetSyncSource:
|
||||
DEBUG_TRACE (DEBUG::Slave, "seen request for new slave\n");
|
||||
use_sync_source (ev->slave);
|
||||
|
|
|
|||
|
|
@ -132,14 +132,6 @@ Session::request_transport_speed_nonzero (double speed, bool as_default)
|
|||
request_transport_speed (speed, as_default);
|
||||
}
|
||||
|
||||
void
|
||||
Session::request_track_speed (Track* tr, double speed)
|
||||
{
|
||||
SessionEvent* ev = new SessionEvent (SessionEvent::SetTrackSpeed, SessionEvent::Add, SessionEvent::Immediate, 0, speed);
|
||||
ev->set_ptr (tr);
|
||||
queue_event (ev);
|
||||
}
|
||||
|
||||
void
|
||||
Session::request_stop (bool abort, bool clear_state)
|
||||
{
|
||||
|
|
@ -542,7 +534,7 @@ Session::non_realtime_set_speed ()
|
|||
for (RouteList::iterator i = rl->begin(); i != rl->end(); ++i) {
|
||||
boost::shared_ptr<Track> tr = boost::dynamic_pointer_cast<Track> (*i);
|
||||
if (tr) {
|
||||
tr->non_realtime_set_speed ();
|
||||
tr->non_realtime_speed_change ();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1530,7 +1522,7 @@ Session::set_transport_speed (double speed, framepos_t destination_frame, bool a
|
|||
boost::shared_ptr<RouteList> rl = routes.reader();
|
||||
for (RouteList::iterator i = rl->begin(); i != rl->end(); ++i) {
|
||||
boost::shared_ptr<Track> tr = boost::dynamic_pointer_cast<Track> (*i);
|
||||
if (tr && tr->realtime_set_speed (_transport_speed, true)) {
|
||||
if (tr && tr->realtime_speed_change()) {
|
||||
todo = PostTransportWork (todo | PostTransportSpeed);
|
||||
}
|
||||
}
|
||||
|
|
@ -1694,7 +1686,7 @@ Session::start_transport ()
|
|||
for (RouteList::iterator i = rl->begin(); i != rl->end(); ++i) {
|
||||
boost::shared_ptr<Track> tr = boost::dynamic_pointer_cast<Track> (*i);
|
||||
if (tr) {
|
||||
tr->realtime_set_speed (_transport_speed, true);
|
||||
tr->realtime_speed_change ();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1861,7 +1853,7 @@ Session::use_sync_source (Slave* new_slave)
|
|||
for (RouteList::iterator i = rl->begin(); i != rl->end(); ++i) {
|
||||
boost::shared_ptr<Track> tr = boost::dynamic_pointer_cast<Track> (*i);
|
||||
if (tr && !tr->hidden()) {
|
||||
if (tr->realtime_set_speed (_transport_speed, true)) {
|
||||
if (tr->realtime_speed_change()) {
|
||||
non_rt_required = true;
|
||||
}
|
||||
tr->set_slaved (_slave != 0);
|
||||
|
|
@ -1953,16 +1945,6 @@ Session::switch_to_sync_source (SyncSource src)
|
|||
request_sync_source (new_slave);
|
||||
}
|
||||
|
||||
void
|
||||
Session::set_track_speed (Track* track, double speed)
|
||||
{
|
||||
if (track->realtime_set_speed (speed, false)) {
|
||||
add_post_transport_work (PostTransportSpeed);
|
||||
_butler->schedule_transport_work ();
|
||||
set_dirty ();
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
Session::unset_play_range ()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -672,9 +672,9 @@ Track::non_realtime_locate (framepos_t p)
|
|||
}
|
||||
|
||||
void
|
||||
Track::non_realtime_set_speed ()
|
||||
Track::non_realtime_speed_change ()
|
||||
{
|
||||
_disk_reader->non_realtime_set_speed ();
|
||||
_disk_reader->non_realtime_speed_change ();
|
||||
}
|
||||
|
||||
int
|
||||
|
|
@ -705,12 +705,12 @@ Track::transport_looped (framepos_t p)
|
|||
}
|
||||
|
||||
bool
|
||||
Track::realtime_set_speed (double s, bool g)
|
||||
Track::realtime_speed_change ()
|
||||
{
|
||||
if (_disk_reader->realtime_set_speed (s, g)) {
|
||||
if (_disk_reader->realtime_speed_change ()) {
|
||||
return -1;
|
||||
}
|
||||
return _disk_writer->realtime_set_speed (s, g);
|
||||
return _disk_writer->realtime_speed_change ();
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue