Tiar / SmashedTransistors Contributions


#69

Object tiar/osc/coseg sqr

try menu: Help -> Library -> Community -> tiar -> osc -> coseg sqr

This is a low CPU antialiased square wave generator with brilliance (pitch controlled like a low pass filter) and dissymmetry (PWM from 50% to 66%) control.


#70

Library updates:

the osc directory have now three sub directories:

  • wf12 contains the 12 steps antialiased oscillators and companion objects (see the menu bar Help -> Library -> Community -> tiar -> osc -> wf12 help patches to get an idea of what they can do).
  • wf16 contains the 16 segment antialiased oscillators. Note that the bank companion objects have been corrected. (see the menu bar Help -> Library -> Community -> tiar -> osc -> wf16 help patches).

  • Steps contains the Five, Six and Seven steps oscillators along with their variants.

Patch:

menu: File -> Library -> Community -> tiar -> reed -> Misty
Sort of "physical" modelling of a brass instrument (self PM through a series of filters and delays).

Note that it is controlled by channel (or poly) aftertouch velocity only keyboards won't work with this one.


#71

Object tiar/filter/dis lphp1

try menu: Help -> Library -> Community -> tiar -> filter -> dis lphp1

This is a barbaric name for an object that can mimic "waveshapers" used in some early string machines. This kind of device allowed to add even harmonics to a square wave input signal.

Basically it is a first order filter, sort of basic Resistor/Capacitor low pass filter, with an hint of "diodes". These "diodes" allow to have two different "charging/discharging resistors".

Here, you can control the charging and discharging "frequencies" freqUp freqDown.

You can control the type of "diode commutation":

  • type = 0: rates switched on output sign (à la Salino)
  • type = 64: rates switched on rising/decaying (à la Ralond)

And you can add a bias.

You have both "low pass" and "high pass" outputs.


#72

Object tiar/kfunc/u8u

try menu: Help -> Library -> Community -> tiar ->kfunc -> u8u

This is a simple unipolar k rate function defined by 8 segments.
(i did not find this kind of object in existing libs, maybe i missed it ?)

It can be used to shape saw LFOs, envelopes and many other control signals.

Note: For convenience, i am adding bipolar variants of this one. Meanwhile, you can use factor/conv/unipolar2bipolar and bipolar2unipolar if you need bipolar functions.


#73

Patch: MetallicHorizon

An old school sci fy ambiance generator. It uses and abuses of the "8segs" kfunc object :stuck_out_tongue_winking_eye:

menu: File -> Library -> Community -> tiar -> MetallicHorizon.axp


#74

Object tiar/gain/DCA

try menu: Help -> Library -> Community -> tiar ->gain -> DCA

It is a "De clicked Digital Controlled Amplifier".

As expected, it multiplies the audio input "in" by the k rate "gain" input.
Unlike the factory gain/vca, the gain input is not interpolated: the gain is brutaly updated at zero crossings of the input.
This old trick allows the sharpest attack transients without clicks.


#75

Object tiar/kfunc/Modulo

try menu: Help -> Library -> Community -> tiar ->kfunc -> Modulo

This is a unipolar k rate Modulo function.

The factor, multiplies the input signal.
It is the moduloed to 64.0.

Try the help patch to get an idea of what it does.
The "mirror" parameter is useful when using it on descending ramps or envelopes with non integer factors.


How to create swing feel?
#76

Object tiar/noise/Geiger

try menu: Help -> Library -> Community -> tiar -> noise -> Geiger

An impulse (more exactly transients) noise generator. The paramater and inputs controls the density...


#77

Object tiar/kfunc/u8b

try menu: Help -> Library -> Community -> tiar ->kfunc -> u8b

This is a k rate function defined by 8 segments. It takes a unipolar input and has a bipolar output.
As i find them really handy for mapping/adapting control ranges, I plan to make a bunch of those with different input and output types and number of segments.


#78

Object tiar/spat/pan m

try menu: Help -> Library -> Community -> tiar ->spat -> pan m

A constant gain^2 pan with modulation.

The direct use of a linear gain function - as in the factory pan - object leads to a variation of gain^2, the consequence being a variation of volume.

This object uses the fact that sin(x)^2 + cos(x)^2 = 1 to get uniform volume.


#79

Objects tiar/kfunc segment objects.

try menu: Help -> Library -> Community -> tiar ->kfunc -> b8u for an example

This is a series of 16 objects that can be seen as extensions of the handy TSG/math/map objects by @TheSlowGrowth.
Instead of a single segment, defined by the output range, these objects have 2, 4, 8 or 16 segments.

