Quero gravar ultrassom com microfone, dividir a frequência e ouvir o som transposto. Começo com um microfone normal para testes.
Eu tentei sox com rec and play até agora. Funciona, mas a latência é de 2 segundos.
rec -r 48000 -c 1 -t wav - pitch -1000 | play -t wav -
Como posso melhorar essa linha e reduzir a latência?
Minha configuração de áudio é
# API: ALSA v: k6.1.27-gentoo status: kernel-api
# Server-1: PulseAudio v: 16.1 status: active
Para a parametrização que você escolheu, é matematicamente impossível fornecer uma saída antes que haja muita entrada significativamente.
Como a mudança de tom (== divisão de frequência) requer filtros de reamostragem e filtros de alongamento de tempo, é intuitivo argumentar que eles têm atraso de grupo e, portanto, sendo causal, você incorre em um atraso significativo entre o sinal de entrada e o sinal de saída. Isso não é
sox
culpa - apenas como a matemática funciona.As soluções incluem:
O conhecimento de Linux/Unix/Tool não pode ajudá-lo aqui.
O problema realmente é que você está tentando fazer uma grande mudança de tom em sua taxa de amostragem de saída; como seu gravador ultrassônico deve, por motivos de Nyquist, já trabalhar com uma taxa de amostragem muito maior, talvez esse problema não ocorra dessa forma em sua aplicação atual.