Pedalboard: Chainable FX for norns

This is a great idea! What I would personally like to see is a frequency shifter, which is readily available as a supercollider ugen. Preferably very small amounts of shifting should be possible, as this results in wonderful barber-pole phasing effects.

Another, more involved idea is macro control of multiple parameters with one MIDI CC. The Line6 M5 that I had made this wonderfully easy.

Expression pedal implementation

Start with the pedal in the toe position. Once you have your effect parameters settings as desired rock the expression pedal to its heel position. Now set your parameters to your desired settings. Now as you move your expression pedal from heel to toe you’ll see all of the adjusted parameters move between these settings. All parameters affected by an expression pedal will show a pixel notch at the top indicating a parameter’s setting for the toe position of the pedal. You’ll also see a notch at the bottom that indicates a parameter’s setting with the expression pedal in the heel position. NOTE: In any case, the bar graph will automatically never display in the areas above the right-most pixel or below the left-most pixel, since these are the extremes that the pedal’s parameter control are set to go to. If no expression pedal heel and toe values are set for a particular parameter, there will be no pixel cutout in the graphic. TIP: If you want to “clear out” your expression pedal settings: Disconnect your expression pedal momentarily, tweak any parameters that you want to “clear” the expression pedal control of, and reconnect your pedal to start fresh with setting up your expression pedal control settings for those parameters.

1 Like

I had been planning to do a pitch shifter soon, rather than a frequency shifter (see the note in the ugen documentation about how overtones are handled, I think I’m reading it as saying e.g. a 440Hz + 660Hz perfect fifth would get FreqShifted to 550Hz + 770Hz, which is a tritone). But maybe I’ll do it as a combo pedal with a mode toggle? I’ll give it a whirl sometime soon to see how I like it :smile:

On the “small shifts” note, I was going to do a vibrato pedal that would do LFO shifts of less than a semitone… that sounds somewhat similar to what you’re talking about, no?

I haven’t done granular FX implementation before, but I’m definitely excited to try! It may be a little white before I get to it though – there are quite a few simpler pedals I have on the TODO list first (the list definitely will change with my mood but right now it’s: EQ, Tuner, Pitch Shifter, Phaser, Auto-Wah, Vibrato, Noise Gate, and Amp Simulator. After that is less certain but Granulator and Freezer are in there with Sub Boost, Wavefolder, Ringmod, and Looper…)

2 Likes

The frequency shifter is actually closer to a ring modulator than a pitch shifter. The distinction is that a ring modulator produces both sum and difference frequencies, i.e., f + 10 and f - 10, whereas a frequency shifter only produces either f + 10 or f-10.

You’re completely right that the freqshift produces inharmonics, but this is part of the charm for me. :wink: And, as mentioned, small shifts result in phase modulation rather than chorusing: an example can be found in this video.

An elegant implementation would be to calculate both sum and difference frequencies and have a crossfade knob between them. This way with one knob you get negative freqshift in the counter-clockwise position, ringmod in the middle, and positive freqshift in the clockwise position. As a cherry on top, having a switch to do positive on left channel and negative on right channel would provide stereo shifting.

2 Likes

@21echoes; I haven’t even tried it out yet, but I was pondering using it with my modular the other night, and I was wondering if it’s possible to have more than one signal chain… The norns has two ins, so two chains (with different effects, natch) would be super-nice.

1 Like

TL;DR: Sadly that’s not possible currently, no. I can put it on the roadmap to look into, but it may have more limitations than you’d want.

Longer answers:
Right now the app is capped at 4 pedals at a time so that we don’t start dropping samples due to CPU constraints (reverb in particular is rather expensive). With two signal chains, that cap of 4 pedals would be shared across the two signal chains, so you’re looking at two pedals per input (or 3 and 1). I might be able to eke out some CPU savings by switching most pedals to mono processing when in two-chains mode, but it’s unclear how much of a win that’d be. Plus the big CPU hog is the reverb I’m using, and under the hood it’s stereo-only (obviously you can sum to mono, but my point is there’s no mono CPU savings to be had there).

