Arduino as audio crossover/frequency filter?

Hi all

I'm not sure if this is doable, but I have a project idea I'd like to attempt (if it's broadly doable) to use an arduino (preferably a nano or pro micro) in order to take an incoming audio signal from a mic, and then only output a certain frequency bandwidth for outputting to a small audio amplifier.

Effectively it's to make a certain kind of voice changer device, but one that only really changes the frequency of sound permitted to pass through, rather than something that adds other effects.

Can also be considered as combination of a high & low pass filter combined (bandpass filter?).

I have no idea if an arduino can do this, and have been looking online for similar projects but not found a suitable one so far.

If this is really complex to do, or cannot be done with arduino then I guess I would look for some small modules that might already just do this. I'm not precious about this actually being done with an arduino as such, but I like messing with them and have plenty spare, so figured I'd try to do it that way if it's feasible.

Appreciate any useful info, thanks! :slight_smile:

Probably not... The basic Arduino has a 10-bit ADC, and no built-in DAC. And, the ADC can't sample accurately at "CD quality" sample rates. Beyond that, I'm not sure if it has enough processing power or not. (There is an FFT library, but I'm pretty sure it's not fast-enough for quality audio use.... Most people use it to make spectrum analyzer effects/displays.)

then I guess I would look for some small modules that might already just do this.

There is something called the [u]miniDSP[/u], but it might be cheaper to buy an [u]active crossover[/u].

You can also build analog filters with op-amps. I have an old book called [u Active Filter Cookbook[/u]](, but I assume you can find all of the information & formulas online now.

Yes you want a bandpass filter SO LOOK IT UP and build one! Nothing else required.


This is something that could be done with the audio libiary that runs on the Teensy board. This is not an Arduino but is very similar.

It is a bit complex as you would have to use a digital filter to do the filtering. This involves doing some simple maths on the previous n samples, where n is a number determined by how sharp you want to roll off of the filter. Look up DSP for how to do it.