+
+void ResamplingQueue::change_expected_delay(double expected_delay_seconds)
+{
+ double new_delay = expected_delay_seconds * OUTPUT_FREQUENCY;
+
+ if (a1.input_samples_received == 0) {
+ // Before the first block, so no need to adjust the queue.
+ expected_delay = new_delay;
+ return;
+ }
+
+ int samples_to_add = lrint(new_delay - expected_delay);
+ if (samples_to_add > 0) {
+ adjustment_samples += samples_to_add;
+ buffer.insert(buffer.end(), samples_to_add, 0.0f);
+ } else if (samples_to_add < 0) {
+ int samples_to_remove = min<int>(-samples_to_add, buffer.size());
+ buffer.erase(buffer.begin(), buffer.begin() + samples_to_remove);
+ adjustment_samples -= samples_to_remove;
+ }
+ expected_delay = new_delay;
+}