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