MIDI Chord Detection and Translation

buckmorello

2016-12-25 00:46:44

I have a question about the capability of this software (I own it btw).

I am in the very beginning stages of developing a new synth idea... and to test the idea out before hiring developers, I'd like to see if I can make what I'm trying to accomplish on a very rudimentary basis first.

So, here's my question.:

Let's say I have guitar/synth chords sampled, and each chord assigned to a key in Kontakt.

If on c4, I had a Major C chord, first inversion (C, E, G)... would it be possible for Midi Translator to receive C, E, G on the input from a MIDI controller, and then convert that to a single MIDI note that corresponded to the key that chord was assigned to in Kontakt? And of course, so on and so forth for different chords assigned to their relative sampled chord in the sampler.

Basically, using MIDI translator as a MIDI detection medium which would output each detected chord to its corresponding key in the sampler?

Am I explaining this right? Anyway, if anyone has an answer, I'd appreciate it. If MIDI translator isn't the software for this, perhaps someone knows of something that WOULD work?

JacobiusWrex

2016-12-26 16:13:27

Hi there

Sounds cool, I guess I'm struggling to visualize how the whole thing ends up working but I may have some insight.

If you step back and look at Bome like a CPU, I feel like in theory you could trigger almost an infinite amount of actions via MIDI.

So like strip it down and count how many things do you need to trigger in Kontakt, (output from Bome)
then figure out the different signals that you would use to trigger them (physical input to Bome)
then you should be able to piece a prototype together.


I am passing a lot of chord/arpeggio messages through Bome but not via any scripting in Bome but rather from this new device in Propellerhead Reason 9 called "scales and chords". I basically run my guitar MIDI pickup through an on/off switch in Bome first, that then goes into Reason where the MIDI goes directly into "Scales and Chords" which I have all mapped out to one of my MIDI controllers. That information then goes through the instrument to trigger the sound but also gets sent back to Bome with the chord/scale goodies from the Reason device. I can then use that data however I want to in Bome. I could imagine in your case being able to create triggers that output corresponding messages to your sampler. I take the chord info and display it on a launchpad in one of 8 different colors that correspond to 8 different parallel MIDI chains.

Anyway good luck hope you get some ideas
(C E G is root position by the way not any inversion)

Jacobius Wrex

buckmorello

2016-12-26 16:20:48

Yes, it seems like Bome would be able to do this... but everything I've discovered so far, seems like it only sees one MIDI note at a time. I'd need it to only respond when there were two or more notes pressed.

sjcaldwell

2016-12-26 17:47:37

buckmorello wrote:Yes, it seems like Bome would be able to do this... but everything I've discovered so far, seems like it only sees one MIDI note at a time. I'd need it to only respond when there were two or more notes pressed.
It seems to me you would need to capture the current state of each note on in a series of variable and only trigger the event if the correct 3 notes are in the on state at the same time. The order of the notes should not matter if the user happens to trigger one note a bit earlier than another. When a note off event happens for a given note, you would need to update it's corresponding variable to the off state as well.

Lets say the 3 note variables are ga, gb and gc

Initially all values are 0
On any note on, capture it's value in the first variable with zero value (in this case ga)
Another note comes on, since ga is not zero populate it's value in gb
and so on for the third note.

Every time you get a note on value also evaluate if the target chord is being played (with a series of rules based on the note on) and trigger the targeted note on event base on the evaluated chord.

If a note off event comes with the same value of any of the three variables, clear that variable.

A question arises, if you have a 4th note etc. What to do with it?
  • Ignore it
  • Pass it on untouched
  • Replace the value of one of the existing variables (if so which one)
Sounds like an interesting and very challenging project.

buckmorello

2016-12-26 18:08:33

sjcaldwell wrote:
buckmorello wrote:Yes, it seems like Bome would be able to do this... but everything I've discovered so far, seems like it only sees one MIDI note at a time. I'd need it to only respond when there were two or more notes pressed.
It seems to me you would need to capture the current state of each note on in a series of variable and only trigger the event if the correct 3 notes are in the on state at the same time. The order of the notes should not matter if the user happens to trigger one note a bit earlier than another. When a note off event happens for a given note, you would need to update it's corresponding variable to the off state as well.

Lets say the 3 note variables are ga, gb and gc

Initially all values are 0
On any note on, capture it's value in the first variable with zero value (in this case ga)
Another note comes on, since ga is not zero populate it's value in gb
and so on for the third note.

Every time you get a note on value also evaluate if the target chord is being played (with a series of rules based on the note on) and trigger the targeted note on event base on the evaluated chord.

If a note off event comes with the same value of any of the three variables, clear that variable.

A question arises, if you have a 4th note etc. What to do with it?
  • Ignore it
  • Pass it on untouched
  • Replace the value of one of the existing variables (if so which one)
