summaryrefslogtreecommitdiff
path: root/libs
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2020-05-12 10:06:36 -0600
committerPaul Davis <paul@linuxaudiosystems.com>2020-05-12 11:34:37 -0600
commit7138e76d2d86881c5d6b92b63e61802e112b3b97 (patch)
tree1edf34beb6cb5f5bda6d605f548aa73893b54fb2 /libs
parent6a542fe5fec00cc53ac0b01e804a3fea434ef8db (diff)
new mechanism to refill pre-loop buffer when loop changes (used for xfading loop ends)
Diffstat (limited to 'libs')
-rw-r--r--libs/ardour/ardour/disk_reader.h3
-rw-r--r--libs/ardour/disk_reader.cc5
2 files changed, 8 insertions, 0 deletions
diff --git a/libs/ardour/ardour/disk_reader.h b/libs/ardour/ardour/disk_reader.h
index 9351ebcfd2..ec84713e6b 100644
--- a/libs/ardour/ardour/disk_reader.h
+++ b/libs/ardour/ardour/disk_reader.h
@@ -247,6 +247,9 @@ private:
bool overwrite_existing_audio ();
bool overwrite_existing_midi ();
+
+ samplepos_t last_refill_loop_start;
+ void setup_preloop_buffer ();
};
} // namespace ARDOUR
diff --git a/libs/ardour/disk_reader.cc b/libs/ardour/disk_reader.cc
index 69b7a7dad3..29e53df87a 100644
--- a/libs/ardour/disk_reader.cc
+++ b/libs/ardour/disk_reader.cc
@@ -64,6 +64,7 @@ DiskReader::DiskReader (Session& s, string const& str, DiskIOProcessor::Flag f)
, _declick_amp (s.nominal_sample_rate ())
, _declick_offs (0)
, _declick_enabled (false)
+ , last_refill_loop_start (0)
{
file_sample[DataType::AUDIO] = 0;
file_sample[DataType::MIDI] = 0;
@@ -1044,6 +1045,10 @@ DiskReader::audio_read (Sample* sum_buffer,
loop_declick_out.run (sum_buffer, start, start + this_read);
break;
case XFadeLoop:
+ if (last_refill_loop_start != loc->start()) {
+ setup_preloop_buffer ();
+ last_refill_loop_start = loc->start();
+ }
maybe_xfade_loop (sum_buffer, start, start + this_read, rci);
break;
}