Naming:

  • input type (u for unipolar, b for bipolar)
  • number of segments (2, 4, 8 or 16)
  • output type (u for unipolar, b for bipolar)

Examples:

  • "b2u" maps a bipolar value to positive value with a two segment function. The first segment correspond to negative input values, the second segment correspond to positive input values.
  • "u8b" maps a positive input to a bipolar output with 8 segments.

2 and 4 segment objects can be used for mapping control values.
8 and 16 segment objects can be used for complex envelope or LFO generators.


#80

Objects tiar/kfunc/quant

try menu: Help -> Library -> Community -> tiar ->kfunc -> quant

This is a quantizer for control signals.

It can be used, for example, to recreate some artefacts of early digital synths (when used on envelopes for gain and filter cutoff).

The quant parameter and inlet (added together) correspond to the quantization step.
The quantization is towards the "nearest quantization steps".
Quantization is centred on zero.

Example for quant = 4.00 :

Input Output
   0   0
-1.9   0
+1.9   0
+2.1   4
+5.9   4
+6.1   8
-2.1  -4
-5.9  -4
-6.1  -8

Bit-depth and Sample-rate Reduction
#81

Hi all,
I have a Music Thing Modular AxoControl attached to one of my Axolotis and i will develop/share some patches for it in:
menu: File -> Library -> Community -> tiar -> AxoControl

One of my goals is to get the maximum functionalities out of a very limited number of pots.


LittleClassic is the first i'm developing, and sort of test bench for ideas.
Basically it should cover most of the classic synth sounds:

Features:

  • saw/sqr waveforms
  • low pass filter with resonance and envelope
  • amplitude envelope
  • three oscillators
  • 8 different detunings for the three oscillators
  • post filter distortion
  • reverb
  • 6 voice polyphony
  • vibrato controlled by modulation wheel CC
  • volume controlled by expression CC

Ideas:

  • use left/right sides of pots as switches for options such as :
    • envelope mode ("piano" / "organ")
    • distortion on/off
    • waveform
    • reverb on/off
  • use tiar/kfunc/ objects to map multiple parameters on a single knob (sort of presets).
  • use tiar/kfunc 8 or 16 segments to make steps with smooth transitions
    • ex: Detune ratios for two oscillators
    • use blinking led as feedback to signal a transition zone between steps
  • highest attack time (full right) switches control to aftertouch
  • The release time can be common to both filter and gain envelopes
  • use aftertouch as part of sustain for envelopes in "piano" mode.

At the moment the controls are :

  • knob 1 (PA5) controls the cut-off of the filter AND distortion
    • center for minimum cut-off
    • full left or right for maximum cut-off
    • left: no distortion
    • right: distortion
  • knob 2 (PA6) controls the envelope on the filter.
    • if turned from middle to left, the envelope is a decay envelope (piano type).
    • if turned from middle to right, the envelope is an AR envelope (organ type).
    • if turned full right the filter is controlled by aftertouch (channel or poly)
  • knob 3 (PA7) controls the resonance of the filter and the waveform:
    • from left to middle : square waves
    • from right to middle : sawtooth waves
    • center for minimum resonance
    • full left or right for maximum resonance.
  • knob 4 (PA2) Detune ratios for osc2 and osc3 relative to osc1 left to right:
    • x1 x1 unison
    • x2 x3 a bit of third
    • x2 x4 octaves
    • x3 x1.5 a lot of thirds
    • x3 x4
    • x7 x4.5 metal and bells
    • x5 x4 year 2k
    • x0.75 x2.5 grungy
  • knob 5 (PA3) controls the gain envelope
    • if turned from middle to left, the envelope is a decay envelope (piano type).
    • if turned from middle to right, the envelope is an AR envelope (organ type).
    • if turned full right the gain is controlled by aftertouch (channel or poly)
  • knob 6 (PA4) controls the release for both gain and filter envelopes AND the reverb
    • center for minimum release time
    • full left for right for maximum release time.
    • left : low reverb
    • right: stronger reverb

A draft layout...



Updates 14 jul:

  • extendend filter cut off range
  • Button A (PC1, LED PB1) controls gate effect (8 per sec)
  • Button B (PC2, LED PB8) controls pan effect (1 per sec)
  • Button C (PC3, LED PB9) switches gate to high speed (sort of ring mod).

Updates 16 jul

  • Finished a few adjustments

#82

Objects tiar/dist/SqrtMix4