And then once that’s all solved for, I’d have to rewrite how params are handled. Right now in the norns ecosystem params are for all intents and purposes a static list created at app launch time (which params even exist I mean, obviously their values are dynamic). This is one of the big reasons you can only have one copy of each pedal in the signal chain at a time today, because otherwise I’d have to make and maintain four separate params sets for each pedal (one for each slot). Going to two signal chains would have the same problem :confounded:

So yeah, it’d be possible, but you’d still have at most four pedals total across the two chains, and there could only be at most one copy of each pedal across both chains. There may be some ways around those problems, but… :man_shrugging:

1 Like

Version v0.9.4 (e4d95db) is up! This is more or less a v1.0.0 release candidate :smile: ZIP file

Changes:

  • There’s now an Equalizer pedal! Low Shelf and High Shelf with frequency and boost/cut, and Mid Peak with frequency, Q, and boost/cut
  • There’s also a Tuner pedal! Shows detected pitch and how close to accurate its frequency is, both on the pedal page and on the main board. Provides a comparison tone when not bypassed, with volume controlled by mix% (pedal is always bypassed by default). Allows changing the A3 basis away from 440Hz (cc @autreland)
  • Tap Tempo is now available on Tremolo in addition to Delay (hold K2, tap K3 while on the pedal’s page). Tempo on Tremolo is not synced to tempo on Delay (and vice versa) – this allows you to do fun little aliasing effects (try seting BPM on one to 120 and bpm on the other to 118). It’s also super fun when they are in sync, though! Try setting them to the same bpm but different note divisions :eyes:
  • Reverb pedal now has a shimmer setting

I don’t think I’ll have time to film a celebratory v1.0.0 demo video for release (v1.0.0 is tomorrow assuming no issues are found!), but the video is still on the roadmap :smile: Thanks for all the feedback and support, everybody!

20 Likes

Alright, v1.0.0 (87f2126) is here! ZIP File Pedalboard is also now available to install via the standard install process at http://norns.local

No significant changes since v0.9.4, just a couple of tiny fixes:

  • Fixed an edge case in loading psets. Previously, if your current pedalboard had some of the same pedals as the pset you were loading, but in a different order, you would be in a weird state where your effect was duplicated at multiple points in the effects chain with different settings. Pset loading should now work as expected
  • Tweaked the levels for the Delay pedal to not lose so much gain on the dry signal at default wet/dry mixes
10 Likes

