collapse

* Posts Recentes

Rede de comboios elétricos totalmente autónomos 10 ton em Rust em realtime. por blabla
[18 de Setembro de 2022, 18:44]


NiMH por 18650 por almamater
[18 de Setembro de 2022, 17:21]


How We Get Down to 0.2nm CPUs and GPUs - TechTechPotato por blabla
[18 de Setembro de 2022, 15:38]


Nova secção de Raspberry Pi Bare Metal em C e em Rust e Systems Programming por blabla
[04 de Setembro de 2022, 08:55]


The code for AGI will be simple - John Carmack and Lex Fridman por blabla
[29 de Agosto de 2022, 07:36]


Wavelets: a mathematical microscope por blabla
[28 de Agosto de 2022, 20:50]


Bom livro - Dive Into Systems por blabla
[28 de Agosto de 2022, 12:19]


graus negativos inclinação por josecarlos
[28 de Agosto de 2022, 11:31]


Super obsolescência super programada? por SerraCabo
[06 de Agosto de 2022, 11:36]


Motor de aspirador por dropes
[02 de Agosto de 2022, 22:18]

Autor Tópico: Fiz um port dos Audio filters da WebAudio API  (Lida 533 vezes)

0 Membros e 1 Visitante estão a ver este tópico.

Offline blabla

  • Mini Robot
  • *
  • Mensagens: 245
Fiz um port dos Audio filters da WebAudio API
« em: 06 de Dezembro de 2021, 12:22 »
Bom dia a todos,

Fiz um port dos Audio filters da WebAudio API. Estes filtros do WebAudio normalmente são implementados pelos “fabricantes” dos diferentes Browser’s e normalmente são feitos em C++. Tradicionalmente o seu código é muito mais complexo de se entender pois a API é extensa, neste port eles estão implementados de uma forma muito mais simples e mais fácil de entender.
No entanto continua a ser DSP’s, mas eles são muito fáceis de usar.

O código, os testes, e a geração dos gráficos e as FFT’s está todo implementada em Rust, o original era em Python, contudo já era um port da versão em C++.

Peço-vos que vejam a página do projeto pois eu esforcei-me para que fosse fácil de visualizar o comportamento dos diferentes filtros, tanto em ganho vs frequência como em desfasamento de fase vs frequência.

Podem também visualizar facilmente a resposta do filtro.

Todos os filtros são implementados enquanto parâmetros de um filtro BiQuad IIR (Infinite Impulse Response) de segunda ordem.

Os filtros implementados e parametrizáveis são os seguintes:

-low pass
-high pass
-band pass
-all pass
-peak
-PeakEQ_constant_Q
-low shelf
-high shelf
-notch
-Parametric 10 Band Equalizer

Os filtros são parametrizáveis em:
-frequency
-sample rate
-q_factor
-gain (dB)

GitHub - Audio filters in Rust
https://github.com/joaocarvalhoopen/Audio_filters_in_Rust

Os detalhes deste port e todas as referências estão na página do projeto.

A licença é MIT Open Source.

Obrigado,

Cumprimentos,
João
« Última modificação: 08 de Dezembro de 2021, 19:34 por blabla »

Offline blabla

  • Mini Robot
  • *
  • Mensagens: 245
Re: Fiz um port dos Audio filters da WebAudio API
« Responder #1 em: 08 de Dezembro de 2021, 19:33 »
Boa noite,

hoje tinha algum tempo livre e decidi implementar neste projeto um 10 Band Equalizer paramétrico, implementei-o usando 10 filtros Peak_EQ com fator Q constante (novo tipo), com eles cálculo os coeficientes de um filtro IIR BiQuad de 2º ordem. Eles estão colocados em cadeia ou sequência.
O ganho e o Q_factor pode ser mudado em tempo real.

Coloquei um exemplo já, parametrizado com as respetivas respostas de frequência, tanto em gain (dB) como em Phase Shift  (são os últimos dois gráficos da pág do projeto).

Mais uma vez a implementação é em Rust, mas é fácil de perceber, mesmo para quem não saiba muito de Rust. Coloquei todas as referencias de modo a que seja fácil a outras pessoas desenharem o seu próprio equalizador, lendo aquilo que eu li e vendo o meu código.

O código está suficientemente genérico para que possa ser usado para criar Equalizadores com qualquer números de bandas ou frequências.

Obrigado,

Cumprimentos,
João

Offline TigPT

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 5.364
    • Tiago Rodrigues
Re: Fiz um port dos Audio filters da WebAudio API
« Responder #2 em: 20 de Dezembro de 2021, 13:39 »
Obrigado por partilhares, vou espreitar :)