Teste

Re: Teste

por Marcelo Queiroz -
Número de respostas: 0

Ótima contribuição, Felipe! Obrigado!

Mando de volta o arquivo com a parte da detecção de frequência modificada. O problema da implementação original é que o ofelia não trabalha com entrada de áudio e saída de controle: ou ele pensa que tudo é controle ou que tudo é sinal. Nessa versão, a análise é feita com [ofelia f -s11] (entrada e saída de sinal) mas o outlet é ignorado, e a resposta verdadeira é mandada via send/receive. Entretanto, o método para rastreamento da frequência pelo máximo pico espectral é bastante falho, pois nossos sons podem ter muito mais energia em algum múltiplo da frequência fundamental do que na própria F0. Fiz um ajuste bem simples dividindo a amplitude por uma função crescente para "penalizar" as frequências mais altas; ainda assim, de vez em quando ele estima o segundo harmônico ao invés da fundamental.

Um aspecto importante a mencionar é que todas as estimativas aqui possuem imprecisões inerentes aos parâmetros de análise. Por exemplo, a precisão da estimativa de F0 pelo bin de maior amplitude terá sempre um erro da ordem da resolução de análise, que é de 44100/65536 ou 0.67 Hz. Existem muitas técnicas de estimação de F0 para melhorar essa acurácia, inclusive com tamanhos de janela muito menores. Para efeito de comparação, adicionei o analisador [sigmund~], que com janelas de 1024 amostras obtém com muito maior acurácia o valor correto de 438.8 Hz para o comando |440 2< (lembrando que a frequência produzia pelo KS é de 44100/(L+0.5) = 44100/100.5 = 438.8 nesse caso).

A estimativa do tempo também é aproximada, pois o objeto [env~] calcula o RMS apenas a cada 1024 amostras, que correspondem a 0.0232 segundos, sendo que o sinal do KS começa num ponto arbitrário de uma dessas janelas e termina em um ponto arbitrário de outra janela. Assim, diferenças de medida de até 2x aquele valor, ou 0.0464 segundos, são normais e não devem ser consideradas erros.