Согласование формата
После того как приложение инициирует обработку звука, построитель графов настраивает объекты SAPOs в звуковом графе, а также инициализирует объекты SAPOS. Затем аудиослужба согласовывает с SAPO LFX, чтобы установить формат звуковых данных на входных и выходных данных sAPO. Этот процесс согласования называется согласованием формата.
Все объекты SAPOS, обеспечивающие эффекты звуковых систем для Windows Vista, должны иметь определенные интерфейсы и методы. Методы, используемые sAPO и обработчиком звука для согласования формата данных: метод IsInputFormatSupported интерфейса IAudioProcessingObject и методы LockForProcess и UnlockForProcess интерфейса IAudioProcessingObjectConfiguration .
Чтобы инициировать согласование формата, аудиослужба сначала задает для выходных данных SAPO LFX формат по умолчанию на основе float32. Затем аудиослужба вызывает метод IAudioProcessingObject::IsInputFormatSupported LFX sAPO, предлагает формат по умолчанию и отслеживает ответ HRESULT этого метода. Если SAPO LFX поддерживает предлагаемый формат, он возвращает S_OK вместе со ссылкой на поддерживаемый формат. Если SAPO LFX не поддерживает предлагаемый формат, он возвращает S_FALSE вместе со ссылкой на формат, который является ближайшим совпадением с предложенным. Если SAPO LFX не поддерживает предлагаемый формат и не имеет близкого совпадения, она возвращает APOERR_FORMAT_NOT_SUPPORTED. SAPO GFX работает с форматом выходных данных SAPO LFX. Таким образом, SAPO GFX не участвует в процессе переговоров по формату.
После выбора формата данных для обработки звуковых данных построитель графа обработки звука вызывает метод IAudioProcessingObjectConfiguration::LockForProcess объекта SAPOs, что приводит к завершению выбора формата.
Если sAPO Windows Vista возвращает ошибку пользовательской sAPO-оболочке в ответ на вызов метода LockForProcess , пользовательская sAPO должна обрабатывать ошибку так же, как она обрабатывает ошибку из CoCreateInstance , когда попытка создания экземпляра sAPO завершается сбоем. Дополнительные сведения о перезаписи предоставленного системой метода LockForProcess см. в файле Spkrfill.cpp.
Из-за того, как работает аудиослужба, SAPOS LFX и GFX должны иметь возможность независимо друг от друга реагировать на запросы аудиослужбы в отношении форматов данных.
Важно При реализации пользовательской SAPO, которая является оболочкой для SAPO Windows Vista LFX, не указывайте флаг APO_FLAG_FRAMESPERSECOND_MUST_MATCH в свойствах регистрации настраиваемого sAPO. Если вы укажете этот флаг, sAPO Windows Vista LFX не сможет выполнять заполнение динамиков, виртуализацию наушников или виртуальное окружение. Кроме того, ваша пользовательская sAPO не сможет смешивать звуковые потоки. Например, пользовательская sAPO не сможет смешивать аудиопоток 5.1 до двухканавого стереофонического аудиопотока.