Algoritmo de reverb de alta qualidade


11

Pesquisei um pouco neste site, mas surpreendentemente não encontrei muita informação relevante e meu conhecimento do DSP é muito, muito limitado.

Meu objetivo é bem simples: quero programar um reverb algorítmico em C ++ que pareça muito bom. Ou, mais exatamente, a melhor opção seria deixar o usuário final escolher o compromisso entre qualidade e uso da CPU.

Do que descobri até agora, é que, para criar um reverb, você deve alimentar o sinal seco em um algoritmo de reflexão precoce e depois em algo de reflexão tardia. Isso está correto?

Agora, encontrei um artigo extenso sobre a parte das reflexões tardias, usando a Rede de Retardo de Feedback ( REDUZENDO OS REQUISITOS DE REVERBERAÇÃO ARTIFICIAL USANDO REDES DE ATRASO DE FEEDBACK VARIANTES ). Pelo que li, o FDN é uma maneira de alta qualidade e não muito expansiva (em termos de CPU) de simular as reflexões tardias. Além disso, acho que você pode controlar a troca de qualidade / cobrança da CPU, alterando o número de linhas de atraso.

No entanto, não tenho absolutamente nenhuma idéia de como programar as primeiras reflexões (lembre-se? Sou realmente ignorante no domínio DSP).

Seria lógico para mim usar um tipo de atraso múltiplo, que tem a vantagem de ser fácil de programar e computacionalmente barato. Mas isso parece simples demais para ser verdade.

Além disso, meu instinto me diz que um ou vários filtros devem ser incluídos em algum lugar no caminho do sinal.

Alguém poderia esclarecer um pouco esse tópico para mim?

Duas notas:

  • Não estou buscando um reverb de convolução. Eu realmente não me importo com o realismo do reverb, mas, em vez disso, quero um bom som, tweakable, para não reverb com fome de CPU.
  • Além disso, a parte de codificação não é o que me preocupa, eu perguntaria no stackoverflow de outra forma. É realmente a parte DSP, e exatamente essa parte, que eu estou procurando :)

Respostas:


10

Você precisa gerar reflexões antecipadas com alguns toques de atraso (= convolução com a soma de um punhado de diracs); e a "cauda" com o que geralmente é implementado com uma rede de filtros all-pass (AP) e comb.

A primeira parte é trivial de implementar, mas difícil de parecer correta. Pode ser útil observar o posicionamento dos picos no topo das respostas de impulso pré-gravadas para ter uma idéia de que tipo de resposta é "natural". É difícil torná-lo facilmente parametrizável por algumas configurações, embora você possa se safar oferecendo um monte de predefinições para essa parte para obter um reverb "híbrido" ao Virsyn Reflect.

A cauda é onde os reverbs algorítmicos brilham (sem trocadilhos), uma vez que é fácil parametrizar. O avô dos reverbs algorítmicos é o de Schroeder.algoritmo. Observe que ele gera apenas uma "cauda", não reflexões precoces - você pode aumentá-lo com alguns toques de atraso para dar uma olhada. Não parece muito bom (muito "granulado"), mas é um começo decente - com isso você tem algo para mexer e ajuda a entender o impacto de cada parâmetro. Muitos reverbs algorítmicos elogiados, especialmente os dos anos 80 (Lexicon, Eventide, Publison), são apenas topologias afinadas de filtros all-pass e filtros comb. Eu suspeito que isso envolveu muitas tentativas e erros de ouvidos treinados, que foram muito bons em descobrir como soariam as alterações nos parâmetros ou na topologia, em vez de qualquer abordagem científica. Aqui está outra leitura interessante- mostrando a topologia de reverb favorita de Keith Barr. O midiverb original pode não ser a sua definição de "reverb algorítmico de alta qualidade", mas soa doce, e coloca em perspectiva saber que foi feito com um "dsp" capaz apenas de MACs com coeficientes de 0,5 ...

A sala Valhalla é o meu reverb algorítmico de software favorito - reserve um tempo para ler o blog do desenvolvedor e encontrar inspiração sobre o tipo de coisas que ajudam a acertar.


2
Esqueceu-se de mencionar o Freeverb como uma variante mais moderna (com código disponível, pode ser encontrada, por exemplo, no csound, ou ladspa codebase) do algoritmo de Schroeder.
Pichenettes

Muito interessante ! Também adoro os produtos Valhalla (o ValhallaShimmer brilha, sem trocadilhos também :)). Por que você menciona convolução para reflexão precoce? Dizer que um atraso normal de retardo múltiplo é suficiente?
Dinaiz

1
Mencionei convolução porque "atraso de toques múltiplos" é apenas um tipo específico de convolução (com alguns coeficientes não nulos, para que possa ser calculado da maneira ingênua e sem a artilharia associada a convoluções "densas"). De qualquer forma, como Hilmar apontou, um atraso de toques múltiplos pode ser um pouco ingênuo e depois de algumas reflexões, então se espalhando temporariamente (= filtro passa-baixo), o eco soa mais natural. Isso pode ser feito com um atraso de vários toques com um LP simples para cada toque; ou computando diretamente toda a parte das primeiras reflexões do reverb com um mecanismo de convolução e IRs predefinidos.
Pichenettes

8

Fazer um bom som de reverberação NÃO é fácil. As redes de retardo de feedback são definitivamente o caminho a percorrer. O algoritmo original de Schroeder, com todas as passagens e filtros de pente, sofre de "afinamento espectral", o que o torna metálico. Você precisa discar a atenuação dependente da frequência nas diferentes linhas de atraso que representam o tempo de reverberação (em função da frequência). As reflexões iniciais podem ser feitas através de uma linha de atraso derivada, também com alguma atenuação dependente da frequência e alguns difusores para correlacioná-las. Fazer estéreo também requer alguns meios de des correlação.

Existe uma implementação de código aberto bastante boa, chamada GVerb e usada, por exemplo, no Audacity. Uma pesquisa no google deve levar você a uma cópia (legal) do código-fonte.


Do seu post, parece fácil! Bem, pelo menos eu posso entender, exceto a parte sobre desacorrelação. O que você quer dizer exatamente com isso? Também sobre a atenuação dependente da frequência, acho que você quer dizer jogar alguns filtros e ajustar de ouvido as frequências de todas as linhas. De que tipo de filtro estamos falando? HP? LP? BP? Obrigado !
Dinaiz
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.