Factotum mods (oneshot, saving/loading, sample players)


#21

Another update!

Recorder version 3:

Replace! A momentary replace inlet - when high it replaces whatever is recorded with the incoming signal.

A phase outlet that puts out the phase of the overdub clock.

Some transport type inlets and outlets for looper style control of the player. Inlets for play and stop, trigger outlets for start, stop, loop point crossover.

Some under the bonnet tweaks to stop clicks when overdubbing or replacing.

Player version 3:

Lots of tweaks to make retriggering better. It doesn't fade out and then in again when triggered anymore. Instead it triggers instantly and crossfades. Generally improved, better timing.

Start and end settings improved - you can set it so it goes over the samples loop point by having the start after the end. For example if the start inlet is 48, and end inlet is 16 it will start at 48, then at 64 it loops around to 0, and then ends at 16 where it will either jump to the start (48) if looping or stop if oneshot. Hope that makes sense!

Fade settings - if attribute is set to auto it adjusts the crossfade and fade in and fade out according to the stretch and rate settings. If not, the fading is fixed to fade the parameter, which is set in samples.

Bonus objects-

a simple player that responds nicely to retriggers and is compatible with the recorder (much 'cheaper' than the other player, with no stretch, etc.

A module for making a slicer - reads the phase outlet of the recorder and puts out start and end points and play triggers in sync with the natural playback to control the player.

Patches:

Fact v3 looper patch -

A simple help patch setup to use the recorder and player as a Looper.

fact v3 looper upload.axp (29.3 KB)

Fact v3 loop slicer
A similar patch, but has slicing! You can divide the loop into slices and it triggers each slice in turn. So if you record a loop and divide by 4 it will trigger the first beat of the loop, then the second, then the third, etc. It keeps sync with the natural playback, so with the same division but rate reversed it will play the 1st beat backwards, then the second beat backwards, etc. It has a delay mode so you can use it as a kind of pitch/stretch delay where the loop length becomes your maximum delay time. Has notes on controls in the patch.

fact v3 slicer upload.axp (44.0 KB)


Fact v3 sequenced slicer:

The same as the slicer patch, but with sequencing to allow individual control of 8 slices' pitch, stretch rate and loop settings. It kind of loops through the 8 settings separately to (but in sync with) the slicer so it doesn't matter if there are less or more than 8 slices. It's mega fun. All sorts of rhythmic mangling repeat possibilities. Can be used as a delay style effect.

fact v3 slicer sequenced upload.axp (53.6 KB)


#22

Hell yeah! Looking forward to trying these out - thanks!

Quick edit - Just tried out the replace function and its awesome, everything I've been wanting. Great job!


#23

Amazing Matt, greatly appreciate all your hard work on these, it's like Factotum Christmas


#24

Hey @MattilynMattroe

Been playing around a bit with these in the train and I have to say this is utterly fantastic! I have been dreaming about somehting like this since the first time I tried axoloti!

I am going to dig deeper into these and try to fuse it into my Looper patch based on @rbrt's modules.

I am just wondering, it would be possible to use the timestretching more for syncing up loops to an external clock and make tempochanges possible right?

If I wanted to this, I guess I would have to know the scaling of the stretch parameter. What range does it have? How could I translate it to a percentage?


#25

Hi,

Thanks for the kind words!

You're in luck - I made an object for doing synced time stretch the other day but haven't had a chance to upload it yet. So, there will be a midi synced Looper patch coming with synced stretch. And an unsynced one that allows you to tell it what bpm the loop was originally recorded at and stretch to a new bpm.

Whilst making the synced patch I noticed that retriggering while overdubbing can cause clicks, but I've updated the recorder object to fix this.

I probably won't get a chance to upload before Christmas, but it'll come soon.


#26

Oh wow that is fantastic news! I started to grow a bit frustrated by the limitations of my looper and axoloti in general, so this could really breathe new live into my boards and my music :slight_smile:

I always like when you have the option to sync or unsync, since also drifting loops can have their appeal. Or a new recorced loop that becomes the new master tempo :slight_smile:


#27

Happy New Year!

Here's some synced stretch fun!

Patches:

fact v3.1 synced upload.axp (65.0 KB)


fact v3.1 BPM upload.axp (29.6 KB)

Patches:

A midi synced looper patch.

Press record and recording starts at the beginning of the next bar, press record again and recording stops at the next bar and playback starts. It has a limit of 8 bars (if recording and it hits 8 bars it stops recording and starts playing). But the limit can be adjusted using the 'barmax' parameter on the transport object.

Play and stop buttons are quantized to the bar.

If you change the bpm of the midi clock, it should stretch the loop to the new bpm. It takes about 3 beats to settle.

There is a 'repitch' mode where it will also change the pitch when you change bpm.

Unsyced bpm patch

This is an unsynced looper but with two bpm controls. Hit record to record. Hit it again and playback starts.

Set the 'sample bpm' to the bpm of the recording (if you know what bpm you recorded too...) and set the 'new bpm' to the bpm you want to stretch to. If both bpms are the same, there is no stretching.

New objects:

Fact syncer. Works out the stretch value for the difference between two times/bpms.

Fact transport. Handles quantized recording/playback, records the length of the sample in bars. Handles resyncing when tempo is changed.

Update:

Recorder 3.1 . I started tweaking it to get rid of clicks when overdubbing, and ended up more or less rewriting the object. Functionality is the same, but it works better.

Bonus objects:

Midi clock receiver with outlets for: The length of a beat (at k rate, x16 for sample rate). The 'phase' of a bar (updated every 1/32).

A synced glide object. To be used with the clock receiver. Glides the input for 1 beat. Ish. Depending on how much the input changes.

Nerd notes:
A note on the scaling of the stretch parameter, for those that like to tweak: it's scaled like pitch. 12 is double time, -12 is half time, etc. I find values that are multiples of 3 are quite rhythmic. The way the syncing works is that it scales the inlets to the 'pitch' value and subtracts one from the other.
The object should work with any time/bpm. But for bpm the calculation is reversed, because higher numbers = faster, but with length/time higher numbers = slower (the mode attribute simply switches the 'base' and 'new' inlets around).


#28

Been very distracted lately, but just had 10 mins to kick these new patches around..........Matt, hats off, very stable, nicely reactive...really juicy stuff, just what I wanted really....Thank you so much, you're a legend.


#29

No problem! It's all being used for one of my main patches so I need it all pretty solid.

I want to try and put in some kind of resample feature, and also make some versions aimed at sample based instrument patches rather than loopers. But I've been side tracked trying to figure out a live input granular idea... And I need to rebuild my drum patch... And maybe make some actual music :rofl: