I’m having so much fun making this I thought I would share.

I am working on a simple, cheap, easy to construct multi-effects guitar pedal based on the Raspberry Pi Pico microcontroller. All of the other parts are generic parts. So far I have implemented the following effects:

Noise gate, Delay, Room, Combine Effects, Bandpass Filter, Lowpass Filter, Highpass Filter, Allpass Filter, Tremolo, Vibrato, Wah, Autowah, Envelope, Distortion, Overdrive, Ring Modulator, Flanger, Chorus, Phaser, Backwards (play the last few samples backwards), Pitch Shift, and Octave (rectification).

Some effects can be cascaded inside the device. There are up to 16 “units” where each processing stage can process the results of the last stage. Various controls on the effects can be assigned to the four potentiometers at the bottom of the board, or two expression pedals you can plug into the side.

I also added a VGA output because I want to have a cool video display that changes with the audio. Also, perhaps implement some kind of guitarsynth or MIDI control.

Anyways this has been a lot of fun to make. I hope others will enjoy it too.

https://www.github.com/profdc9/GuitarPico

    • profdc9@lemmy.worldOP
      link
      fedilink
      English
      arrow-up
      17
      ·
      10 months ago

      It depends on the effect, but it processes each sample in real time, in about 20 microseconds.

      • maegul (he/they)
        link
        fedilink
        English
        arrow-up
        4
        ·
        10 months ago

        So presuming there’s also some DAC/ADC latency too … that still seems pretty fucking good no?

        • profdc9@lemmy.worldOP
          link
          fedilink
          English
          arrow-up
          4
          ·
          10 months ago

          The ADC is run at 50 kHz, which is divided in half between the instrument itself and reading the analog controls. Every 40 microseconds the ADC is read, and the effects are processed in order, and then on the other half of the 40 microsecond cycle, the DAC is set.

      • AstralPath@lemmy.ca
        link
        fedilink
        English
        arrow-up
        4
        arrow-down
        1
        ·
        10 months ago

        That’s amazing. Latency when playing guitar through a DAW is so annoying. What part of the build allows for such quick processing? I don’t know anything about this stuff.

        • maegul (he/they)
          link
          fedilink
          English
          arrow-up
          1
          ·
          10 months ago

          I don’t play through DAWs but instead through a dedicated digital modeller (line6 helix). With the helix, the latency is around 2-3ms IIRC (great video measuring the latency of many digital modellers. Sometimes I feel like I notice something minor/negligible, but most of the time I don’t notice anything at all. My experience with DAWs, a long time ago mind you, was that you can’t help but notice the latency, so I’d imagine their latency gets into the 10s of milliseconds.

          It struck me though that all of the analog amp people that look down at digital modelling and point out that the latency is a problem might just be snobs.

          Because sound also has a latency.

          Sound travels in air at ~ 340 meters per second. This means that in 1 millisecond, it travels 34 cms (340 / 1000). So there’s 1ms latency between you and your amp if you’re 34cms away. Realistically, most people are more like 1-10 meters away, which translates to ~3 - 30 milliseconds of latency. Which can be huge! Most decent modellers are around the 3ms latency mark (see the video), which corresponds to sitting 1m away … probably not a coincidence.

          Unless I’m missing something here, I bet this more or less proves how much of an “aura” there is around analog amps and how they’re the one true and correct way to play electric guitar. A digital modeller going into an in ear piece or monitors right in front of you will have about the same effective “latency” as an amp about 1m away.

  • remotelove@lemmy.ca
    link
    fedilink
    English
    arrow-up
    4
    ·
    edit-2
    10 months ago

    Oh rock on! I am looking to build things for my daughter and her guitar. I am absolutely going to try and build this.

    Is there a specific reason you went with the Pico over an ESP32? On the surface, the specs for this application seem about equal. WiFi and Bluetooth would be nice, but not needed. I dunno if the DAC on the ESP32 would be of any use here either.

    My guess about your selection was either about simplicity or availability.

    • profdc9@lemmy.worldOP
      link
      fedilink
      English
      arrow-up
      4
      ·
      10 months ago

      One of the reasons to go with the Pico is that Espressif seems to only support their chips for a limited time. I wanted to use something like is guaranteed to be in production longer. That said, the effects code is mostly portable, so it wouldn’t be that hard to move to another microcontroller.

      • remotelove@lemmy.ca
        link
        fedilink
        English
        arrow-up
        1
        ·
        10 months ago

        Thanks for the response! I may design a daughter board that I can use to swap between the two and not alter your design too much, if at all. (Why risk breaking something that ain’t broke?) Your code and approach to this seems hyper-clean, so I don’t want to lose that.

  • demesisx@infosec.pub
    link
    fedilink
    English
    arrow-up
    3
    ·
    10 months ago

    Incredibly cool project. Thanks so Much for sharing. Someday, I dream of a FOSS Kemper.

  • maegul (he/they)
    link
    fedilink
    English
    arrow-up
    2
    ·
    10 months ago

    Fucking legend mate! Bookmarked the repo!

    How would you say the quality of the effects is? Like … are you happy playing through this at home in your room?

    • profdc9@lemmy.worldOP
      link
      fedilink
      English
      arrow-up
      4
      ·
      10 months ago

      It’s a lot of fun to play. They sound good. The biggest drawback I would say is that I did not use an external stereo codec for simplicity, so that the input and output have limited bit depth. The input is the ADC of the Pico, and the output is fast PWM.