형식 협상
애플리케이션이 오디오 처리를 시작한 후 그래프 작성기에서 SAPO를 오디오 그래프로 구성하고 SAPO를 초기화합니다. 그런 다음 오디오 서비스는 LFX sAPO와 협상하여 sAPO의 입력 및 출력에서 오디오 데이터의 형식을 설정합니다. 이 협상 프로세스를 형식 협상이라고 합니다.
Windows Vista에 오디오 시스템 효과를 제공하는 모든 SAP에는 특정 인터페이스와 메서드가 있어야 합니다. sAPO 및 오디오 엔진에서 데이터 형식을 협상하는 데 사용하는 메서드는 IAudioProcessingObject 인터페이스의 IsInputFormatSupported 메서드와 IAudioProcessingObjectConfiguration 인터페이스의 LockForProcess 및 UnlockForProcess 메서드입니다.
형식 협상을 시작하기 위해 오디오 서비스는 먼저 LFX sAPO의 출력을 기본 float32 기반 형식으로 설정합니다. 그런 다음 오디오 서비스는 LFX sAPO의 IAudioProcessingObject::IsInputFormatSupported 메서드를 호출하고, 기본 형식을 제안하고, 이 메서드의 HRESULT 응답을 모니터링합니다. LFX sAPO가 제안된 형식을 지원할 수 있는 경우 지원되는 형식에 대한 참조와 함께 S_OK 반환합니다. LFX sAPO가 제안된 형식을 지원할 수 없는 경우 제안된 형식과 가장 일치하는 형식에 대한 참조와 함께 S_FALSE 반환합니다. LFX sAPO가 제안된 형식을 지원할 수 없고 일치하는 항목이 없으면 APOERR_FORMAT_NOT_SUPPORTED 반환합니다. GFX sAPO는 LFX sAPO의 출력 형식으로 작동합니다. 따라서 GFX sAPO는 형식 협상 프로세스에 포함되지 않습니다.
오디오 데이터를 처리하기 위해 데이터 형식을 선택한 후 오디오 처리 그래프 작성기는 SAPO의 IAudioProcessingObjectConfiguration::LockForProcess 메서드를 호출하여 형식 선택이 완료됩니다.
LockForProcess 메서드 호출에 대한 응답으로 Windows Vista sAPO가 래핑 사용자 지정 sAPO에 오류를 반환하는 경우 사용자 지정 sAPO는 sAPO 인스턴스화 시도가 실패할 때 CoCreateInstance의 오류를 처리하는 것과 동일한 방식으로 오류를 처리해야 합니다. 시스템에서 제공하는 LockForProcess 메서드를 덮어쓰는 방법에 대한 자세한 내용은 Spkrfill.cpp 파일을 참조하세요.
오디오 서비스가 작동하는 방식 때문에 LFX 및 GFX sAPO는 데이터 형식과 관련된 오디오 서비스의 쿼리에 서로 독립적으로 응답할 수 있어야 합니다.
중요 Windows Vista LFX sAPO를 래핑하는 사용자 지정 sAPO를 구현하는 경우 사용자 지정 sAPO의 등록 속성에 APO_FLAG_FRAMESPERSECOND_MUST_MATCH 플래그를 지정하지 마세요. 이 플래그를 지정하면 Windows Vista LFX sAPO에서 스피커 채우기, 헤드폰 가상화 또는 가상 서라운드를 수행할 수 없습니다. 또한 사용자 지정 sAPO는 오디오 스트림을 다운 믹스할 수 없습니다. 예를 들어 사용자 지정 sAPO는 5.1 오디오 스트림을 2 채널 스테레오 오디오 스트림으로 혼합할 수 없습니다.