Cpwitz Contributions


#19

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?
#20

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


#21

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 :smile:


#22

very good :wink: actually should go to factory/objects


#23

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!


#24

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.


#25

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.


#26

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.


#27

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)


#28

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 :cry:.


#29

@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 :smile:)

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.


#30

@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 :wink:

P.S.S. I raised the buffer size of the table/aloc, that helped!


#31

it is an downsampling bitcrusher delay,the saw acts like Samplerate, nice effect...


#32

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.


#33

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.


#34

Ah ok, so really it's the 15th harmonic of a fundamental an octave lower (the sub I guess).


#35

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.


#36

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! :slight_smile:


Radiohead-esque Glitch Patch?
#37

Oh nice! Will use this to demo the Axocontrol this weekend at the Brighton Modular Meet I think :slight_smile:


#38

@Thonk Also check the controller subpatch that I have created for Axocontrol. This is not really apatch that makes any sound, but it can be copied to any patch to use Axo control for the patch. It has got layers, so all knobs can be used twice, giving 12 knobs, 2 joysticks etc.

@cpwitz Maybe you can use the subpatch to give your patch some extra functions? I would suggest using the midi CC version cause it take minimal amount of setting up. Just assign what you want to control to a the midi cc number in the patch (1-16) and control away :wink: