Ah that makes sense, thanks!
Cpwitz Contributions
cpwitz/osc/sine harmonics.axo
Easy organs! Made an object of things I wire and then copy&paste a lot.
Sine wave oscillator with 7 additional harmonics: sub octave, 2nd, 3rd, 4th, 5th, 6th and major 7th (2 octaves up). The intervals are pure intervals and not equally tempered.
The levels of each harmonic can be modulated separately.
One instance uses about 8% CPU.
There's a demo/testing patch under patches/cpwitz/synths/test-sine-harmonics.axp
Best approach for additive 'organ' patch?
cpwitz/demux/demux smooth 8.axo
Smoothing 8 out demultiplexer (k-rate fractionals). Same as the factory "demux 8" but the output values can be smoothed exponentially with adjustable rise and fall time.
There's a demo/testing patch under patches/cpwitz/synths/test-sine-harmonics.axp
cpwitz/lfo/tri.axo
Triangle wave LFO.
I really think for some modulations linear triangle waves are better suited than sines (for example for pwm or wave shapes). So I finally made one
cpwitz/delay/tape-delay.axs
A pitch-shifting (when rate is changed) and saturating tape delay effect. Sounds like a cheap bbd.
You can toggle the output low pass filter and the saturation in the feedback loop. The low pass filter frequency is synchronised to the delay rate to make long delays (low rates) less aliased.
You really should turn on saturation and filtering for old-school crunch. A zero delay rate leads to no delay because no samples are taken with no rate!
cpwitz/delay/triggered buffer.axo
The core object for the tape-delay effect. It's basically a circular buffer, triggered by every rising edge above zero on the trigger input (linear phasor is optimal).
Every rising zero edge a new sample is taken from the input and the oldest sample from the buffer is sent to output. Essentially, it's a tape loop with variable speed. There's no interpolation, so low rates get very crunchy and aliased.
The object needs a reference to a 32b table. The size of the table defines the range of available sample rates. The tape-delay effect for example uses a 2048 samples table.
Stupid me! I was wondering about too heavy aliasing and then noticed that feeding the feedback back into the downsampling routine isn't really a great idea. And now there it is:
cpwitz/delay/triggered buffer feedback.axo
The same downsampling circular buffer but with internal feedback routing. Now we're talking.
For fancy experiments the old triggered buffer without internal feedback remains the same. I fixed the tape-delay effect with the new buffer, so it's much cleaner now.
cpwitz/delay/tape-delay-stereo.axs
And here's a vintage lo-fi stereo tape delay. Good for scifi spaces and mellow choruses. The delay rates can be individually set for left and right channel. And there's a comb knob to adjust both together relative to each other.
Hi tried both, this makes it sound a lot better thank you very much!
I'm trying to combine your delay with the sync engine of @SirSickSik here:
I tried to plug the output of the sync engine into the trigger of the triggered buffer object but it didnt work, no sound coming from the delay. Do you have any suggestions? It would be great to be able to tempo sync your tape delay, but also at a certain point break the sync and twist the delay time knobs to get that pitch effects.
This is the patch:
midi clock sync example tape delay.axp (20.4 KB)
Yes, you're right. Clock syncing would be awesome. I haven't had the time to test @SirSickSik's sync solution yet (shame!).
I don't have my axoloti hardware at hand for the next few days.
But maybe one tip for further experiments: The trigger input doesn't work like the input of the delay read object. The delay's input is a fractional number which defines the delay time. The trigger input works as a sample trigger. When the input goes above 0 a new sample is taken and the oldest sample is put out on the output. This defines the sample rate of the buffer and needs to be driven by an audio rate oscillator (preferably a phasor). If you take a look at my two tape delay objects there's always a phasor driving the trigger input:
To set a desired delay rate this phasor's frequency must be modulated (red circle in the screenshot above). And maybe with correct scaling (math/*c) the output of the sync engine can set the correct delay rate.
Hope, that makes any sense.
I haven't my hardware around and therefore I can only talk and not try, sorry. Thinking about it, maybe I someday should make a more integrated downsampling circular buffer with internal triggering, where you can directly modulate the delay time.
Oh yeah. As always... lots of possibilities and too little of time .
@cpwitz
Thanks for the explanation, that is totally understandable. Right now I'm not capable of logically determining the right scaling for the sync engine but I guess I'll try out with different values of math/*c and see If I can correctly feed your buffer (or maybe get funky unexpected results )
That sound like a really great Idea. In general I really like what you can do with axoloti but for using it in a bigger setup it is so important to have sync mechanisms for time based effects.
@cpwitz
I Combined your tape delay with the syncengine of @rbrt in the delay sync thread:
Tapping the Tempo works great now but it still sounds really downsampled in bitcrusher like. Any idea why?
This is the patch:
Tape Delay Tap Tempo.axp (6.7 KB)
P.S. If you really want that tape delay sound the filter and saturation should be in the feedback loop
P.S.S. I raised the buffer size of the table/aloc, that helped!
Don't have time to check it out tonight, but do you really mean major 7th? The 7th harmonic (if that's what you mean) is slightly flat of a minor 7th normally. Unless you're actually a lot higher up the spectrum than I realise and it is actually a harmonic that is closer to a major 7th.
Yes, it's a little flat major seventh: fundamentalHz*7.5
This gives for a A2 (110Hz) 825Hz.
Equally tempered the major 7th would be 830.61Hz. The tempered minor 7th would be 783.9Hz. Or did I miscalculate (happens very often)?
I wasn't thinking in tonewheel harmonics but wanted to have pure overtone factors. But it maybe really makes sense to make a tempered version of the sine overtone oscillator to act more like drawbars on hammonds.
Ah ok, so really it's the 15th harmonic of a fundamental an octave lower (the sub I guess).
patches/cpwitz/effects/mod-filter-array.axp
This is my humble attempt to recreate the famous Moog Midi MuRF pedal with Axoloti. As I discovered that this cool pedal isn't produced anymore (I think, they ran out of filter chips) I wanted to build something like this with axo. I'm using resonant factory svf bandpass filters, so you can't expect a true Moog sound recreation. But it can produce some freaky modulations especially on synth pads, guitar and drum sounds.
The patch is designed as a pedal-like effect and takes the sound input from audio in left. But you can easily repatch it to modulate Axoloti sound sources.
So, what can it do? It has 8 tuned filter bands, which are triggered by a 16 step pattern which is driven either by internal or MIDI clock. Each trigger impulse starts an ad-envelope for the triggered band with adjustable attack/decay time. The filter bank has two modes: Mids and bass band. If you turn on bass-bands, the filters are acting on lower frequencies.
These are the relevant objects/controls:
clock-source
random - Turn on to randomly trigger one of the 16 steps in the pattern. If off, the pattern runs sequentially.
internal/MIDI - Select either internal clock or MIDI clock
internal-speed - Speed of the internal clock lfo
MIDI clock div - Select the time division (resulting in note values) for the MIDI clock. There are comments to the right of the selection indicating the resulting note value.
pattern
The trigger pattern for the filter bands. Vertically you select the band which will be triggered in each of the 16 horizontal steps. The low frequency bands are on the top.
level dials
Dial in the trigger level of each band or to be more exact: the top-level of the envelope after attack. A level setting of 0 means, triggers for this band won't be heard. You can also use the levels to tame bands, that resonate to loud with the given input sound. The labels of the level dials show the center frequency of the band in mid/bass mode (see below: filterbank/bass-bands checkbox).
env-attack/env-decay
The trigger envelope attack and delay time for all bands. Here you can define the overall feel of the pattern (staccato, fluid or backwards-like).
resonance
The filter resonance level for all bands. Be careful with high values (your speakers or ears might get damaged).
lfo-speed/lfo-depth
You can add a sine lfo to sweep the filter frequency of the bands. Gives a chorusy quality to the effect.
stereo-width
If you turn up the stereo width the odd numbered filters are panned to the left and the even numbered filters to the right output.
inputlevel - does what it says
distort-input checkbox
Turn on to soft-saturate the input signal. Gives a warmer quality to the sound.
filterbank/bass-bands checkbox
With this checkbox on, the filter's frequencies are pushed more to the bass range. Good for bass sounds. The first filter isn't a bandpass anymore then, but turns into a lowpass at 110Hz (like in the original pedal). The band frequencies are displayed in the labels of the level dials.
dry/wet-blender
The last setting is for blending the input signal with the effect signal.
I had lots of fun with the sounds you can get out of this. LittlePhatty leads, drum synths or thick pads are gorgeous. And even more fun, if you pass the effect through further delays or reverbs.
patches/cpwitz/effects/grain/grain-mill.axp
Grain-mill is a granular delay/destroyer with variable grain playback position, variable grain size and envelope, optional MIDI sync and a freezable buffer. It's designed as a send or insert effect and therefore takes the input from audio in left. I also made a version working with the AxoControl board for a handy stand-alone effect (see below).
Here are the controls:
midi-sync
Turns on MIDI clock synchronisation. If it is turned on, it waits for MIDI clock pulses. Caution: As long as no MIDI clock comes in, the internal-speed is used. When a MIDI clock is received, triggering is synced to the clock at the selected note value divisions (see below).
random
When turned on, triggers are sent randomly (about 50% probability). Syncs to MIDI, too.
freeze
This toggle freezes the recording buffer, meaning that no incoming audio is processed, but the same buffer is granulised over and over.
clock-source/internal-speed
Sets the grain trigger speed when not MIDI synced.
clock-source/MIDI clock div
For MIDI syncing you can select the desired note value for grains to be triggered. The labels to the right of the radio buttons show the resulting note value.
The red LED is blinking every time a grain is triggered.
Motion
Motion is the movement of the position a grain is taken from the recording buffer every time a grain is triggered. With the motion controls you can build some kind of reverse or speed-up/slow-down effects.
motion-speed
Sets the LFO speed of the selected motion.
motion-amount
Sets the amount of the motion within the recording buffer. 0 means no motion at all (weird sound) and 64 moves through the whole buffer.
motion-type
You can select one of four motion types:
- "Saw down" is moving backwards through the recording buffer starting at the oldest sample and moving back to the newest. Good for reverse-like effects.
- "Saw up" moves from the newest to the oldest samples and can create some kind of speed-up or slow-down effect.
- "Triangle" is moving back and forth.
- And finally "random" takes every grain from a random position.
These settings are very much fun to experiment with spoken audio inputs or music.
grain-size
The size of a grain. Can go from very long to nasty short snippets of the incoming audio. A grain snippet is looped as long as the envelope for a grain is active.
grain-attack/grain-decay
The attack/decay volume envelope for a grain. Longer attack and shorter decay for a reverse-like effect. Short attack and long decay for delay mayhem. And no attack and short decay for decent stuttering.
feedback
Sets the feedback amount of grains back into the recording buffer. Lots of feedback with a long decay setting can lead to infinite feedback noise. Beware: If the recording buffer is freezed, feedback doesn't have an effect.
stereo-width
With stereo-width turned up, each grain is output alternately to the left and right stereo channel.
dry-level
With this dial you can mix in the incoming live signal to the output (e.g. if you use it as insert effect device).
Recording (delay) buffer size
The patch has a table/alloc object "buffertable", which defines the recording buffer's size. You can play with the size setting to make the overall delay shorter or longer.
patches/cpwitz/effects/grain/grain-mill-axocontrol.axp
This is the version of grain-mill working with the AxoControl pot-PCB. The controls are mapped like this:
Feedback and stereo-width can't be controlled with the AxoControl. You can hook up for example MIDI CC numbers to control them.
Hope you like it! Feedback (even in grains) welcome!
Radiohead-esque Glitch Patch?
Oh nice! Will use this to demo the Axocontrol this weekend at the Brighton Modular Meet I think