Quick little bugfix release v1.0.1 (8ea0a47) (available at http://norns.local, or here: ZIP file)

  • Pedalboard now restores your monitor level, global reverb on/off, and global compressor on/off to where it was before Pedalboard was launched
  • Add an initial input gain parameter and a final output gain parameter (helpful if you want to plug in an instrument-level input, even though you really shouldn’t be :stuck_out_tongue_winking_eye:)

I’ve got a Phaser pedal, Pitch Shifter pedal, Auto-Wah pedal, Vibrato pedal, and Amp Simulator pedal in the works! Keep an eye out for those later this week once I’ve done some more thorough testing & tuning :smile:

10 Likes

New pedals! v1.1.0 (536bf94) (available via the standard install process at http://norns.local/ when your norns is online, or here: ZIP file)

  • Phaser pedal: four all-pass filters rotate your input’s phase for a nice, subtle psychedelic effect
  • Pitch Shifter pedal: grain-based pitch shifting. Gives you control over the interval (+/- 2 octaves), the temperament (12-tone equal temperament or 7-limit just intonation), fine tuning (+/- 50 cents), and pitch and time dispersion (like a subtle chorusing effect)
  • Auto-wah pedal: multi-mode filter with cutoff frequency controlled by an envelope follower, tuned to vowel formants. Rate control for how fast the cutoff frequency can move, depth control for the size of the range of cutoff frequencies, resonance control for the filter, mode control for LPF/BPF/HPF, and sensitivity control to handle different input volumes
  • Vibrato pedal: implements a pitch bend of up to 30 cents via an LFO’d delay. Expression control increases how the effect amount correlates with signal amplitude
  • Amp simulator pedal: based on the Marshall JCM800’s schematics. Low shelf filters -> asymmetric transfer function -> low-shelf -> saturation -> 4-band EQ -> basic reverb. Gives you control over the amount of transfer function and saturation to apply (“drive”), the EQ settings, and the amount of reverb
  • Small bug fixes around moving pedals within the board (especially for the Tuner pedal)

Hope y’all are enjoying it! Keep the suggestions and feedback coming :smiley:

I’m not quite sure what direction I’ll take next, but here’s some options if anyone wants to let me know what sounds most interesting to them:

  • Better delay pedal: multi-tap delay, varispeed delay, slapback delay
  • Better/more reverb pedal(s): spring reverb, plate reverb
  • Better EQ pedal: toggle between lo-shelf/hi-shelf and lo-pass/hi-pass, add another “mid” peak
  • Better auto-wah pedal: I still feel like there’s not enough variation in the effect no matter where you dial the knobs :woman_shrugging:
  • More pedals: Wavefolder pedal, Ring mod pedal, Granulator pedal, Freezer/looper pedal, Stutter pedal, Resonator pedal, Vocoder pedal, ???
  • LFOs & Envelope followers (this one I’m betting is going to be a rather significant rewrite, so I really want it but I’m kinda dreading it)
  • Consider adding more pedal slots (but I’m worried about eating up too much CPU, especially with the reverb pedals)
17 Likes

At the risk of over complicating things, any chance of a delay that can route its feedback loop through a send/return to one of the other pedals?

3 Likes

it’s really quite incredible—thank you yet again for sharing,

i would love to see a dedicated lo-fi effect, similar to the zvex instant lo-fi junky or strymon’s oft-employed tape age parameter—think janky compression plus filtering plus warble plus saturation.

been combining existing pedals into a solid approximation thus far—it’d just be great to have it all in one!

7 Likes

What’s interesting is that I may be able to kill two birds with one stone here – the “Lo-Fi” setting on the Delay pedal could be pulled into its own pedal (and made more expressive / customizable), and then you could route delay through it just like any other pedal. That said, I’ll have to think for a while about how to best do this – the SuperCollider work isn’t too hard (Delay already uses a generic feedback bus under the hood, so I’d more or less just have to have another pedal send to that bus), but the Lua work (both UI/UX and state management) may be a bit tricky. I’ll put it on the backburner and see if anything springs to mind about how to do it without making everything super complicated under the hood and in the UI.

What pedals are you currently using to simulate it? At what settings? Feel free to set it up, save the pset, then send over a .pset file and I can take a peek if you don’t wanna type it all up :smiley: I’d guess… Drive -> EQ -> Vibrato -> Comp, maybe in a slightly different order? If you try Delay pedal with Lo-Fi on at fully wet (so you’re only hearing the Lo-Fi echo), is that somewhat close? It’s noise -> saturation -> low-pass -> bit-crush -> high-pass & low-pass (so it’s missing the warble and janky compression, but it’s got noise and bitcrush instead). I’m actually hoping to get a lo-fi junky eurorack module sometime in the next few months, but I haven’t realllyyy dug into modeling its sound yet. Should be fun to try!

2 Likes

the very backbone of my strategy!

lo-fi delay at full mix, no feedback, and a tempo approximating the source clock —> compression at full mix, full drive, and sixty percent tone —> an almost negligible amount of additional bit-crushing and vibrato, with settings unhelpfully varied for intensity.

if you did this with the addition of janky compression, i’d be ecstatic!

2 Likes

While it’s not compression, I’ve managed to coax a pleasing janky compression-like effect from my Vermona Retroverb Lancet.
When the amplitude of the input signal reaches a threshold, the envelope generator is triggered and briefly lowers the LPF frequency. With the right settings it sounds lovely and janky and a bit lo-fi, so a simple emulation of this might be a good stand in for the requested janky compressor.

1 Like

New pedals! I’ve spent the last few days working on Cyrene, a drummer in a box & sequencer for norns based on Mutable Instruments Grids, but that’s in a pretty good spot now and I’m back makin’ some pedals.

v1.2.0 (d118f8e) (available via the standard install process at http://norns.local, or here: ZIP file)

  • Sub-Boost pedal: Pitch detection and envelope follower control a wavetable synth pitched N octaves below the detected pitch
  • Lo-Fi pedal: Adapted from the Lo-Fi mode of the delay pedal plus y’all’s suggestions. Pumping compressor -> warble -> tape/vinyl-esque noise -> saturation -> bit-crushing -> LPFs and HPFs. It’s not that much like Lo-Fi Junky, but… it’s still pretty good, I think!

I’m feelin like gettin weird next, so it’ll probably be the Wavefolder and Ring Modulator pedals in the next release. Maybe the Resonator or Vocoder, too. It may be a little while longer than usual though, as I’m trying to keep up with Cyrene as well :smile:

22 Likes

v1.3.0 (a5d8078) (available via the standard install process at http://norns.local, or here: ZIP file)

  • Wavefolder pedal: Fold some waves! Rather than clipping loud signals, “fold” them back away from the clipping boundary for a nice twist on classic distortion/overdrive sounds. “Amount” pre-scales the input to cause more folding. “Symmetry” (when low) offsets the input to cause folding to occur more on one “side” of the signal than the other. “Smoothing” smooths out the wave at the folding boundary, approaching sine shapes instead of sharp triangular corners. “Expression” has the output envelope match the input envelope (or keep Expression low for a compressor-like effect)
  • Ring Modulator pedal: Ring-modulate the input carrier signal with a wavetable-based modulator. The modulator can either track your frequency (at a just-intonation interval) or be independent. Also has a tone control so you can tame some of that buzz
16 Likes

Could you make a default pedal “template” - to streamline the process of creating a new pedal to add?

(dunno if I have to chops for this, but might give it a go)

1 Like

pulled source just now and I’m seeing this:

Errors
### SCRIPT ERROR: init

/home/we/dust/code/pedalboard/lib/ui/board.lua:85: attempt to call a nil value (field 'set_num_input_channels')

stack traceback:

/home/we/norns/lua/core/norns.lua:128: in field 'set_num_input_channels'

/home/we/dust/code/pedalboard/lib/ui/board.lua:85: in field 'action'

/home/we/norns/lua/core/params/option.lua:51: in function 'core/params/option.bang'

/home/we/norns/lua/core/paramset.lua:415: in function 'core/paramset.bang'

/home/we/dust/code/pedalboard/pedalboard.lua:52: in global 'init'

/home/we/norns/lua/core/script.lua:103: in function 'core/script.init'

[C]: in function 'xpcall'

/home/we/norns/lua/core/norns.lua:129: in field 'try'

/home/we/norns/lua/core/engine.lua:91: in function </home/we/norns/lua/core/engine.lua:89>

is this anything to do with me working on a new pedal?

ignore me - i’m dumb and didn’t restart supercollider.

It should already be pretty templatized! As in, each pedal only declares things specific to itself and the rest is handled for you. You can e.g. just copy paste e.g. the vibrato pedal Lua and the corresponding SC into new files with new names, rename the classes, rename the IDs (make sure they match in Lua and SC), and then make the params (and corresponding SC fxArguments) you want and you’re off to the races! If you want to see an example of just what it takes for a new pedal top to bottom, here’s the entite commit for Vibrato, nothing else needed: https://github.com/21echoes/pedalboard/commit/755a2697044758a77e34f870571edad5acbdbf5a happy to answer any questions if you run into anything!

1 Like