Midi Note Jumbler


#1

Hi all,

Just starting out with my Axoloti - I've got the MusicThingModular version from Thonk, so I have 6 dials, 3 buttons and a joystick to play with.

I'm getting to grips with audio synthesis pretty easily, but what I REALLY want is to be able to use the dials to apply changes to midi notes that come in.

IDEALLY I'd like to be able to log the last few notes (let's say up to 16) that came in, then be able to play them in a different order. So if the user turns the dial to position 2, the Axoloti will hold back each note until 2 more have been played, then it'll output the stored note (with the new gate triggering) instead of each new note.

If I can get this working, I'd love to be able to do other things like have a dial that budges the outgoing notes up or down octaves...

Is this sort of stuff possible?


#2

store the notes in a table using table/write then you can read them back with table/read

note: what you cannot (easily) do in patching, is avoid storing duplicates - as this would require iterating over the table to avoid dups.

you can just do this on playback, so read out the note with table/read then add an offset which is given with the pots.


#3

Thank you! I'll try this out! :smiley:


#4

Ok, so with a table I think I need to pass it a number for what position in the table it should read/write to... That position comes from a counter - easy peasy. But I want the counter to re-set if it has reached the limit defined by the user (by their turning a dial).

So how do I get a dial position and turn it into a green-input number for my math/> ? And then how do I get the yellow output of math/> to trigger the table/read (which only has 1 blue input that is expecting a number for what position to read)?


#5

@thetechnobear - Hi! I've been working with what you suggested and it seems like it's GETTING there... but I'm really struggling to get data in/out of a table... I got some advice about data types and a I made a pair of custom read&right modules that are expecting frac32.bipolar numbers (which appears to be what notes are expressed as).

Both the read and the right are "triggered". I got this from the table/write that was in my libraries by default, and I THINK I understand the java to mean it's only triggering a write when it gets a bool input.

The trouble I'm having is that I can't tell if it actually IS writing into the table at all. When I read from the table, it doesn't appear to matter which position I read, it's always the same note - which I thought at first was because I was storing them in the wrong way, but maybe I'm actually just not storing them at all?!?

Should writing notes into tables "just work"? Or is it a really complicated thing?


#6

its simple.
but you need to make sure you activate the trigger... if the content is definitely not set, that's the most likely cause. (or your execution order is incorrect, such that the trig is happening before you supply the value)

best way to check is to use LogTextMessage, to check its being set or create a 'dump table' object that will print the contents if your not sure if its being set or not.


#7

Thanks! Turns out that was exactly what was going wrong! :smiley:


#8

@thetechnobear For the octave-up dial, I've got it so my dial's input will be 0 - 4, but what action do you suggest I use to offset the note? I've found "Offset_Scale_1" but that's controlled by little virtual dials on it and I'm not sure how to get my numerical input from the "pot" to control it...


#9

sorry, I don't understand the question …

the float values from a float dial (or gpio) can be added directly to the midi note, an increase in 1 on the dial will lead to an increase in one midi note, so one semitone... so if you want to go up by octaves, just multiply it by 12?!

(I guess you'll probably want it unipolar, so you can also go down octaves)