Sounds like an interesting and very challenging project.
That makes sense. I am a producer/sound designer, and so while I understand the logic behind this methodology, I'm not entirely sure how to execute it. If someone out here is willing to help with writing the logic for this for one chord, I would be grateful. I could probably interpolate that same logic for all other chords.

JacobiusWrex

2016-12-27 02:38:42

I can't speak for anyone else but I feel unable to proceed without a little more information about what exactly you are sampling to be triggered (single notes? chords?) . I'm still not understanding why exactly you would need Bome to achieve your result.

Like say I press C E G on a keyboard simultaneously and that sends C E G into Kontakt and you load a C sample on the C key, an E sample on the E key, and a G on the G key (at whatever Octave you decide), why wouldn't that work? Is there no polyphony for sample triggering in Kontakt?

buckmorello

2016-12-27 03:48:31

JacobiusWrex wrote:I can't speak for anyone else but I feel unable to proceed without a little more information about what exactly you are sampling to be triggered (single notes? chords?) . I'm still not understanding why exactly you would need Bome to achieve your result.

Like say I press C E G on a keyboard simultaneously and that sends C E G into Kontakt and you load a C sample on the C key, an E sample on the E key, and a G on the G key (at whatever Octave you decide), why wouldn't that work? Is there no polyphony for sample triggering in Kontakt?
Yep, absolutely. I know it sounds uber strange to do something like this when you can do each note separately.

Lemme break it down a bit more:

I've been doing some pretty intense sound design for some Sci-fi projects... and I've been delving into some really interesting results with full on guitar chords that are already processed heavily through effects and overdrive as my root sounds. Because of these results, I thought it might be interesting to create a synth based on some of this sound design. My intention is to multisample chords across a sampler that might be able to be played in real time by either a MIDI guitar or a keyboard controller for live purposes.

You might be asking... well, why not just play the guitar itself in real-time, or the synth? Good question.

Because of the nature of the processing I'm doing on the chords themselves, the resulting harmonics in conjunction with the synth layering I'm doing on top of it are kind of amazing. I wanted to create something that could be played naturally, with the end result being something completely unnatural.

Make sense?

JacobiusWrex

2016-12-27 06:37:16

Wow man sounds really cool! I would love to hear it or Beta test/demo it for you!! :wink: I am very into the MIDI guitar thing and am excited to hear more of sounds designed with MIDI guitar in mind!
Although it may not be the best or most efficient, I can see one method that might work for you going like this:

Translator 1: CHORD 1 NOTE ON
Incoming: Midi Message/Raw Midi
90 60 oo, 90 61 pp, 90 62 qq,
on port: whatever your keyboard/midi guitar port name is

Outgoing: Midi Message/raw midi
90 60 oo, 90 61 pp, 90 62 qq
on port:BMT 1 Alias



Translator 2: CHORD 1 NOTE OFF
Incoming: Midi Message/Raw Midi
90 60 00, 90 61 00, 90 62 00
on port: whatever your keyboard/midi guitar port name is

Outoing: Midi Message/raw midi
90 60 00, 90 61 00, 90 62 00
on port:BMT 1 Alias

(where 60,61,and 62 are keys on the keyboard that you want to trigger the corresponding chord)
let's just imagine that they correspond to ol faithful C major triad. (they don't but lets imagine)

Then you set up BMT 1 as your input in Kontakt.

If you use the Raw MIDI option for your incoming/outgoing messages you can type just type in the message into the field and it will only trigger when the whole message is found to be true. This should get your filtering done pretty easily and should also be pretty easy if you spend a half hour or so using a free text editor program like "Microsoft Code" to get organized with all your messages where you can batch edit them then just copy and paste into your translators.

You still have to decide ultimately on the Kontakt side EXACTLY WHICH NOTES you need sent from Bome. So for laying out your project I would suggest starting on the Kontakt side of the equation simply on paper/whatever medium writing down what samples you want triggered from 1 key, from 2 keys, from 3 keys, major chords, minor chords, etc... make it nice and easy to stay organized. Then just make 1 functioning On/Off translator pair and duplicate it and adjust the numbers as you go to create all the different chords.

Hope this helps

sjcaldwell

2016-12-27 15:34:00

Not sure if this would work as I don't think when you play a chord, you can predict which note-on message will hit first. Maybe BMT
"smart" enough to take them in any order but I wouldn't count on it.

florian

2017-01-29 16:28:22

Hi,
sorry for chiming in so VERY late!

JacobiusWrex, IMHO that's a nifty solution! But, as sjcaldwell points out, this scheme only works if the chord is always played in the same order of individual notes, and, in particular also if the notes are also released in the same order after pressing all 3 notes down.
One could create one translator each for every single of the 6 combinations of note order.

The better way is to use one or more global variables to remember which key is down. It requires a bit more logic, let me know if you'd still like to pursue this here. Then, please outline exactly which keys you want to press and depress when and to create which result.

Thanks,
Florian