XDspSubmitCommandWithEnvelope
Envia um comando para a fila de hardware de um determinado fluxo XDSP. Essa API é semelhante a XDspSubmitCommand, que envia um comando ao hardware, exceto que recebe um parâmetro adicional, envelopeBuffer, que contém um valor de ganho para cada bloco do filtro de resposta ao impulso. Esses valores de ganho são aplicados à resposta ao impulso durante a convolução.Quando o uso de um envelope for desejado, essa API deverá ser chamada com um ponteiro válido para o buffer de envelope. É responsabilidade do chamador garantir que o buffer de envelope permaneça válido até que não seja mais necessário. Para parar de usar o envelope, deve-se usar XDspSubmitCommand ou XDspSubmitCommandWithEnvelope com nullptr para envelopeBuffer. Essa API só deve ser usada para um fluxo ativado para XDspProcessType::Convolution.
Sintaxe
Parâmetros
handle _In_Tipo: XDspStreamHandle Um identificador de fluxo XDSP válido. command _In_
Tipo: XDspCommand* Ponteiro para uma estrutura XDspCommand. envelopeBuffer _In_
Tipo: float* Ponteiro para os valores de ganho de cada bloco do filtro de resposta ao impulso a serem aplicados durante a convolução.
Esse buffer deve fazer parte da memória registrada por XDspConnect ou XDspConnectWithMaximumStreamLimit e deve estar alinhado em 16 bytes. Esse buffer é usado pelo hardware e não pode ser modificado nem liberado até que todos os comandos que o utilizam sejam concluídos e as respostas tenham sido coletadas. A contagem de valores de ganho no buffer de envelope deve ser pelo menos o número de blocos no filtro de resposta ao impulso e é calculada da seguinte forma.
uint32_t IRLengthInComplexValues = XDspActivationParameters::impulseResponseLengthInFloats/2;
uint32_t IRLengthInBlocks = IRLengthInComplexValues/ XDspActivationParameters::blockFrameCount;
uint32_t envelopeSize = ((IRLengthInBlocks * sizeof(float) + 15) & ~(0xF)) / sizeof(float); Esse buffer segue o tamanho da resposta ao impulso. Para uma resposta ao impulso estéreo, os valores de ganho de todo o canal esquerdo são seguidos pelos valores de ganho de todo o canal direito, da mesma forma que a resposta ao impulso do canal esquerdo é seguida pela resposta ao impulso do canal direito. Para uma resposta ao impulso mono, os mesmos valores de ganho são aplicados aos canais esquerdo e direito de um sinal de entrada estéreo. O tamanho mínimo desse buffer deve ser de 8 valores float no caso de um filtro de resposta ao impulso mono e de 16 valores float no caso de um filtro de resposta ao impulso estéreo. commandSequence _Out_
Tipo: uint32_t* Ponteiro para
uint32_t para retornar um valor de sequência de comando. Confira a seção Comentários para obter detalhes adicionais.
Valor retornado
Tipo: HRESULT Se o método for bem-sucedido, ele retornará S_OK. Se o método falhar, ele retornará o seguinte código (lista parcial):Comentários
Essa chamada será rápida, pois não alocará recursos nem processará dados; ela apenas envia o comando ao servidor de hardware. O processo de convolução tem ‘n’ estágios, e o envelopamento pode ser alternado, ativado/desativado somente no primeiro estágio. Isso significa que o efeito de envelopamento pode não ser imediato e pode ser atrasado por alguns envios. Para desabilitar os parâmetros de envelope, deve-se chamar XDspSubmitCommand ou XDspSubmitCommandWithEnvelope com um envelopeBuffer nulo. Essa chamada também recebe um ponteiro parauint32_t para retornar um valor de sequência de comando, commandSequence, para rastrear quando o resultado do comando estará pronto posteriormente. Esse número representa o total de comandos que foram enviados com êxito desde que a sessão foi iniciada e depois que XDspActivate foi chamado. Esse número será um para o primeiro comando e é incrementado em um para cada chamada bem-sucedida de XDspSubmitCommandWithEnvelope ou XDspSubmitCommand depois disso.
Se o servidor de hardware estiver em um estado inválido, XDspSubmitCommandWithEnvelope retornará o código de erro XDSP_E_DEVICE_FATAL_ERROR. Nesse ponto, nenhum outro comando poderá ser enviado para o fluxo XDSP que está em estado de falha. O XDspStatus do fluxo também indicará o mesmo erro. O fluxo XDSP afetado deve aguardar até que todos os comandos enviados sejam processados pelo hardware, verificando o XDspStatus, e deve ser desativado usando XDspDeactivate quando todos os comandos forem processados. Outros fluxos XDSP não serão afetados, e o hardware continuará a processar os comandos deles.
Requisitos
Cabeçalho: XDspAudio.h Biblioteca: Chad.lib Plataformas compatíveis: XBOX Series X|SDocumentação conceitual
- Visão geral do envelopamento do XDSP
- Visão geral de uma convolução de fluxo único com envelope usando a API do XDSP
- Visão geral do XDSP
Confira também
XDSPXdspSubmitCommand
Erros do XDSP
Visão geral de uma convolução de fluxo único usando a API do XDSP
Visão geral de uma convolução de fluxo único com envelope usando a API do XDSP Visão geral de uma FFT/IFFT de fluxo único usando a API do XDSP
