1. Please do not install macOS 10.15 Catalina yet, as Native Instruments software and hardware products are not supported under macOS 10.15 yet. For more info, please go HERE!
    Dismiss Notice

How to program a different chord(midi) to be sent with every button click

Discussion in 'Building With Reaktor' started by zoobooboozoo, Jun 18, 2017.

  1. zoobooboozoo

    zoobooboozoo Member

    Messages:
    56
    Hi all,

    I have an idea and I'm trying to figure out what's the best way to go about it.

    I want to be able to pre-program a sequence of different chords. for example:
    1. C (C3, E3, G3)
    2. D (D3, F#3,A3)
    3. G (G3, B3, D3)

    And I want to program my sustain pedal so that every time I press it reaktor plays the next chords in the sequence. so 1st i press it will play C until I release the pedal, 2nd I press it it will play D until I release it and so on. by play I mean of course send the midi data to whatever vst is connected to a certain midi track.

    Later on can be nice to add some extra features like reapating a certain sequence and having different sequences and presets to alternate between and other stuff but this is the basic of what I'm trying to do.

    Anyone knows of a certain design that does something similiar or can give an efficient direction of how to build one with reaktor?
    I'm using Reaktor 6 now for the 1st time. I built a little with Reaktor 5, but am completely new to 6...

    I'm using ableton by the way.

    thx for the help
     
    Last edited: Jun 18, 2017
  2. colB

    colB NI Product Owner

    Messages:
    3,014
    This is not a beginner project, but definitely achievable. Doing it with MIDI sent to external devices makes it more tricky than just using Reaktor instruments.
    I'm not sure if there are existing ensembles that do what you want, but for getting help here, probably would be better narrowing things down a bit, asking more specific questions - work out what you want in more detail and try a few things out, then come back with concrete examples of problem you are having.

    I primary, you're probably looking at a 2 dimentional array in an event table with iterators to drive the process. In core, maybe an array, but using the event rate clock and counters to drive things along.
    Main thing is to send a sequence of note-ons, then wait, then send a sequence of note-offs that match the note ons. You also need to keep track of the current index within the sequence...
    The GUI side could be really simple but messy and inflexible, or efficient elegant flexible and much more difficult to implement, or anything in-between :)
     
  3. zoobooboozoo

    zoobooboozoo Member

    Messages:
    56
    Thx colB, I've started. trying to make it happen with an event table. so far so good...

    I'm looking for some midi note number to midi note name converter, do you know of one?
    i mean some table that takes value 0-127 and converts to text like C3 or G#6 etc...
    i can do it myself of course but I bet someone did one before...
     
  4. zoobooboozoo

    zoobooboozoo Member

    Messages:
    56
    I'm wondering though if the event table is the best thing I can use. I would love to have this kind of basic interface:
    an arrray of say knobs. where can I can write a midi note number (0-127) that will be written to the table. so it should like this:
    So 1st knob sets the value for x0y0, 2nd sets x0y1, 3rd sets x0y2 etc.

    I'm note sure it's convenient to make this happen with the event table...
     

    Attached Files:

  5. colB

    colB NI Product Owner

    Messages:
    3,014
    Yep, that's the easiest way I think. Each knob having a single unique task.
    The output of each knob would go to an order module then the outputs of the order module can be used to setup the correct array indices for the table.
    So set the order module to have 4 outputs (mostly good practice not to use the top one as that can cause initialisation issues)
    then out 2 goes to a value module which sends its value to the x index via a merge (so all knobs can send to here), out three goes to another value module sending its value via another merge to y index input, then final output of the order sends the actual note value to the write input of the table.

    This way, any time you tweak a knob, it sends its value to the correct table entry.

    Something like this:
    chord sequence.PNG

    As you can see, it will get messy really quickly :)
    you can encapsulate the knob/order/values into a macro with 3 outputs x, y & noteVal, that will tidy things up a little.

    A more flexible approach might be to have a set of knobs for a chord, and then another knob to set which chord it is, then you can have many more chords in your sequence but minimise the clutter (both GUI and structure) and also have a system that is more easily extended.

    Ideally would be thinking about a system that allows the user to set record mode on, then hold a chord, release, hold another etc. until the sequence is recorded. With a knob to shuttle through the recorded chords, update, insert etc. Ultimately this approach combined with knob based data entry style editing would be very much more usable.

    Pretty sure the Blocks Template has widgets that convert value to note name. Should be pretty easy to rip and convert for use with MIDI note values.
    EDIT: yes, there is a knob on the right with multiple diplays one of which is note name.
     
    Last edited: Jun 18, 2017
  6. zoobooboozoo

    zoobooboozoo Member

    Messages:
    56
    Hey. thx again.
    I got more or less the rest of what you wrote, but I didn't really get what you mean by describing this alternative...

    The record on etc. idea is of course the ideal, but I think it would be quite complicated, not sure how to go about recording and storing polyphonic midi data...
     
  7. colB

    colB NI Product Owner

    Messages:
    3,014
    I mean enough knobs to edit one chord, plus another indexing knob to choose which chord to edit (might be better as buttons for next/previous). This is a little trickier as each time you update the chord# knob, you need to update all the individual note knobs to show the value they are for that chord.
    This is not 'better' but it would be simpler to maintain and have a smaller GUI footprint.
    You're right, it would be more complicated to build. As much as anything from all the little design problems that are not obvious until you try using it. Then you have to keep adding features to fix issues that were not apparent prior to implementation...
    FWIW there is no such thing as polyphonic MIDI data - it's just a sequential stream of ons and offs (and various other data). Not sure if that makes it easier though or more difficult ultimately.
     
  8. salamanderanagram

    salamanderanagram NI Product Owner

    Messages:
    3,438
    you may or may not find this helpful, but it basically creates a chord generator that will play a given chord depending on the input note.