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
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ā¦)
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. 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.
@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.
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
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ā¦
Version v0.9.4 (e4d95db) is up! This is more or less a v1.0.0 release candidate 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
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 Thanks for all the feedback and support, everybody!
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
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 )
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
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
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:
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!
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 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!
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!
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.
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
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
### 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!