Teste

Teste

por Felipe Oliveira da Silva Netto -
Número de respostas: 1

Fiz um arquivo de teste para o KS. Você coloca os valores desejados de frequência e duração na lista que tem nele, ele envia pra sua implementação do KS, toca, mede (e mostra) a duração do sinal de saída e mede o volume com um medidor VU. Se a duração da saída diferir, acima de um dado "threshold", da fornecida na lista, ele imprime uma mensagem na tela principal do Pd.

Eu tentei fazer também uma medição da frequência com base no 7º trabalho menor, mas não deu certo, e eu não sei o porquê. Mesmo assim, eu deixei a tentativa de medidor de frequência no arquivo de teste; se alguém conseguir resolver, pode reenviar o arquivo corrigido aqui.

Em resposta à Felipe Oliveira da Silva Netto

Re: Teste

por Marcelo Queiroz -

Ó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.