Document shared delay processing and verified frame alignment

This commit is contained in:
evgeny committed 2026-10-15 13:36:18 +02:00
1 parent c244808b77
commit b6b0726bfe
2 files changed
+22 -10

No files matched your search

+8 -2
View File
@@ -5,6 +5,12 @@
* Reset SoundTouch наружу не выходят. Владелец сам сбрасывает карту при reset().
* queued — ещё не декодированный вход, reserve — сетевой запас, оба в сэмплах.
* Переключение сохраняет хвост исходного PCM; ускорение учитывается отдельно.
* Вход в SoundTouch при избытке >=120мс, выход <=40мс; низкий запас дополнительно
* принуждает выход. Прямой режим ускоряет не более чем на 2%, без замедления.
* Его цель — целая разность входных/выходных кадров по 960 сэмплов. Нижняя огибающая
* запаса за 150..200мс подавляет пилу пакетов; удаление останавливается точно на цели.
* При нехватке входа ускорение не расходует reserve: фазу доводим после восстановления.
* Это выравнивание границ PCM, не синхронизация физических часов двух аудиоустройств.
* Внутренние очереди ограничены, размеры pull произвольные, heap в нашем hot path нет. */
#ifndef CALL_DELAY_H
#define CALL_DELAY_H
@@ -19,9 +25,9 @@ public:
enum class Mode { Direct, Stretch, Drain };
struct Stats {
Mode mode = Mode::Direct;
double tempo = 1, pending = 0;
double tempo = 1, pending = 0; // Заданный темп и ещё не выданная длительность исходного PCM в сэмплах.
uint64_t cuts = 0, entered = 0, exited = 0;
unsigned phase = 0; // Ошибка относительно 20мс выхода; 0 — границы совпадают.
unsigned phase = 0; // В Direct: ошибка относительно 20мс выхода; 0 — границы совпадают.
};
CallDelay(Input input, void* input_context, soundtouch::SourceCallback source, void* source_context);
CallDelay(const CallDelay&) = delete;