В более поздних версиях у вас могут быть разные тарифы в разных частях сети.
Одним из примеров может быть, если вы продлеваете его для передачи данных на диск или с него. Другой пример будет заключаться в том, что переменные управления с низкой скоростью передачи данных, такие как одна управляющая эхо-задержка, могут позже стать частью вашей сети. Вероятно, вы не хотите обрабатывать переменные управления с той же частотой, что и для обработки аудиопакетов, но они по-прежнему являются «реальным временем» и частью функциональной сети. Они могут, например, нуждаться в сглаживании, чтобы избежать внезапных переходов.
До тех пор, пока вы вызываете все свои функции с одинаковой скоростью, и все функции, в основном, выполняются постоянным временем, ваш подход «подтягивание данных» будет работать нормально. Там будет быть немного, чтобы выбрать между вытаскиванием данных и нажатием. Вытягивание является несколько более естественным для воспроизведения звука, нажатие является несколько более естественным для записи, но либо работает, либо заканчивается тем же вызовом для основных функций обработки звука.
Для спектрометра вы получили вопрос нескольких моек для данных, но это не проблема. Представьте фиктивную ссылку на него от настоящая раковина. Фиктивная ссылка может вызывать запрос данных, который не является почетным. Пока фиктивная ссылка знает , это манекен и не заботит отсутствие данных, все будет OK. Это стандартная методика для сокращения нескольких приемников или источников до одного.
С такой сетью вы не хотите делать один и тот же расчет дважды в одном полном обновлении. Например, если вы смешиваете высокочастотную и низкопрофильную версию сигнала, вы не хотите дважды оценивать исходный сигнал. Вы должны сделать что-то вроде записи значения таймера с каждым буфером и прекратить распространение выдержек, когда вы увидите текущее значение галочки. Этот же механизм также защитит вас от контуров обратной связи в оценке.
Итак, эти два вопроса, которые вас интересуют, легко решаются в рамках вашей нынешней структуры.
Оценить соответствие, где существует различные скорости передачи пакетов в различных частях сети, где начнут проблемы с текущим подходом. Если вы пишете аудио на диск, то для эффективности вы хотите писать большие куски нечасто. Вы не хотите блокировать обслуживание более частых небольших входных и выходных пакетов обработки данных во время этих операций записи. Не будет достаточно одной стратегии вытягивания или выдвижения ставок.
Просто признайте, что в какой-то момент вам может потребоваться более сложный способ обновления, чем односкоростная сеть. Когда это произойдет, вам понадобятся потоки для разных ставок, которые будут запущены, или вы напишете собственный простой планировщик, возможно, так же просто, как вызывать менее часто выполняемые функции один раз в n, чтобы ставки соответствовали. Вам не нужно планировать это заранее. Ваши аудиофункции почти наверняка уже делегируют ответственность за то, чтобы их входные буферы были готовы к другим функциям, и это будут только те другие функции, которые необходимо изменить, а не сами аудиофункции.
Единственное, что я бы посоветовал на этом этапе должен быть осторожным, чтобы централизовать аудиобуфер распределение, заметив, что буферы, как fenceposts. Они не принадлежат к функции аудио , они лежат между аудиофункциями. Централизация распределения буфера позволит легко ретроспективно изменить стратегию обновления для разных скоростей в разных частях сети.