diff --git a/src/call/call_delay.cpp b/src/call/call_delay.cpp index 803f4447..f4cb3d17 100644 --- a/src/call/call_delay.cpp +++ b/src/call/call_delay.cpp @@ -35,7 +35,7 @@ void CallDelay::fail(const char* reason) { void CallDelay::reset() { st.clear(); st.setTempo(1); spanHead = spanCount = trim = 0; - written = cursor = generated = consumed = stBase = stFed = entry = queuedInput = elapsed = deviceSamples = 0; + written = cursor = generated = consumed = stBase = stFed = entry = queuedInput = deviceSamples = 0; phaseGoal = 0; playedSource = cutPhase = 0; tempo = 1; for (auto& b : buckets) b = {}; @@ -175,7 +175,7 @@ unsigned CallDelay::direct(int16_t* out, unsigned count, unsigned reserve, unsig /* Нижняя огибающая за 150..200мс убирает пилу пакетизации без зависимости от размера pull. */ double CallDelay::lowDepth(double depth, double& inventory) { - uint64_t time = elapsed / (Rate / 20); + uint64_t time = deviceSamples / (Rate / 20); auto& b = buckets[time % 4]; if (b.time != time) b = {time, depth, inventory}; else { b.low = std::min(b.low, depth); b.inventory = std::min(b.inventory, inventory); } @@ -227,6 +227,5 @@ unsigned CallDelay::pull(int16_t* out, unsigned count, uint64_t queued, unsigned consume(n); done += n; deviceSamples += n; } } - elapsed += count; return done; } diff --git a/src/call/call_delay.h b/src/call/call_delay.h index 9cd6f1c6..82ddd77a 100644 --- a/src/call/call_delay.h +++ b/src/call/call_delay.h @@ -24,6 +24,8 @@ public: unsigned phase = 0; // Ошибка относительно 20мс выхода; 0 — границы совпадают. }; CallDelay(Input input, void* input_context, soundtouch::SourceCallback source, void* source_context); + CallDelay(const CallDelay&) = delete; + CallDelay& operator=(const CallDelay&) = delete; bool valid() const { return !failed; } unsigned pull(int16_t* output, unsigned count, uint64_t queued, unsigned reserve); void reset(); @@ -42,7 +44,7 @@ private: std::array spans{}; unsigned spanHead = 0, spanCount = 0; uint64_t written = 0, cursor = 0, generated = 0, consumed = 0; - uint64_t stBase = 0, stFed = 0, entry = 0, queuedInput = 0, elapsed = 0; + uint64_t stBase = 0, stFed = 0, entry = 0, queuedInput = 0; uint64_t deviceSamples = 0; int64_t phaseGoal = 0; double playedSource = 0, tempo = 1, cutPhase = 0;