Tangentially related, I recently had some hand-me-down high-end full tower speakers lose their integrated subwoofer amps. I bypassed them and wired in an external amp but people said the integrated DSP would be missing. That's when I learned about CamillaDSP [1] and CamillaFIR [2]. I got a calibrated UMIK-1 microphone and did a frequency sweep in the room. Then I applied the Camilla-computed FIR filter to my snapcast-sourced music stream on the Raspberry Pi 3 B I have networked into the living room. Now I have room-corrected and loudspeaker corrected fancy DSP and the speakers sound better than ever. Pretty fun, and very cheap. The Pi3 runs it using about 20% of its CPU. Not bad! I did the same process up in my office with some desk speakers and they sound great too (that time using EasyEffects to apply the filter in real-time rather than CamillaDSP).<p>[1] <a href="https://github.com/HEnquist/camilladsp" rel="nofollow">https://github.com/HEnquist/camilladsp</a><p>[2] <a href="https://github.com/VilhoValittu/CamillaFIR" rel="nofollow">https://github.com/VilhoValittu/CamillaFIR</a>
Looks like output only and only one stereo pair from USB is processed to outputs, but a really cool project.<p>Also, for those watching for it:
<a href="https://www.audiosciencereview.com/forum/index.php?threads/introducing-dspi-a-powerful-user-friendly-and-open-source-dsp-for-less-than-a-cup-of-coffee.69343/page-4#post-2514497" rel="nofollow">https://www.audiosciencereview.com/forum/index.php?threads/i...</a><p>> I can't take all of the credit. My little robot intern (Opus 4.5) has been very helpful with the busy work, leaving me free to handle the trickier planning and implementation. ;)
And here's the release thread for those of you wanting a bit more detail or to talk with the creator: <a href="https://www.audiosciencereview.com/forum/index.php?threads/introducing-dspi-a-powerful-user-friendly-and-open-source-dsp-for-less-than-a-cup-of-coffee.69343/" rel="nofollow">https://www.audiosciencereview.com/forum/index.php?threads/i...</a>
This looks very cool.<p>Since a Raspberry Pi Pico doesn’t have built-in audio output ports, I think the main thing blocking ordinary people from using it is figuring out the hardware? A link to a tutorial for how to add audio output would be useful.
Thank you! I will soon be producing a comprehensive introductory video on YouTube, which should make things more accessible.<p>There will also be an official plug-and-play custom board that includes all of the relevant IO, connectors and codecs.
This is awesome.<p>What are the odds a Raspberry Pi could keep up with BTrack?<p><a href="https://github.com/adamstark/BTrack" rel="nofollow">https://github.com/adamstark/BTrack</a>
Can I use this to connect my electric guitar straight to my pc, or use this DSP for guitar effects?
Pretty cool, though the assembly could be tightened in a few hot loops, eg:<p><pre><code> mov r3, r10
adds r5, r5, r3
mov r9, r5
</code></pre>
can be made into<p><pre><code> mov r9, r10
add r9, r5
</code></pre>
since r5 and r3 are both dead, and so are the flags
I wonder if you could do the same thing in reverse and have a cheap way to get multiple inputs.
I would love a cheap way to add 8–16 inputs to my PC; all the audio interfaces I found cost quite a bit.
The Topping Pro audio interfaces have ludicrously good inputs. The E8x8 has eight analog ins and eight outs plus more connectivity for $450. It is very cheap for what you get. The inputs are <i>crazy</i> good. $450 is also a good chunk of cash, so…<p><a href="https://topping.pro/E8x8-Pre/" rel="nofollow">https://topping.pro/E8x8-Pre/</a><p>For the $450 you get a lot of stuff. Preamps for mic and guitar pickups. Powerful headphone amp. It's clearly worth it if you make use of some of it, and potentially even just for the inputs alone. $450/8 = $56 per ludicrously clean input is good.<p>I bought an E1x2 kind of as a joke. Just to see how bad it was. It's actually really, really good.<p>And also:<p>It's actually possible to gang together multiple disparate audio interfaces. Let the audio stack keep them in sync with ASRC. Aggregate Device on macOS can do this. People say you can't but you can. Linux is good for this too. If you find a cheaper per channel input, this can actually be done; Piecemeal it.
> a cheap way to add 8–16 inputs to my PC<p>The cheapest option is probably some Behringer mixer with enough inputs and multitrack interface over USB, like XR18.
The ADCs on RP2040/2350 only have 12 bit resolution.
Yes, but this project doesn't do anything analog to begin with. It could just have several S/PDIF and I2S inputs, and convert that to USB. You probably don't want any processing then, and just pass the digital inputs straight to USB. The limit of how many channels you could simultaneously process would then be the USB bandwidth.
Even worse, the ENOB is closer to 9 bits in testing. It’s got horrible DNL/INL. Totally worthless for any audio unless you’re trying to do chiptunes or something.
FWIW, this project is entirely digital (audio in: USB, audio out: S/PDIF or I2S).<p>There are other projects for the Pico which implement S/PDIF in.<p>In either case, since it is digital, the quality (or lack of) of the internal ADCs should not matter.
I’ve been wanting to follow this tutorial for some time. I think this might make the whole thing way simpler and smaller if all I want is line in.<p><a href="https://www.raspberrypi.com/news/upcycle-a-sonos-play1/" rel="nofollow">https://www.raspberrypi.com/news/upcycle-a-sonos-play1/</a>
What would be the best way to have analog input and output?
I recently bought a Behringer U-phono UFO202 as a cheap DAC for my mini pc. Can this Pi thing replace it?
I use a UCA202 for the same purpose. Does yours output static sometimes when it sits for too long? Based on my testing this seems to be a Linux thing instead of a Behringer thing.
This Pi thing does not have a DAC.
Is there a guaranteed latency?
Hello. I am the creator of this project! Nominal latency is currently 8ms, with ±1ms of variance. All output channels are phase-locked, so this doesn't present a problem for multi-way crossover implementations.
85ms<p><a href="https://github.com/WeebLabs/DSPi/commit/ba8e481570e6a5ce3d35bb2642c919800ad6918f" rel="nofollow">https://github.com/WeebLabs/DSPi/commit/ba8e481570e6a5ce3d35...</a>
Nice.<p>I wonder if 264/520 kB RAM is also enough for a high quality parametric stereo reverb/echo effect? Should fit about 3/6 seconds of uncompressed 16-bit 44.1/48 kHz audio.<p>Also: Raspberry Pi Ltd - please keep increasing the RAM size in future iterations to unlock even more use cases.
> high quality parametric stereo reverb/echo effect<p>I’m sometimes annoyed that the home audio/audiophile world is so separate from the live/professional world.<p>For playing recordings with fancy effects, you can throw massive overkill CPUs at it with small batches, brutefir style, or you can do high-latency FFT filters, and you can get essentially perfect FIR reverb effects with a latency vs complexity tradeoff.<p>But the algorithm in the middle exists and is not <i>that</i> exotic. You divide your impulse response into a very short piece at the beginning, then a longer piece after that, then a longer piece after that, in exponentially increasing pieces. And then you add up the results, with straight addition and multiplication for the short one, and (carefully scheduled to avoid stalls) FFT convolution for the long ones, and you get basically arbitrary long FIR filters with logarithmic amortized complexity per sample and as low as zero sample latency if you are so inclined.<p>I think this is called “non-uniform partitioning” or something to the effect. I’m not aware of any serious, public implementation for audio use.
The RP2350 (Pico 2) supports external PSRAM so you can add several MB more there if you need it.
I have always wondered kind of bandwidth you could make by multiple channels of PSRAM driven by PIO/DMA. Individually they're not so speedy(although the APS6408L-OCH-BA seems pretty crazy) , but how many can you run simultaneously. In terms of the RP2350 it would be fascinating to see how many times a second could you replace the entire contents of SRAM.
Default specs matter a lot for worldwide availability and affordability, as well as for the willingness of people to spend a lot of time creating free software for it.
520KB of SRAM is actually on the high end for microcontrollers. It doesn't seem like much but SRAM is on-die and significantly lower density than DRAM. For comparison, it's the same type of memory used for CPU caches, which are also small!<p>You can easily find dev boards with 8MB of PSRAM online if you need it. Or you can buy the PSRAM and hook it up yourself. If you still need more memory than that then you're looking at the wrong chip for the job.
[dead]