Partilhar via


Negociação de Formatos

Depois que um aplicativo inicia o processamento de áudio, o construtor de gráficos configura os sAPOs em um gráfico de áudio e também inicializa os sAPOs. O serviço de áudio então negocia com o sAPO da LFX para estabelecer o formato dos dados de áudio na entrada e saída do sAPO. Este processo de negociação é conhecido como negociação de formato.

Todos os sAPOs que fornecem efeitos de sistemas de áudio para o Windows Vista devem ter determinadas interfaces e métodos. Os métodos usados pelo sAPO e pelo mecanismo de áudio para negociar o formato de dados são: o método IsInputFormatSupported da interface IAudioProcessingObject e os métodos LockForProcess e UnlockForProcess da interface IAudioProcessingObjectConfiguration .

Para iniciar a negociação de formato, o serviço de áudio primeiro define a saída do sAPO LFX para o formato padrão baseado em float32. Em seguida, o serviço de áudio chama o método IAudioProcessingObject::IsInputFormatSupported do LFX sAPO, sugere o formato padrão e monitora a resposta HRESULT desse método. Se o LFX sAPO puder suportar o formato sugerido, ele retornará S_OK, juntamente com uma referência ao formato suportado. Se o LFX sAPO não puder suportar o formato sugerido, ele retornará S_FALSE juntamente com uma referência a um formato que seja o mais próximo do formato sugerido. Se o sAPO LFX não puder suportar o formato sugerido e não tiver um equivalente próximo, ele retornará APOERR_FORMAT_NOT_SUPPORTED. O GFX sAPO funciona com o formato de saída do LFX sAPO. Assim, o GFX sAPO não está envolvido no processo de negociação do formato.

Depois que um formato de dados é selecionado para processar os dados de áudio, o construtor de gráficos de processamento de áudio chama o método IAudioProcessingObjectConfiguration::LockForProcess dos sAPOs, fazendo com que a seleção de formato seja finalizada.

Se o sAPO do Windows Vista retornar um erro para o sAPO personalizado que encapsula em resposta a uma chamada para o método LockForProcess, o sAPO personalizado deverá lidar com o erro da mesma forma que lida com um erro de CoCreateInstance quando uma tentativa de instanciar um sAPO falhar. Consulte o arquivo Spkrfill.cpp para obter detalhes sobre como substituir o método LockForProcess fornecido pelo sistema.

Devido à forma como o serviço de áudio opera, os sAPOs LFX e GFX devem ser capazes de responder independentemente um do outro a consultas do serviço de áudio sobre formatos de dados.

Importante Ao implementar um sAPO personalizado que encapsula um sAPO LFX do Windows Vista, não especifique o sinalizador APO_FLAG_FRAMESPERSECOND_MUST_MATCH nas propriedades de registo do sAPO personalizado. Se você especificar esse sinalizador, o sAPO LFX do Windows Vista não poderá executar o preenchimento de alto-falantes, virtualização de fones de ouvido ou ambiente virtual. Além disso, o seu sAPO personalizado não será capaz de fazer downmix de fluxos de áudio. Por exemplo, o seu sAPO personalizado não será capaz de converter um stream de áudio 5.1 para um stream de áudio estéreo de dois canais.