OK I want to step in and explain what I want in much more detail because even on DIY speaker forums few people understand the complexity of what I want to do. It is clear there are people here who are very knowledgeable in audio.
First, if I only need to do a couple of active filters, I would just stick with a miniDSP and call it a day. Boom, done, simple, small, and not horribly expensive. Of course, I need the common active filters like Linkwitz Riley filters for crossover and shelf filters for adjusting the frequency response for 8 channels, etc. But I also need a lot more.
I want to build the best possible small speaker. There are a lot more that goes into that than just some active filters. I need "dynamic" filters.
Here is what I need that the miniDSP can't do.
- Multi-band compressor. Huge amounts of bass boost will be used. In order to protect the speaker from blowing itself up, a compressor/limiter is needed to dial back the bass when it exceeds the limits of the speaker. A compressor will compress the entire band, but I only want the compressor to compress the bass band, and hence the need of a multi-band compressor. This is easily done if a compressor is already available. Then, all that is needed is to separate the signal into multiple bands like a crossover does, apply a different compressor setting to each band, then sum everything back together.
- Equal loudness contour: At low volumes, we need a lot more bass for the sound to sound "balanced". At high volumes, our hearing sensitivity to bass and treble has increased, and we want progressively less bass and treble as volume is increased. I want to implement this to preserve tonal balance at all volume levels.
- Fake bass synthesizer. There is a psychoacoustic phenomenon where the ear can be tricked to think it is hearing a fundamental note lower than what it actually is with the right harmonic composition. It is used to make small speakers seem like it is playing bass when it is not. I want to have that for my speaker. A twist will be to activate this feature only above certain levels. For example, my speaker is capable of quite low and quite loud. It is capable of playing 40Hz at 95dB. But it can play 100Hz at 110dB. So eventually I want to program it in a way where the fake bass synthesizer is not activated until the incoming signal exceeds the limits of the speaker. For example, if I need to play 40Hz at 90dB, it'll just play 40Hz at 90dB. But if it needs to play 40Hz at 100dB, then the woofer will play 40Hz at its limit of 95dB and get the other the 5dB from the fake bass synthesizer making harmonics at 80Hz, 120Hz, 160Hz, etc where it is capable of playing 110dB.
- Lots of FIR filtering - Not only for linear phase crossovers, but also to correct group delay of woofers and room correction. For low frequencies a lot of power is needed for those long FIR's.
- Thermal compression compensator - Because the speaker is so small, the woofer requires 3-10x more power to achieve the same volume for bass as a normal sized speaker. 99% of the power is converted into heat. The problem is that the hotter the woofer gets, the more power the woofer needs to achieve the same volume because the sensitivity is reduced due to the higher temperature causing higher resistance. This means I need something to apply a boost to the woofer depending on the volume level. This is an advanced feature that needs to be written myself. A simplified implementation can be the same as the equal loudness contour, but after a certain volume it start boosting instead of cutting, but it is a "dumb" variable boost since it is not varying depending on the woofer's temperature based on a temperature model of the woofer.
- Thermal limiter: My speaker can play 105dB without distortion, but it doesn't mean it can play 105dB for long periods of time because it can't handle that level of power for very long. Therefore, the volume needs to be gradually backed down. It can play 100dB for maybe a few minutes, then it'll get too hot and need volume to be further reduced. I need a feature to monitor the average RMS level and gradually adjust the limiter up or down. So if I want to play the speaker for hours on end, it'll automatically limit the volume to say 95dB to prevent the speaker from melting. This is another feature that needs to be written myself.
I hope this gives a better idea of what I need.