SirSickSik Contributions


#482

NEW MODULE

OSC

"hrmMorph"
generates 2 internal phases for different note-values, then multiplies both phases with 2 harmonic integers to create 4 different sine waves which get smoothly mixed into each other in an X/Y manner.
The notes being generated internally are scaled using a reference to the "scaleBank" module (my harmony folder).
The root pitch can be offset with it's own pitch input, but this will be forced to follow the same selected "scaleBank"-scaling internally.

As the harmonic morph is independent and has independent controls from the note morphing, lots of interesting (polyrhythmic) combinations can be made. Eg. this can either be done by controlling it with another lfo or to set a different amount of steps while using the same lfo for modulating both harmonics and notes.

The notes have an extended pattern generator in comparison to the harmonic pattern generator, using 2 step-offset generators with extra controls.


#483

NEW MODULE

SEL

"text2index"
converts a text into the index-numbers (see library in the "local data", you can change this library yourself! Just make sure the amount of characters is within the array size (now it's d[128] for max 128 characters).

Use a selector, pattern generator or counter to step through the text. Each character (even space!-> index 0) counts as 1 step.

The counter reads the index-position within the text, converts the selected character into a value by comparing it to the library and outputs the index-value from that character within the library.

This can be used to control presets for example. Best example would be a "talking synth" where each character stands for a preset making a distinct sound.


#484

NEW MODULES

PATCH

"autoSource"
provides a modulation source that doesn't need an extra trigger input. Source is updated when input changes

MIX

"matrix16x16"
16 x 16 modulation matrix for control signals.
select the source (input) and destination (output) and use the bipolar gain knob to set the level of that routing.

useful in combination with the "autoSource" module, though it takes 14%!! ai....

so because of that, we also have the:

"matrix8x16"
8 x 16 modulation matrix for control signals
takes about 7% combined with 16 autoSource modules


#485

NEW MODULE

PATT

"rndWeightSeq"

weighted random gate sequencer

4 channels
each channel has 4 sequences:
-rnd chance per step (when slider is at max, it will always generate a trigger on that step)
-play length per step (gatelength->also max length for fill)
-retrigger per step (for fills)
-delay per step (for swing)
-load and save for the created patterns (except the random generated values, no seeded random)

-rnd chance for any gate anywhere
-rnd chance for changing the current gatelength
-width for random gatelength->adds to step gatelength value
-rnd chance for random retrigger
-width for random retrigger->adds to step retrigger value
-rnd chance for random delay
-width for rnd chance random delay->adds to step delay

-maximum count length for the 4 sequencers (wraps back to step 0 when reaching maximum count)
-maximum "main" count length for the internal counter.


#486

NEW MODULE

LFO

"qtsLFO4"
added more waveforms to the quad tempo-synced LFO:
sine, tri, saw, ramp,square


#487

Hey @SirSickSik

I am playing a bit with the scalebank and the hrmMorph object. Scalebank is pretty interesting. Have been trying to make some scales for a chord player I made. It works but uses to much ccmsram. Need to get something that is more efficient going.

And I am really interested in using the scalebank for other objects, or atleast the technique used, for for example to supplement my chord player.

I tried using a regular table/read to play back the scales in the scalebank object. I named the scales bank SB1 and then entered SB1 into the table/read, but that didnt work.

Are there other objects that might be able to load the scalebanks, besides the hrmMorph object?

Curiousity about the scalebank:
Inside the scales i see some numbers, I guess every line of numbers is a scale? These can potentially be edited and make into new scales, right?

......Anyway, I guess first thing to get working would be loading the scalebank into a table or whatever object would be working?

Any help appreciated :wink:


#488

take a look into the 46scales module (also in harmony folder)
this takes in the normal range of 12notes/oct and only outputs the notes that are in the list of the scale.
the module first uses a kind of "divremc" function to divide the incoming notes into numbers 0 to 11 and octaves, then uses the 0 to 11 to select from the scale-list and then adds back the octave offset.

The scales in the scalebank could of course still be altered, but I've already entered all the scales I could find on wiki. So I'm not sure how many more scales could be made (probably some of the scales are already the same when using different keys).


#489

NEW MODULE

MIDI

"polyA8Recorder"

Midi 8-voice input recorder with polyphonic aftertouch record.
Records the incoming midi and then sends the midi internally to your synthesizers.
So add a subpatch with a polyphonic synthesizer, set it to "internal" and use another midichannel then the recorder is recording from.
Aftertouch is recorded at the same rate as the count input.
Notes are recorded 1/6th of the rate of the count input.

Multiple voice allocation modes using the "poly" switch:
1= monophonic, notes will be recorded to the selected channel ("select" switch)
2= internal count steps through the 8 voices for each incoming midi note
3= checks the lowest empty channel and records incoming midi notes to that channel
4= polyphonic, uses the polyphonic index to write to certain channel (needs to be in a polyphonic subpatch for this to work!!)

-set the size(maximum length) of the pattern-table before start
-set the length of the pattern during playtime with "length"
-connect a counter or the pos24ppq of the midi clock to the count-input. Notes will be recorded at pos4ppq rate and aftertouch on pos24ppq.
-connect the "active" output of the midi counter or a switch to the "active" input, otherwise nothing will be played!-> only plays when active is high!
-to record, press the "rec" button

-to save your recorded pattern, add a string/indexed to the filename input.
-press save for saving the pattern to your SDcard
-press load to load a pattern from your SDcard
When there is still audio playing, a short bleep will sound when you load/save a pattern. To avoid this, (automatically) mute the audio out when pattern is loaded/saved.

Each channel can send on it's own midichannel, allowing you to play different synthesizers from this single midi recorder.

This module pairs very well with the arturia beatstep pro. Finally an aftertouch recorder!


#490

with great thanks to technobear:

NEW MODULE

PATCH

"multisource"
provides 16 modulation sources to control parameters.
Don't forget to set max modulation sources and targets to 16 in the settings of the patcher!!
Could be used in combination with the "16x16matrix" to be able to control the mix levels of all 16 modulators for each destination.


#491

NEW MODULE

TABLE

"mod16recV2"
updated version of the previous modulation recorder.
Now has pattern save/load and all the modulations have the same pattern length and write/read count input.
Pairs well with the matrix16x16 and multisource module.


#492

is this enough sequencing options for a synthesizer? :wink:


#493

btw would there be people prepared to do a donation for all the modules I wrote?
if so, what would be the best way to do this?


#494

If you would learn how to integrate help files, i would donate with a greater probability...:wink:
Your modules are pretty cool, but not understable for noobs
I am really thankfull for the weighted random modules,
altough i dont understand the rndwheightedseq..


#495

Hmm. I am not sure what to think of it... What about other people who contribute on other sides? Should they also be rewarded with dollars?

What about charging a fee for specific requests?

EDIT: I'd like to add that you have helped me out many times all ready with specific requests, of which I am really greatful, so therefor I will off course make a donation to you, if you set up a Gofundme campaign or similar. There are many other resources for this online.

So please, let us know if you set anything up, I'll be the first to donate :wink:


#496

NEW MODULE

DIST

"crusher"
heavy crushing distortion module

-"min/max" clip incoming audio at set min/max levels.
-"bias" DC-offsets the audio input
-"diffmax" sets maximum difference level between original and clipped audio (for clipper-overshoot)
-"LP/HP" set cutoff frequencies for the clipper-overshoot
-"feedback" feeds back the audio output to the audio input of the distortion.


#497

I am getting an error when trying to compile using 46scales.

Here's my error report:

Summary

Generate code complete
Start creating directory on sdcard : /untitled
creating dir: /untitled
Done creating directory
Changing working directory on sdcard : /untitled
file error: FR_NOT_ENABLED, filename:"/untitled"
Change working directory: /untitled
Done changing working directory
Start compiling patch
file error: FR_NOT_ENABLED, filename:"/untitled"
BDIR = C:\Users\Goat\DOCUME~1\axoloti/build
FIRMWARE = .
"RM"
rm -f C:\Users\Goat\DOCUME~1\axoloti/build/xpatch.o C:\Users\Goat\DOCUME~1\axoloti/build/xpatch.elf C:\Users\Goat\DOCUME~1\axoloti/build/xpatch.bin C:\Users\Goat\DOCUME~1\axoloti/build/xpatch.d C:\Users\Goat\DOCUME~1\axoloti/build/xpatch.map C:\Users\Goat\DOCUME~1\axoloti/build/xpatch.lst
"APP"
arm-none-eabi-g++ -nostdlib -fno-exceptions -fno-rtti -mcpu=cortex-m4 -O3 -fomit-frame-pointer -falign-functions=16 -mfloat-abi=hard -mfpu=fpv4-sp-d16 -fsingle-precision-constant -Wunused-parameter -DCORTEX_USE_FPU=TRUE -DTHUMB_PRESENT -mno-thumb-interwork -DTHUMB_NO_INTERWORKING -mthumb -DTHUMB -std=c++11 -DARM_MATH_CM4 -D__FPU_PRESENT -fno-math-errno -fno-threadsafe-statics -H -IC:\PROGRA~2\Axoloti\app/CMSIS/Include -IC:\PROGRA~2\Axoloti\app/chibios/os/ports/common/ARMCMx/CMSIS/include -IC:\PROGRA~2\Axoloti\app/chibios/os/ports/common/ARMCMx -IC:\PROGRA~2\Axoloti\app/chibios/os/ports/GCC/ARMCMx -IC:\PROGRA~2\Axoloti\app/chibios/os/ports/GCC/ARMCMx/STM32F4xx -IC:\PROGRA~2\Axoloti\app/chibios/os/kernel/include -IC:\PROGRA~2\Axoloti\app/chibios/os/hal/include -IC:\PROGRA~2\Axoloti\app/chibios/os/hal/platforms/STM32F4xx -IC:\PROGRA~2\Axoloti\app/chibios/os/hal/platforms/STM32 -IC:\PROGRA~2\Axoloti\app/chibios/os/hal/platforms/STM32/GPIOv2 -IC:\PROGRA~2\Axoloti\app/chibios/os/hal/platforms/STM32/I2Cv1 -IC:\PROGRA~2\Axoloti\app/chibios/os/hal/platforms/STM32/OTGv1 -IC:\PROGRA~2\Axoloti\app/chibios/os/hal/platforms/STM32/RTCv2 -IC:\PROGRA~2\Axoloti\app/chibios/os/hal/platforms/STM32/SPIv1 -IC:\PROGRA~2\Axoloti\app/chibios/os/hal/platforms/STM32/TIMv1 -IC:\PROGRA~2\Axoloti\app/chibios/os/hal/platforms/STM32/USARTv1 -IC:\PROGRA~2\Axoloti\app/chibios/boards/ST_STM32F4_DISCOVERY -IC:\PROGRA~2\Axoloti\app/chibios/ext/fatfs/src -I. -IC:\PROGRA~2\Axoloti\app/chibios -Winvalid-pch -MD -MP --include C:\Users\Goat\DOCUME~1\axoloti/build/xpatch.h -c C:\Users\Goat\DOCUME~1\axoloti/build/xpatch.cpp -o C:\Users\Goat\DOCUME~1\axoloti/build/xpatch.o
! C:\Users\Goat\DOCUME~1\axoloti/build/xpatch.h.gch
C:\Users\Goat\DOCUME~1\axoloti/build/xpatch.cpp: In member function 'void rootc::instance46Scales__1::dsp(int32_t, int32_t, int32_t, int32_t&)':
C:\Users\Goat\DOCUME~1\axoloti/build/xpatch.cpp:129:22: error: 'class rootc' has no member named 'instance_i'
outlet_note=(parent->instance_i.note[semitone+Scale*12]+octave*12+key)<<21;
^
make: *** [C:\Users\Goat\DOCUME~1\axoloti/build/xpatch.bin] Error 1
shell task failed, exit value: 1
Compiling patch failed ( untitled )

I also noticed that the local data (where we're supposed to look for the included scales) is empty. Connected?


#498

@spacelordmother

It is working here. You have to use 2 objects. 46 scales is basicly just the scale player than call the scales from another object. So you need another object called sss/harmony/ScaleBank

... And set it up like this, like you would with a table: Name the scalebank something and then write that name into the 46scales object. In this case it is called SB1:


#499

Ah, thanks! Working now. :slight_smile:

I wish there was a good primer on the use of tables -- even as a non-coder there's lots of stuff I can figure out, but they continue to elude me. Shame as it seems that's where the real power is.


#500

also add the scalebank-module (same folder)
this module provides the note-values which are "permitted".
this way you only need one module to "feed" the possible notes and read the same scaling for multiple oscillators at the same time using the 46scales module


#501

NEW MODULES

MIX

"rotatorMix"
crossfade between four inputs using angle and distance controls.
distance is limited to a 1:1 ratio, so high distance values turn the sine-rotation into a clipped triangle rotation, following the maximum mix-limits.

SPAT

"spatialRotator"
crossfade between four outputs using angle and distance controls.
distance is limited to a 1:1 ratio, so high distance values turn the sine-rotation into a clipped triangle rotation, following the maximum mix-limits.

OSC

"sintri"
simple oscillator with morph between sine and triangle.
There is a polyphonic subpatch in the "synth" folder.

"STO"
another version of the "sintri" with a sub-oscillator and filter added, same idea as the eurorack "STO" module.

PATT

"goalStepper"
pattern generator that steps from a former value to a new value in a set amount of steps.
INPUTS:
"next" sets the next goal that the pattern will go to.
at each trigger at the "trig" input, it will advance 1 step.
"steps" sets the pattern length, after which the goal (new value) is reached.
"stepsize" sets the count-size for the pattern, skipping intermediate steps and repeating steps, but making sure the last step will always be the goal.
OUTPUTS:
"out" outputs the pattern-value
"count" outputs the count-position->maximum is set by the "steps" input
"next" outputs a trigger when the maximum count is reached.

By making a loop between this module and a counter and LFO (qtsLFO4), interesting patterns can be made:
-connect "steps" output to the multiply input on the qtsLFO4, this way each stage takes the same time, but with a different measure (7/8, 9/8 15/8 etc etc) Don't forget to set the multiply parameter to 0, as it would otherwise offset the count-rate from host position!
-connect the LFO output to the "trig" input and set the waveform to square (switch-position to 5)
-connect the "next" output to a counter
-connect counter output to 3 "sel/sel dial8" modules.
-connect one sel/dial8 module to the "next" input, feeding the "goal-values"
-connect one to the "steps" input, setting how many steps it will take to reach the next value
-connect the last one to the "stepsize" input, enabling different patterns for each stage.