waltercruz Veterano |
# mar/17
Fala pessoal. Tô ensaiando escrever sobre zero delay feedback filters. É um assunto bem nerd e deve ter pouco interesse. Provavelmente devo ter cometido dois ou três erros no texto abaixo, então, já peço desculpas por eles.
Soft-synths e zero delay feedback filters
Ou, o que veio primeiro: o ovo ou a galinha.
0df é outra dessas palavras mágicas que aparecem no mundo dos soft-synths. Mas o que é exatamente é?
Primeiro, vamos ao mundo básico do que seria uma emulação de analógico num software: é basicamente transformar o comportamento do circuito em equações. Mas não daria pra apenas jogar o circuito todo num 'emulador de circuitos' e ter o som do synth? Olha, até dá. Existe um simulador de circuitos muito bom chamado Spice onde seria possível fazer isso. O problema é: emular um circuito inteiro ainda é muito custoso computacionalmente, não teríamos um synth que funcionasse em tempo real. Tocar uma nota e esperar algum tempo para ouvi-la não seria legal, não é mesmo?
Para resolver isso hoje em dia, são usadas equações que implementam partes do circuito. É preciso que essas equações sejam rápidas o suficiente para serem executadas em tempo real.
Um dos componentes que queremos emular desses sintetizadores é o filtro. Acontece que todo circuito de filtro de um feedback loop, ou seja, o sinal é processado duas vezes. Basicamente, para cada estágio do filtro, ida e volta, duas vezes. Num filtro de 24db como o filtro de moog, esse processo ocorre no mínimo 4 vezes (uma para cada estágio do filtro, de 6db de atenuação). Note que essas realimentações no circuito são o que criam as distorções analógicas que apreciamos no som.
Num primeiro estágio, pensaram apenas em 'ok, vamos codificar um filtro genérico sem pensar muito nessas complicações todas'. Podemos adicionar uma distorção genérica depois. Funciona, mas não está exatamente emulando o synth original.
Uma solução mais avançada: vamos inserir um pequeno delay no som para podemos fazer as contas desse loop. O menor delay possível no mundo digital: 1 sample. Na configuração mais comum que usamos em áudio, 44.1k, um sample em 44.100 é 1/44.000 segundos. Imagine isso do ponto de vista de um PROGRAMADOR, sem pensar muito no problema que ele está resolvendo. Ora, ele vê um problema que deve ser resolvido num loop: para cada estágio do filtro refazer a equação 2 vezes. Adiciona 1 sample de delay para dar tempo de fazer todas essas contas. Logicamente, isso 'resolve' o problema. E foi assim que muitos filtros de softwares foram escritos esses anos todos - e muitos são escritos dessa maneira.
Mas esse atraso, por mínimo que seja, faz com que ALGO se perca no som. Se você adicionar o resonance na equação, você está adicionando uma outra camada de som que vai sofrer esse delay. Imagine agora um som onde você tenha um pouco de resonance no filtro, e esteja alterando o knob do filtro. Pense que de alguma forma o filtro e o resonance não estão dançando juntos. Aliás, mesmo sem levar em conta o resonance, é como se as partes do filtro estivessem 'dançando' um pouco fora do ritmo. Eu sei, é uma metáfora horrível. Um dia eu penso numa melhor. E se você adicionar ainda modulação em frequência de áudio a isso, tudo explode.
Para tornarmos esse delay menor, uma coisa que podemos fazer é fazer as contas executarem mais rápido. O famoso oversampling: ao invés de rodar o código do filtro a 44.100, executamos ele numa frequencia maior. Digamos que seja o dobro: 88.200). O delay está reduzido pela metade, mas dobramos a quantidade de contas a serem feitas, ou seja: aumentamos o requerimento de CPU. Se formos quadriplicar o sampling rate (delay reduzido a 1/4), aumentamos o requerimento de CPU 4 vezes.
Estamos numa situação parecida com aquela pergunta infantil: o que veio primeiro: o ovo ou a galinha? Para calcularmos o resultado da equação do filtro, precisamos saber o resultado da equação do filtro.
Foi basicamente o que muita gente que desenvolve soft-synths começou a perceber uns anos atrás. E aí eles procuraram ferramentas matemáticas diferentes para resolver essas equações. Tem como!
Obviamente essas soluções são mais complicadas e carregam em si mais custo computacional, mas elas resultam em um filtro que soa muito mais parecido com um analógico. O material de referência hoje em dia é um livro escrito por um engenheiro da Native Instruments, The Art of VA Filter Design, de Vadim Zavalishin. Entre os synths que usam essas técnicas estão o Monark da Native Instruments, o Diva da U-He, as emulação da empresa TAL (TAL Uno LX e TAL Bass 101).
Não significa que filtros que não sejam 0df sejam ruins ou que filtros que sejam 0df sejam melhores apenas por isso: dá pra escrever um código bom sem usar 0df, ou um código ruim usando 0df. Um filtro sem 0df não é tanto uma emulação de um filtro analógico, mas pode ser bom por si só. Mas provavelmente quem estudou essa matemática toda pra escrever filtros 0df tem um domínio melhor de toda a questão envolvida.
https://urs.silvrback.com/zero-delay-feedback http://science-of-sound.net/2016/07/zero-delay-feedback-vs-oversamplin g/
|
Synth-Men Veterano |
# mar/17
· votar
Meu caro! Que papo cabeça!
Sei que o mundo digital são números e logaritmos, mas estou considerando-o como um sistema semelhante ao hardware original.
O Aumento do sampling rate diminuiria o tempo do looping por todo o sistema de filtro positivo?
Considerando o resultado da alteração de apenas um estágio (os outros seriam iguais) deste intervalo, haveria o risco/possibilidades de passar mais sinal pelo sistema, ou seja o próprio sinal se sobrepor?
Neste caso teríamos um filtro atuando mais rápido/agressivo com o que estamos acostumados ou um som/resultado (pós filtro) ligeiramente melhor, já que a cada looping ou estágio os sinais estariam "supostamente" sobrepostos? Seria quase um upsampling (dependendo da frequência alterada)?
No meu raciocínio (ignorância na verdade) é que diminuindo o intervalo do tempo do looping através do aumento do sampling rate, também estou aumentando a capacidade de sinal que pode circular no sistema do filtro, quanto a velocidade.
Nos dois textos, não há informações sobre o sincronismo dos dois fatores, por este motivo citei as duas dúvidas.
|
waltercruz Veterano |
# mar/17
· votar
Considerando o resultado da alteração de apenas um estágio (os outros seriam iguais) deste intervalo, haveria o risco/possibilidades de passar mais sinal pelo sistema, ou seja o próprio sinal se sobrepor?
Em alguns synths, como por exemplo, o minimoog, vc pode pegar o sinal de saída e processar mais uma vez, aliás, um truque comum nos minimoogs.
https://www.sweetwater.com/insync/feedback-loop-trick-for-minimoogs/
Se continuarmos fazendo o upsampling, perceberemos o som ligeiramente melhor. Não é como se passasse mais sinal, mas começaríamos a ver o filtro com mais... definição. Algo do tipo :)
Mas veja, essa questão do upsampling resolveria até um ponto: em 44.1k estamos tirando 44.100 'fotografias' do som por segundo, dobramos isso e dobramos o processamento, MAS isso ainda não chega no som do analógico - essa questão do loop no circuito aparece na transposição do problema do analógico para o digital.
(Espero que tenha entendido sua pergunta, haha)
|