try the help patch, in the editor menu bar, clic Help -> Library -> Community -> tiar ->dist -> SqrtMix4

This is a non linear "mixer".
I think it can be useful with sine inputs or combined with FM/PM. (see the help patch to get an idea).

If only one input is set, it won't be distorted. Distortion only occurs when multiple inputs are active and interfere.


Technically,
the output is the (signed) square root of the sum of inputs (signed) squares. Here "signed" means that we take the negative value of the square root or square if the input is negative. See code for details.

Note: I did not implement antialiasing with this one. Hence DP anti aliasing of a "signed square root" is certainly possible.


#83

Objects tiar/dist/DP sqrt

try the help patch, in the editor menu bar, clic Help -> Library -> Community -> tiar ->dist -> DP sqrt

It is a DP antialiased square root distortion.

UPDATE: added toggle switch to change negative output to linear. Useful for asymmetric distortion.

This kind of distortion emphasizes the low amplitude part of the waveform. Thus, the output signal crest factor is far better that the input signal crest factor. => I will develop some sort of mixer around this idea...

The negSlope parameter and inlet allow to control how the negative portion of the signal will be processed. It turns the object into a non linear wave rectifier reminiscent of some diode/resistor waveshapers.


Tech notes:
This object uses differentiated polynomial anti aliasing:

The square root is a very special case of polynomial, it is x ^ 1/2. ( " ^ " stands for "power" )
The integral of this function is 2/3 x ^ 3/2 which is 2/3 x * (x ^1/2).
The code uses the intrinsic float function arm::vsqrtf to calculate it. Even if this operation takes 14 cycles, it is quite efficient as the STMF cpu is capable to perform integer operations in parallel.


#84

Objects tiar/dist/DP inv2

try the help patch, in the editor menu bar, clic Help -> Library -> Community -> tiar ->dist -> DP inv2
and Help -> Library -> Community -> tiar ->dist -> DP inv2 and PM

This distortion is inspired by electronic circuits that use polarisation points of non linear components.

Here, I use an hyperbolic function "polarised" around 1 with a controllable "factor" (that controls the non linearities):
Low factor => almost linear, nice for modelling old amps:


Mid factor => nice dissymetric distortion


High factor => pulsy, level detector distortion

note: all graphs plotted on Wolfram Alpha


Note that gain and range are automatically modified so that this distortion takes a full range signal and outputs a full range signal. It makes it convenient when used with sine generators and Phase Modulation to add a somewhat "analog" color.
try Help -> Library -> Community -> tiar ->dist -> DP inv2 and PM


Tech note:
This distortion is antialiased by differentiation, much like the good old DP (differentiated polynomials).


Next step:
generalisation of the differentiation method to rational functions. Very nice distortions can be done with these.


#85

tiar/dist

A little word about work in progress...
I'm working on a set of DP antialiased distortions.
I will post more detailed information soon.

Some help/test patches are already available in

Help -> Library -> Community -> tiar ->dist -> ...

  • compand
    for companding (use in conjonction with expand for non linear mixers...)
  • expand
  • rectify
    a full wave rectifier.
  • step
    an "infinite gain saturation". (planned lighter CPU than the factory dist...)
  • fold
    a wave folder.
  • squares
    alternating positive and negative steps.
  • modulo
    a modulo folder (sounds harsher than the classic fold).

To my ears, the anti aliasing by analytic pre integration / numeric differentiation is good enough to allow the combination of multiple distortions in parallel and series... and maybe feedback through tuned delay lines :stuck_out_tongue_winking_eye:


#86

Hi,

I still have some work in progress... mainly porting and optimising some code to the Axoloti such as the anti aliased distortions as described in the previous post.

I'm also porting this step invariant implementation of "the" 24dB filter

Raph Levien paper: http://levien.com/ladder.pdf

With my simplifications:

The step invariant method is a "Zero Delay Feedback" method that allows deep modulation and high resonance without frequency warping (the main drawback of the now omnipresent bilinear transform filter).
One of the drawback of the step invariant method is that it can be CPU intensive.

Anyway if you want to give my first experiments a try. See
Menu bar Help -> Library -> Community -> tiar -> filters -> MgExp.axh


Question about filters
#87

That sounds great!
Really nice modelled analogue filters are something the Axoloti has lacked, thus far. Is this implementation antialiased?

a|x


#88

Hi @toneburst,

This filter does not include distortions and is not prone to aliasing.
Frequency warping (which is another form of aliasing) is prevented by the matrix exponentiation scheme (square and scale) which is equivalent to a x64 oversampling.