5 ms·
Fully Featured Audio DSP Firmware for the Raspberry Pi Pico
- BoingBoomTschak 6mo agoAnd here's the release thread for those of you wanting a bit more detail or to talk with the creator: 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/ https://www.audiosciencereview.com/forum/index.php?threads/i...
- a96 6mo agoLooks like output only and only one stereo pair from USB is processed to outputs, but a really cool project. Also, for those watching for it: 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 https://www.audiosciencereview.com/forum/index.php?threads/i... > 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. ;)
- amelius 6mo agoIs there a guaranteed latency?
- alhirzel 6mo ago85ms https://github.com/WeebLabs/DSPi/commit/ba8e481570e6a5ce3d35bb2642c919800ad6918f https://github.com/WeebLabs/DSPi/commit/ba8e481570e6a5ce3d35...
- aa-jv 6mo agoOuch, thats pretty average, what a pity ..
- jamesfmilne 6mo agoThat's the maximum delay when adding a delay for synchronising with other sources. The end-to-end delay is about 10ms, according to this comment: 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/post-2520252 https://www.audiosciencereview.com/forum/index.php?threads/i...
- beepbooptheory 6mo agoWhy? This is a device more for home audio/audiophile uses it seems? Why does latency matter there?
- MomsAVoxell 6mo agoWould be nice to use it as a synthesis DSP if the latency were a bit better.
- ssl-3 6mo agoAudio systems get used for more than playing back music and film soundtracks. People use audio system at home to play electronic instruments. People also play video games. People do all kinds of stuff. Latency is an important factor in these things. Even videoconferencing and podcasting: With a microphone pointed at your face and a set of headphones used for monitoring that microphone, latency matters. (It matters more to some people than others -- some people can tolerate hearing themselves later and continue to speak just fine, while some others increasingly sound like they're having a stroke as monitoring latency goes up and eventually become unable to produce coherent strings of phonemes.)
- beepbooptheory 6mo agoHuh thanks for the info! I didn't know about any of this at all. Latency sounds like it could be an important consideration for some people.
- aa-jv 6mo ago
- zorgmonkey 6mo agoThe 85ms is configurable per-output delay for time alignment. That same file in the docs claims a typical end-to-end latency of 10 to 15ms.
- WeebLabs 6mo agoHello. 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.
- lysace 6mo agoNice. 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. Also: Raspberry Pi Ltd - please keep increasing the RAM size in future iterations to unlock even more use cases.
- Rohansi 6mo agoThe RP2350 (Pico 2) supports external PSRAM so you can add several MB more there if you need it.
- lysace 6mo agoDefault 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.
- Rohansi 6mo ago520KB 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! 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.
- acidburnNSA 6mo agoTangentially 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). [1] https://github.com/HEnquist/camilladsp https://github.com/HEnquist/camilladsp [2] https://github.com/VilhoValittu/CamillaFIR https://github.com/VilhoValittu/CamillaFIR
- MrBuddyCasino 6mo agoDid you ever use Dirac Live and can compare the results? Hardware that supports Dirac is unfortunately very expensive.
- vladvasiliu 6mo agoFWIW, I've tried Dirac Live and compared it to the correction suggested by REW [0]. In both cases, the measurements were taken with a UMIK-1, and the correction was done on a computer. Contrary to GP, I didn't have to fix borked components, just a random, untreated living room. Dirac seemed to have a fairly heavy-handed correction. In my case, I only had fairly narrow frequency ranges that needed correcting, but Dirac seemed to move much wider ranges at a time. It's also nearly impossible to tweak; you basically can only increase/decrease "the lows" or "the highs". But maybe I'm missing something. In contrast, the suggestions produced by REW were loaded in EasyEffects on Linux, and I could tweak everything to my heart's content. But I actually just left it alone, since it was good enough. --- [0] https://www.roomeqwizard.com/ https://www.roomeqwizard.com/
- MrBuddyCasino 6mo ago
- marlburrow 6mo ago[dead]
- wiradikusuma 6mo agoI recently bought a Behringer U-phono UFO202 as a cheap DAC for my mini pc. Can this Pi thing replace it?
- akho 6mo agoThis Pi thing does not have a DAC.
- deleted 6mo ago[deleted]
- justin66 6mo agoI 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.
- wiradikusuma 6mo agoOh no. I actually haven't used it, it's still sitting in my drawer. And yes it's a headless Debian.
- roxolotl 6mo agoI’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. https://www.raspberrypi.com/news/upcycle-a-sonos-play1/ https://www.raspberrypi.com/news/upcycle-a-sonos-play1/
- hexmiles 6mo agoI 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.
- lysace 6mo agoThe ADCs on RP2040/2350 only have 12 bit resolution.
- Kirby64 6mo agoEven 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.
- nereye 6mo agoFWIW, this project is entirely digital (audio in: USB, audio out: S/PDIF or I2S). There are other projects for the Pico which implement S/PDIF in. In either case, since it is digital, the quality (or lack of) of the internal ADCs should not matter.
- gsliepen 6mo agoYes, 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.
- lysace 6mo agoYes, but we weren't talking about the (current) scope of this project.
- mattclarkdotnet 6mo agoThe analog input will use separate ADC modules, just as the analog output uses separate DACs. DSPi itself is purely digital (OK, excepting the PWM based sub out). These modules are just a few dollars on AliExpress for ~96dB SINAD
- joenot443 6mo agoThis is awesome. What are the odds a Raspberry Pi could keep up with BTrack? https://github.com/adamstark/BTrack https://github.com/adamstark/BTrack
- Neywiny 6mo agoPi or pi pico? At first glance it looks like that software is designed for double precision floats. That would certainly be some compute. The M0+ doesn't have hardware floating point let alone double precision. The M33 on the newer chip I think has hardware single precision float so a simple find-replace should let it go. If it's not doing anything else and the sample rates aren't outrageous it might be doable but I'd have to dig into the code more to see how much work they're doing per sample.
- mattclarkdotnet 6mo agoIt's for the pico. RP2040 works fine, but RP2350 has a hardware FPU and much more processing capability, so supports more channels and filters
- phkahler 6mo agoWhat would be the best way to have analog input and output?
- MomsAVoxell 6mo agoZynthian.
- dmitrygr 6mo agoPretty cool, though the assembly could be tightened in a few hot loops, eg: mov r3, r10 adds r5, r5, r3 mov r9, r5 can be made into mov r9, r10 add r9, r5 since r5 and r3 are both dead, and so are the flags
- abhiraj_patwa 6mo agoCan I use this to connect my electric guitar straight to my pc, or use this DSP for guitar effects?
- SoleilAbsolu 6mo agoLooking through the GitHub and the AudioScienceReview link - this appears to be specifically about firmware features. You'd need to ensure that hardware inputs on device have input impedance of at least 250Kohms, probably closer to 1Megohm to prevent loading and signal loss if plugging guitar right in. I'd also assume (didn't see confirmation) that I/O is at line level, which is significantly higher than instrument (passive guitar) level, but this device can clearly add/adjust gain along the way. If you use active pickups with a built-in preamp like EMGs, it would probably work just fine.
- a96 6mo agoNo, like I commented earlier it's a (digital) audio output from USB only and the DSP part is mostly filters that wouldn't be musically very useful. But there seems to be new features being planned all the time, so who knows what it might do in the future.
- skybrian 6mo agoThis looks very cool. 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.
- WeebLabs 6mo agoThank you! I will soon be producing a comprehensive introductory video on YouTube, which should make things more accessible. There will also be an official plug-and-play custom board that includes all of the relevant IO, connectors and codecs.
- kcoul 6mo agoIn the meantime, what would you recommend (if there's anything off-the-shelf that would work in a plug-and-play manner?) I had a project in mind that was waiting for something like this! :)
- WeebLabs 6mo agoFor USB input and SPDIF output, all that you need is a TOSLINK TX module(s) or a couple of capacitors and a resistor if you want coaxial SPDIF. For I2S output, the PCM5102A modules that you find on Amazon work very well, with very reasonable performance (SNR >100dB, THD+N ~95dB). For 2.1 configurations in a pinch, the firmware includes a software DAC that's more than adequate to drive a subwoofer, so only one external DAC is needed.
- ssl-3 6mo agoMaybe start by omitting the part in the first paragraph about how it acts as a USB sound card. :) I mean, I know what you meant, but that's pretty misleading phrasing for many people. It's not much of a stretch to think that most people interpret a "USB sound card" as a thing with analog audio on one side and USB on the other side. But other than the subwoofer output, we don't have any analog IO on a Pico running this firmware.
- atmanactive 6mo agoAny chance of supporting 192kHz?
- adzm 6mo agoJust wondering, why? This is for carrying 96kHz frequencies in the signal?
- ssl-3 6mo agoA sampling rate of 192kHz is overkill. And 192KHz exists as a sample rate in audio world because it is overkill. With a Nyquist frequency of ~96KHz, all of the arguments about whether a person can hear up to eg 22.05KHz, 24KHz, or if there's something meaningful all the way up at 48KHz, become completely and totally ameliorated. Those arguments were always such tiresome ordeals. The cost of dissolving those arguments is just some some bandwidth and CPU cycles -- which is to say, it costs approximately nothing. Please let the man cook. :)
- mattclarkdotnet 6mo agoOh it's worse than that, for distribution and playback sampling at more than 48kHz is likely worse in many ways due to unwanted ultrasonic noise and increased intermodulation distortion. 96/24 makes sense for production, and 96/float56 is common in DSP chains.
- ssl-3 6mo agoWhen the production produces unwanted ultrasonic noise, then that's not a sampling rate problem. It is instead a production problem. And that's perfectly OK, too: The neat part about having too much data is that other end-users (like you and me) are free to throw it away as expeditiously as we choose to. To that end: I, for one, welcome our 192kHz overlords. (And then I'll shove it through my hardware DSP that operates at 24-bit 48kHz and fuhgettaboutit.)
- 6mo ago
- alnwlsn 6mo agoNeat! I've been using a Teensy 4 for some of these things recently. The Teensy Audio Library is pretty good, but even though open source is pretty well tied to the Teensy hardware.
- a96 6mo agoLooks like there's a roadmap here. Potentially interesting things in the works. https://github.com/WeebLabs/DSPi/blob/main/Documentation/Roadmap.md https://github.com/WeebLabs/DSPi/blob/main/Documentation/Roa...