Это явно вопрос n00b, поскольку он успешно реализован в приложениях. Но сейчас 2009 год, и мне до сих пор неясно, как работают шины ввода / вывода с AUBase
.
Я напишу формулировку моего вопроса из сообщения в список рассылки coreaudio-api . Этот вопрос всплывает в другие времена без ответа до 2005 года.
Я просто просматривал код AUBase
снова, и мне было трудно увидеть, как AUBase::Render()
должен работать в случае нескольких шин (потому что он не принимает аргумент номера шины) .. .
Вот краткий обзор порядка вызова метода:
В реализации AUBase::DoRender()
локальная переменная output
установлена в GetOutput(inBusNumber)
.
Затем переменная output
в конечном счете (после вызова выноски уведомления перед рендерингом) передается в AUBase::DoRenderBus()
.
DoRenderBus()
выполняет некоторую подготовку буфера на theOutput
, который передается output
(для данного номера шины), а затем вызывает RenderBus()
. Выходной элемент не передается.
Реализация по умолчанию RenderBus()
вызывает NeedsToRender()
и затем на Render()
, без передачи номера шины или объекта выходного элемента.
Комментарий выше AUBase::RenderBus()
в AUBase.h гласит:
Переопределите этот метод, если ваш AU обрабатывает несколько выходных шин совершенно независимо - вам нужно просто позвонить на Render
без проверки NeedsToRender
. В противном случае переопределите Render()
.
Для меня приведенный выше комментарий звучит так, как будто он говорит, что вы должны выполнить обработку в Render()
даже , если поддерживает несколько шин.
Итак ... если кто-то выполняет свою обработку в Render()
, как определить, с каким выходным элементом работать? Если вы также переопределите RenderBus()
, вы можете сохранить аргумент inBusNumber
где-нибудь для использования в Render()
, но это просто ужасно.