Document shared delay processing and verified frame alignment
This commit is contained in:
1 parent
c244808b77
commit
b6b0726bfe
2 files changed
+22
-10
No files matched your search
@@ -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;
|
||||
|
||||
Reference in new issue
Block a user