O plugin Audio Modulation fornece controle dinâmico sobre parâmetros de áudio de ponto flutuante, como volume e afinação, dos sistemas de Componente e Blueprint.
O plugin Audio Modulation está desabilitado por padrão. Para habilitá-lo, siga estas etapas:
Selecione Editar > Plugins para abrir o painel Plugin.
Use a barra de pesquisa para encontrar o plugin.
Habilite a caixa de seleção correspondente.
Reinicie o Unreal Editor.
Tipos de ativos
Há cinco tipos de ativos diferentes que fornecem a funcionalidade da modulação de áudio.
| Tipo de ativo | Descrição |
|---|---|
Parâmetros que fornecem contexto sobre como um valor de modulação é normalizado, exibido e combinado com outros valores. | |
Conectores que referenciam a um parâmetro de modulação. | |
Moduladores que podem aplicar vários valores de barramento de controle de uma vez. | |
Moduladores de conector híbridos que remapeiam vários valores de barramento de controle em um único valor de saída. | |
Moduladores de conectores híbridos que geram valores ao longo do tempo. |
Use esses ativos para criar a base do pipeline de modulação antes de anexá-lo a um destino de modulação de endpoint.
Para criar um ativo de modulação de áudio, siga estas etapas:
No Navegador de Conteúdo, clique no botão Adicionar.
Em Áudio > Modulação, selecione o tipo de recurso desejado.
Parâmetros de modulação
Os parâmetros de modulação fornecem contexto sobre como um valor de modulação é normalizado, exibido e combinado com outros valores.
Cada parâmetro de modulação tem as seguintes propriedades base (além de outras, dependendo da classe):
Valor padrão do parâmetro padrão: o valor padrão de modulação. Esta função serve como um valor de desvio que deve ser definido para que não haja alteração na entrada quando um modulador que faz referência a este parâmetro for combinado com outro. Matematicamente, o valor deve ser selecionado para que a função de mixagem seja efetivamente reduzida a uma função de identidade quando definida como uma entrada.
Nome de exibição da unidade: a unidade a ser exibida nas referências no Unreal Editor. Essas informações são apenas para fins de desenvolvimento, pois serão removidas das compilações.
Existem diversas classes de parâmetros de modulação integradas compatíveis com diversos casos de uso, incluindo mixagem de volume e manipulação de frequência.
O plugin Audio Modulation inclui ativos de parâmetro de modulação prontos para os parâmetros mais comuns, como Volume e Afinação.
Para visualizá-los no Navegador de Conteúdo, siga estas etapas:
Clique no botão Configurações.
Habilite Mostrar conteúdo da engine e Mostrar conteúdo do plugin.
Vá até All/Engine/Plugins/Audio Modulation Content.
Sobre valores de modulação
Os valores de modulação são transformados entre dois espaços de valor:
Unitário: valor em unidades associado ao parâmetro de modulação. Por exemplo, decibéis (dB) para um parâmetro de modulação de Volume. Os valores unitários são mapeados para valores normalizados.
Normalizado: valor entre um intervalo normalizado de 0,0 a 1,0 para passagem e mixagem uniformes.
Os valores de modulação se misturam quando vários moduladores se vinculam a um único destino de modulação. A combinação depende do parâmetro de modulação associado. Confira abaixo alguns exemplos de como alguns dos tipos de parâmetros de modulação integrados lidam com a mixagem:
Volume: as reduções de volume são aditivas. Por exemplo, se dois barramentos de controle tiverem valores de -6 dB e -12 dB, respectivamente, o volume do destino da modulação será definido como -18 dB.
Frequência do filtro passa-alta: seleciona o valor máximo. Por exemplo, se dois barramentos de controle tiverem valores de 1.000 Hz e 500 Hz, respectivamente, a frequência do filtro passa-alta do destino da modulação será definida como 1.000 Hz.
Frequência do filtro passa-baixa: seleciona o valor mínimo. Por exemplo, se dois barramentos de controle tiverem os valores de 1000 Hz e 500 Hz, respectivamente, a frequência do filtro passa-baixa do destino de modulação será definida como 500 Hz.
Como criar classes de parâmetros de modulação personalizados
Você pode criar sua própria classe de parâmetro de modulação herdando da classe base USoundModulationParameter e implementando as seguintes funções:
GetMixFunction: deve retornar uma função que combina um valor de entrada e um valor de saída.
GetUnitConversionFunction: deve retornar uma função que transforma um valor em espaço unitário.
GetNormalizedConversionFunction: deve retornar uma função que transforma um valor em espaço normalizado.
Para obter mais informações, confira a Referência da API de C++ sobre modulação de áudio.
Barramentos de controle
Barramentos de controle são conectores que referenciam um parâmetro de modulação. Eles podem ser:
Usados por mixagens de barramento de controle e geradores de modulação para modular.
Referenciados e remapeados por patches de parâmetro.
Em geral, é uma boa ideia criar um barramento de controle para cada categoria de sons que você deseja modular. A categoria pode ser geral, como efeitos sonoros (CB_SFX) ou específica, como sons de ataque (CB_Attacks). Neste exemplo, um som de golpe de espada pode ter os dois barramentos de controle em seu pipeline de modulação.
Propriedades do barramento de controle
| Propriedade | Descrição |
|---|---|
Ignorar | Se essa opção for habilitada, o barramento de controle enviará o valor padrão do parâmetro a qualquer destino de modulação anexado. O barramento de controle permanece ativo em ambos os casos. |
Parâmetro | O parâmetro de modulação a ser usado. O valor padrão do parâmetro de modulação determinado é usado como o valor padrão desse barramento de controle. |
Substituir endereço | Se esta opção for habilitada, você poderá alterar a propriedade Endereço. |
Endereço | O nome da referência interna (usado por algumas funções de Blueprints). O padrão é o nome do ativo, mas isso pode ser alterado ao habilitar Substituir endereço. |
Geradores | Uma matriz de geradores de modulação que controlam o barramento de forma algorítmica. |
Mixagens de barramentos de controle
Mixagens de barramento de controle são moduladores que ajudam a:
Influenciar vários valores de barramento de controle de uma vez.
Modular com barramentos de controle compartilhados com outras mixagens de barramento de controle.
Use perfis de mixagem para testar e ajustar áudios em tempo real.
Propriedades de mixagem de barramento de controle
| Propriedade | Descrição |
|---|---|
Ativar mixagem | [Botão] Ativa a mixagem no Índice do perfil fornecido em todos os mundos ativos. |
Desativar todas as mixagens | [Botão] Desativa todos as mixagens em todos os mundos ativos. |
Desativar mixagem | [Botão] Desativa a mixagem no Índice do perfil fornecido em todos os mundos ativos. |
Carregar mixagem do perfil | [Botão] Carrega a mixagem no Índice do perfil fornecido. Isso substitui todas as configurações que você possui atualmente na mixagem. Perfis de mixagem são carregados de arquivos |
Salvar mixagem em um perfil | [Botão] Salva a mixagem no Índice do perfil fornecido. Isso substitui as configurações presentes no índice. Perfis de mixagem são salvos em arquivos |
Mixagem solo | [Botão] Desativa todas as outras mixagens e ativa a mixagem no Índice do perfil fornecido em todos os mundos ativos. Apenas para testes no editor. |
Índice do perfil | O índice (inteiro) do perfil de mixagem alvo pelos botões de perfil de mixagem. Cada perfil de mixagem tem uma matriz de etapas de mixagem que determinam como os destinos de modulação anexados são modulados. |
Etapas de mixagem | Uma matriz de referências do barramento de controle e informações de mixagem associadas. |
Etapas de mixagem > Barramento | O barramento de controle pelo qual o Valor será enviado. |
Etapas de mixagem > Valor | O valor a ser enviado pelo barramento de controle. Você pode definir o valor em unidades ou o valor normalizado diretamente |
Etapas de mixagem > Tempo de ataque | A duração (em segundos) para ir do valor padrão do parâmetro de modulação até o Valor fornecido quando a mixagem é ativada. |
Etapas de mixagem > Tempo de liberação | A duração (em segundos) para ir do Valor fornecido ao valor padrão do parâmetro de modulação quando a mixagem é desativada. |
Duração | Quando definido como um valor maior ou igual a 0, a mixagem iniciará um temporizador quando for ativada. Quando o temporizador atingir o valor de duração definido, a mixagem se desativará. |
Reacionar ao ativar | Controla o comportamento quando você ativa uma mixagem que já foi ativada. Quando definido como Falso, nada acontece (a não ser que o temporizador seja restaurado). Quando definido como Verdadeiro, a mixagem retorna todos as etapas aos seus valores padrão e é ativada, permitindo que os ataques voltem. O comportamento é semelhante ao acionamento de um Envelope. |
Os botões do perfil de mixagem no painel Detalhes da mixagem do barramento de controle são úteis para ajustar e testar a mixagem em Jogar no Editor (JNE) em tempo real. No entanto, a implementação final do controle de mixagem deve estar em Blueprints.
As propriedades das mixagens do barramento de controle foram atualizadas, e algumas funções envolvendo mixagens do barramento de controle têm entradas para as novas variáveis Duração e Reacionar ao ativar:
Patches de parâmetros
Patches de parâmetro são moduladores de conector híbridos úteis em dois aspectos principais:
Eles transformam um ou mais valores de barramento de controle em um único valor de saída.
Você pode usá-los para personalizar curvas de valor do barramento de controle, o que é útil para remapear valores e criar diferentes efeitos de esmaecimento.
A funcionalidade de atribuir um patch de parâmetro com vários barramentos de controle a um destino de modulação é semelhante à configuração individual desses barramentos de controle ao destino de modulação.
Propriedades de patches de parâmetros
| Propriedade | Descrição |
|---|---|
Ignorar | Se essa opção for habilitada, o patch enviará o valor padrão do parâmetro a qualquer destino de modulação anexado. O patch de parâmetro permanece ativo em ambos os casos. |
Parâmetro | O parâmetro de modulação que determina como os barramentos de controle (em Entradas) são mixados. |
Entradas | Uma matriz de referências de barramentos de controle e informações de transformação associadas. A saída de cada uma dessas Entradas é mixada usando a função de mixagem do patch de parâmetro de modulação. Se não houver barramentos de controle na matriz, o patch enviará o valor padrão do parâmetro aos destinos de modulação anexados. |
Entradas > Sample-And-Hold | Se habilitado, armazena o valor do barramento de controle quando o patch de parâmetro inicializar e o mantém durante o tempo de vida do patch. |
Entradas > Tipo de curva | A curva a ser aplicada ao remapear os valores normalizados do barramento de controle [0,0 - 1,0]. As opções incluem:
|
Entradas > Barramentos | O barramento de controle de entrada. |
Geradores de modulação
Os geradores de modulação são moduladores de conector híbridos que geram valores ao longo do tempo. Você pode modular com eles definindo-os nas propriedades de barramento de controle ou destino de modulação.
O plugin fornece implementações para os seguintes tipos:
Oscilador de baixa frequência (LFO): gera valores com base nas oscilações de uma determinada forma de onda, como senoidal ou quadrada.
Envelope Follower: gera valores com base na amplitude de um barramento de áudio específico.
AD Envelope: gera valores com base em um determinado envelope de deterioração de ataque.
Como criar geradores de modulação personalizados
Você pode criar seus próprios geradores de modulação com os modelos de geração de código fornecidos para a classe USoundModulationGenerator, que gera o código base necessário para criar e registrar um gerador.
Para criar uma classe USoundModulationGenerator, siga estas etapas:
Selecione Ferramentas > Nova classe C++.
Selecione Todas as classes na janela Escolher classe pai.
Selecione SoundModulatorGenerator abaixo de SoundModulatorBase.
Você deve implementar as seguintes funções:
GetValue: deve retornar um valor em cache, normalizado e sem unidade entre 0,0 e 1,0. O valor é fornecido para destinos de modulação em escuta.Update: deve implementar o cálculo do valor em cache do próximo quadro.
Opcionalmente, você pode implementar as seguintes funções:
IsBypassed: deve retornar um valor booleano baseado na inclusão ou não do valor do gerador nos cálculos de destino. Por padrão, encaminha o valor da propriedadeUSoundModulationGenerator Bypassgerada para a Unreal Audio Engine.GetDebugValues: deve fornecer uma matriz de strings por instância de gerador a ser exibida em tempo de execução usando a família de comandos de depuraçãoau.Debug.SoundModulatorsem compilações não lançadas.GetDebugCategories: deve fornecer uma matriz estática de nomes de campos correspondentes aos valores fornecidos por esses valores de instância.
Para obter mais informações, confira a Referência da API de C++ sobre modulação de áudio.
Destinos de modulação
Um destino de modulação é um endpoint anexado a um objeto de áudio que fornece um valor float base (nas unidades especificadas) a ser modulado por ativos de modulação de áudio.
Os seguintes objetos têm destinos de modulação:
Ondas sonoras
Fontes MetaSound
Componentes de Áudio
Componentes Synth
Classes de som
Submixagens
Efeitos de origem (apenas BitCrusher e Chorus)
Encontre os destinos de modulação para cada objeto de áudio suportado no painel Detalhes, em Modulação. Cada objeto lista os tipos de destino de modulação suportados que determinam qual propriedade, como volume ou afinação, é modulada.
Para usar um destino de modulação, habilite a caixa de seleção Modular associada e adicione o conector desejado (barramento de controle, gerador de modulação ou patch de parâmetro) à matriz.
Opções de roteamento do destino de modulação
Alguns destinos de modulação, como aqueles em componentes de áudio, fornecem opções de roteamento baseadas em herança. Um objeto filho pode herdar o roteamento de modulação de um objeto pai. Especificamente, componentes de áudio podem herdar do ativo de som anexado, e sons podem herdar da classe Sound anexada.
| Opção de roteamento | Descrição |
|---|---|
Desabilitar | Desativa o roteamento de modulação. |
Herdar | Herda o direcionamento de modulação do objeto pai. Essa opção é o padrão porque as classes Sound são o local mais comum para definir a modulação. |
Substituir | Substitui o roteamento de modulação do objeto pai com as configurações fornecidas. |
União | Usa o roteamento de modulação herdado do objeto pai e as configurações fornecidas. Se o mesmo modulador estiver nos dois conjuntos, ele calculará apenas uma vez. |
Integração do MetaSounds
O plugin Audio Modulation fornece os seguintes nós do MetaSound:
Get Modulator Value: retorna o valor do modulador determinado, normalizado ou em espaço unitário.
Mix Modulators: retorna um valor de parâmetro misto entre dois moduladores específicos, normalizado ou em espaço unitário.
Para obter mais informações sobre o sistema MetaSound, consulte a documentação do MetaSounds.
Modulação de áudio e coocorrência
Há uma CVar que permite que a modulação de volume em fontes afete a opção Interromper mais silencioso na coocorrência. Ela se chama:
au.Concurrency.IncludeVolumeModulation
Para encontrar o menu, clique duas vezes em Ativo de coocorrência, na aba Aoocorrência, em Regra de resolução.
Quando definida como 0, a modulação de volume não é incluída na avaliação de coocorrência.
Quando definida como 1, a modulação de volume será incluída para one-shots, mas não para sons em loop.
Quando definida como 2, a modulação de volume é incluída para todos os sons
Resumo da API do Blueprint
Com o Blueprint, você pode criar e controlar o pipeline de modulação dinamicamente e usá-lo para acionar outros sistemas, como a jogabilidade ou efeitos visuais.
A maioria das funções de Blueprints relacionadas à modulação de áudio está em Áudio > Modulação. Veja a tabela abaixo para obter uma visão geral das funções.
| Função | Variantes | Descrição |
|---|---|---|
Ativar… | Mixagem de barramento de controle | Ativa o objeto fornecido. |
Limpar… | Todos os valores de mix do barramento de controle global, Valor de mix do barramento de controle global, Modulador | Restaura/desvincula os parâmetros de barramento fornecidos aos valores padrão. |
Criar… | Gerador de AD Envelope, Barramento de controle, Mixagem de barramento de controle, Etapa de barramento de controle, Gerador de seguidor de envelope, Gerador LFO, Destino de Modulação. | Cria um objeto com os valores padrão fornecidos. Para Destino de Modulação, as referência de Barramentos de controle e Geradores contam seus destinos, portanto esse objeto se torna uma das referências. Barramentos de controle e geradores só estarão ativos se a contagem de referência for maior que 0. |
Desativar… | Todas s mixagens de barramento de controle, Mixagem de barramento de controle | Desativa o objeto fornecido. |
Obter modulador | N/D | Obtém o modulador do destino de modulação fornecido. |
Obter valor do modulador | N/D | Obtém o valor normalizado do modulador fornecido. |
Obter moduladores do destino | N/D | Obtém a lista de moduladores atualmente aplicados a um alvo de modulação. |
Obter valor do modulador observado | N/D | Obtém o valor do valor do modulador observado do objeto de destino de modulação fornecido. |
O mix de barramento de controle está ativo | N/D | Verifica se o mix de barramento de controle determinada está ativa. |
Carregar mixagem de barramento de controle do perfil | N/D | Carrega a mixagem de barramento de controle de um perfil na definição de mixagem do UObject, desserializado de um arquivo |
Salvar mixagem de barramento de controle no perfil | N/D | Salva uma mixagem de barramento de controle em um perfil, serializado em um arquivo |
Definir... | Mixagem de barramento de controle, Mixagem de barramento de controle por filtro, Valor global de mixagem de barramento de controle, Modulador monitorado. | Define propriedades no objeto fornecido. Com Mixagem de barramento de controle por filtro, você pode usar filtragem de endereço no estilo OSC. |
Atualizar… | Mixagem de barramento de controle, Modulador | Aplica commit em atualizações do objeto fornecido no thread de áudio. |
Adicionar roteamento de modulação | N/D | Adiciona o conjunto fornecido de moduladores ao componente de áudio. Isso executa uma união lógica, para que moduladores duplicados não sejam adicionados. Para substituir completamente as configurações existentes, use Definir roteamento de modulação. |
Remover roteamento de modulação | N/D | Remove o conjunto fornecido de moduladores do componente de áudio. Isso executa uma subtração lógica dos conjuntos, de forma que os moduladores que não estejam no conjunto determinado permaneçam. |
Também há funções úteis fora do grupo Áudio > Modulação. Em particular, as funções Obter moduladores e Definir roteamento de modulação fornecem sobrecargas para componente de áudio e componente de sintetizador e podem ser usadas para obter ou definir os destinos de modulação de um componente.
Para obter mais informações, confira a Referência da API de Blueprint de modulação de áudio.
Sobre UObjects e proxies
Ao trabalhar com componentes e ativos de modulação de áudio, você normalmente edita valores de UObject. No entanto, a modulação de áudio não usa UObjects diretamente para processamento por dois motivos.
UObjects são executados no thread do jogo.
Os UObjects podem ser coletados como lixo em momentos fora do controle do sistema de modulação de áudio.
Como resultado, os valores definidos em UObjects são enviados a objetos no sistema de modulação de áudio no thread de renderização de áudio. É importante lembrar isso porque algumas funções de Blueprints editam o UObject e outras modificam o objeto proxy no sistema de modulação de áudio.
Quando uma função só modifica o valor UObject, você precisa fazer uma chamada à função de Blueprint Atualizar para enviar essas alterações ao proxy. Além disso, se você chamar uma função que não modifica o valor do UObject e, em seguida, chamar uma função para atualizar o proxy, o valor do UObject substituirá o proxy.
Embora a modulação de áudio seja executada no thread de renderização de áudio, ela é executada na taxa de bloco em vez da taxa de amostragem.