Several midi SysEx messages as incoming trigger

arturchernyshov

2014-02-03 21:04:31

Hi, all!
Is it possible to use several midi SysEx messages on incoming trigger?
Here is an example:
F0 08 40 0A 01 02 40 F7
F0 08 40 0A 01 03 3C F7
These messages appear when I take a chord, press the buttons on the fretboard midi guitar. They do not come strictly simultaneously, this too should be considered.
Can anybody tell me how to set it up?

DvlsAdvct

2014-02-03 22:58:35

Hi arturchernyshov

What you want to do is definitely doable. What we're going to need to do is use a global variable to listen for both messages, and only when both have been received will it trigger. I'm assuming there will be other Sysex messages containing 02 40 or 03 3C in different combinations, so we're going to split these into two separate translators to avoid overlap.

It would look something like:

Code: Select all

Translator 1: Sysex Stacking
Incoming Message: F0 08 40 0A 01 02 40 F7
Rules: if g0==0 then Goto "One"
if g0==1 then Goto "Two"
Label "One"
g0=1
Exit rules, skip outgoing action
Label "Two"
g0=0
Exit rules, execute outgoing action
Outgoing Action: [whatever you need]

Translator 1: Sysex Stacking
Incoming Message: F0 08 40 0A 01 03 3C F7
Rules: if g0==0 then Goto "One"
if g0==1 then Goto "Two"
Label "One"
g0=1
Exit rules, skip outgoing action
Label "Two"
g0=0
Exit rules, execute outgoing action
Outgoing Action: [whatever you need]
This way it will only trigger after both messages have been received, regardless of the order, and once the second message is received it will reset and await both messages again. Let me know if that works

Jared

arturchernyshov

2014-02-04 03:31:57

Hi Jared!
Thank you very much for your reply!
Unfortunately, your rules do not work as it should.
My outgoing action is four midi-notes: 90 4C 2D, 90 4C 37, 90 3C 4C, 90 4C 3B (without commas, of course). I wrote them into the second translator. But they sound only when alternately press btn 1 (F0 08 40 0A 01 02 40 F7), and then press the btn 2 (F0 08 40 0A 01 03 3C F7). Either double-press the btn 2 (permissible in conjunction with any other fret button).
Thanks again for taking the time!

arturchernyshov

2014-02-04 08:52:19

Dear Jared!
I was wrong! I ordered outgoing actions in only one translator, and it was necessary in both. Now it works! It works, but in conjunction with other fret buttons it works too. Maybe you know how to get rid of this?
Thank you very much for your attention to my question!

P.S.
Although, if assign all combination of these fret buttons to other presets, this problem should be solved.

DvlsAdvct

2014-02-04 16:45:28

What messages do those other fret boards send?

arturchernyshov

2014-02-05 11:55:32

I'm trying to make tandem – “Fender Mustang guitar midi-controller” and “RealGuitar 3”. Without midi-translator I can’t teach RealGuitar to recognize chords by pressing only two or three fret buttons in traditional chord positions.
With your rules it work, but now the situation is not clear for me. Sometimes pressing other buttons also act. Sometimes, but not always! So I'm trying to understand in what combinations it occurs.

Jared, could you please show me, what are the rules, if the chord consists of three or more notes?
Sorry for my English ))

DvlsAdvct

2014-02-05 16:54:44

Sure thing. I'll try and make it as clear as possible, but if it doesn't make sense, or I'm not clear then we can always try again.

The translators I wrote in my example should only trigger when those exact sysex messages are received. So when you press down button either F0 08 40 0A 01 02 40 F7 or F0 08 40 0A 01 03 3C F7 individually nothing should happen. If that is all that is in your project then nothing else should happen when you press any other button on your controller. However, if you are getting a signal when pressing other buttons then those other buttons may be sending the same sysex commands. That's strange because you'd think there'd be a different sysex command for each fret.

Can you take a screen shot of your log window? I'd like to see what happens when you press the frets we programmed which react correctly and then what happens when you press the frets that should not trigger.

Thanks
Jared

arturchernyshov

2014-02-06 09:16:47

Hi Jared!
Here are screenshots of my settings (see attachments). Two chords, the difference in a one note. If you deactivate one preset of them, the other chord sounds normal. If both are enabled, then pressing the Strum button will change chords randomly. Sounds even those that I do not ordered.
Attachments
E7 chord.gif
E7 chord.gif (35.05 KiB) Viewed 9881 times
E7sus4 chord.gif
E7sus4 chord.gif (34.62 KiB) Viewed 9881 times
Control Keys.gif
Control Keys.gif (41.14 KiB) Viewed 9881 times

arturchernyshov

2014-02-06 09:24:02

Here are screenshots coming SysEx MIDI messages and midi-note values for​​ the first five frets of the fretboard. And just in case map control keys for RealGuitar.

Thank you for attention.
Attachments
Joystick button map.gif
Joystick button map.gif (17.76 KiB) Viewed 9881 times
SysEx data and midi-note value map.gif
SysEx data and midi-note value map.gif (39.18 KiB) Viewed 9881 times

arturchernyshov

2014-02-06 15:28:19

About logs - what specific windows log you interested in? I have windows 7 64 bits. I do not know where to look the information you asked.

DvlsAdvct

2014-02-06 16:09:14

I mean the MT MIDI log that you can view from the View Menu.

Question... what variables are you using in each preset? The problem is that the first and second chords each are listening for the same notes, so you want to make sure you are using different global variables within each preset so the combinations can only be completed once. There will still be issues if chords you are working with are different sizes, but I don't really know if there's going to be a way around that.

arturchernyshov

2014-02-06 16:32:52

The problem is that the first and second chords each are listening for the same notes
====================
Chords are different, but they have a common note. Like all the chords.

what variables are you using in each preset?
====================
I put the rules that you sent me. The rest can be seen in the screenshot.

There will still be issues if chords you are working with are different sizes, but I don't really know if there's going to be a way around that.
====================
Just show me please the rules for the chords of three or four notes, similar to the ones that you have already sent. If you know how they should look.

Thank You.

DvlsAdvct

2014-02-06 17:40:06

Right, but each chord needs a different global variable. If e7 is using g0 then e7sus4 needs to use g1 instead. And if chords have four notes then instead of adding to two it needs to add to four with four separate translators.

arturchernyshov

2014-02-06 19:36:25

Do I understand you?
If I have 40 chords, it should be 40 global variables.
Each chord should be written in your own preset.
Number translators in preset must be two times larger than the number of notes in the chord (because for each note must be Note On and Note Off).
Is this possible to implement?

DvlsAdvct

2014-02-06 21:35:29

That's pretty much it. Though, I'm looking at the spec you sent and it does look like you can use just the regular MIDI note. So, for F4 you could use 90 41 50 instead of F0 08 0A 01 01 41 F7, right? Just might be easier to put together. I have made some slight changes to the rules as well to accommodate releasing the string.

So you need translators for adding and subtracting notes. You can do this in one translator per note, but let's make sure the logic works before we consolidate, if it's even necessary. Using what you posted, we'll just modify it slightly. Now I'm assuming that no matter which string is removed you want the chord to stop sending, correct? But, if you press the released string again the chord should retrigger This would be for preset E7

Code: Select all

Translator 1: G#3 On
Incoming Trigger: F0 08 40 0A 01 03 38 F7
Rules:  if g0==0 then Goto "One"
if g0==1 then Goto "Two"
Label "One"
g0=1
Exit rules, skip outgoing action
Label "Two"
g0=2
Exit rules, execute outgoing action
Outgoing Action: 90 7E 46 90 7D 46 90 7C 46 90 7B 46

Translator 2: G#3 Off
Incoming Trigger: F0 08 40 0A 01 03 37 F7
Rules: if g0==0 then exit rules, skip outgoing action
if g0==1 then g0=0
if g0==2 then g0=1
Outgoing Action: 80 7E 00 80 7D 00 80 7C 00 80 7B 00

Translator 3: B2 On
Incoming Trigger: F0 08 40 0A 01 05 2F F7
Rules: if g0==0 then Goto "One"
if g0==1 then Goto "Two"
Label "One"
g0=1
Exit rules, skip outgoing action
Label "Two"
g0=2
Exit rules, execute outgoing action
Outgoing Action: 90 7E 46 90 7D 46 90 7C 46 90 7B 46

Translator 4: B2 Off
Incoming Trigger: F0 08 40 0A 01 05 2D F7
Rules: if g0==0 then exit rules, skip outgoing action
if g0==1 then g0=0
if g0==2 then g0=1
Outgoing Action: 80 7E 00 80 7D 00 80 7C 00 80 7B 00
So that should allow that preset to trigger once both strings are hit in the correct position. If only one string is hit nothing should happen.

So then we would need to program the preset for E7sus4. We should use a different global variable so that it counts separately and will only trigger the individual chords. This may cause problems if you trigger multiple chords that have the same two notes added with a third. But if everything is two string combinations then it shouldn't be a problem. That should look like:

Code: Select all

Translator 1: A3 On
Incoming Trigger: F0 08 40 0A 01 03 39 F7
Rules: if g1==0 then Goto "One"
if g1==1 then Goto "Two"
Label "One"
g1=1
Exit rules, skip outgoing action
Label "Two"
g1=2
Exit rules, execute outgoing action
Outgoing Action: 90 7F 46 90 7C 46 90 7B 46

Translator 2: A3 Off
Incoming Trigger: F0 08 40 0A 01 03 37 F7
Rules: if g1==0 then exit rules, skip outgoing action
if g1==1 then g1=0
if g1==2 then g1=1
Outgoing Action: 80 7F 00 80 7F 00 80 7B 00

Translator 3: B2 On
Incoming Trigger: F0 08 40 0A 01 03 37 F7
Rules: if g1==0 then Goto "One"
if g1==1 then Goto "Two"
Label "One"
g1=1
Exit rules, skip outgoing action
Label "Two"
g1=2
Exit rules, execute outgoing action
Outgoing Action: 90 7F 46 90 7C 46 90 7B 46

Translator 4: B2 Off
Incoming Trigger: F0 08 40 0A 01 05 2D F7
Rules: if g1==0 then exit rules, skip outgoing action
if g1==1 then g1=0
if g1==2 then g1=1
Outgoing Action: 80 7F 00 80 7F 00 80 7B 00
Does that make sense?

arturchernyshov

2014-02-06 23:57:31

Hi Jared! Thanks for the code, I'll check it later.

You can use just the regular MIDI note.
============
I had to use SysEx messages instead of MIDI notes to dissolve fret buttons and Fender Mustang guitar controller string sensors. Otherwise, one affects the other.

So, for F4 you could use 90 41 50 instead of F0 08 0A 01 01 41 F7, right? Just might be easier to put together.
=============
Guitar fretboard has 102 fretbuttons. I had the easiest way - to assign own chord for each button, and not to have problem. Then I would have 102 chord and no rules. But then I had to memorize chords map...
The idea was to set the chord map to traditional chords positions. Then any musician, picking up this tool could play immediately.
I hope I can it with a little help from my friends )))

DvlsAdvct

2014-02-07 01:10:32

All makes sense. Let me know how this works out. :)

arturchernyshov

2014-02-07 08:24:28

Unfortunately, the result is approximately the same as before :(. Playing is unstable. Sometimes appears random chords, or sustained (without note-off).
Maybe there are other ways to solve this problem?

arturchernyshov

2014-02-07 08:33:21

Here is the log of pressing E7 chord:

Code: Select all

IN 0.0: MIDI 8 bytes: F0 08 40 0A 01 03 38 F7
condition satisfied: if g0==0 then Goto "One"
assignment: (g0=1) = 1
exit rules, skip Outgoing Action
IN 0.2: MIDI 8 bytes: F0 08 40 0A 01 05 2F F7
condition satisfied: if g0==1 then Goto "Two"
assignment: (g0=2) = 2
exit rules, execute Outgoing Action
OUT 0.2: MIDI 12 bytes: 90 7E 46 90 7D 46 90 7C 46 90 7B 46
IN 0.3: MIDI 8 bytes: F0 08 40 0A 01 05 2D F7
condition satisfied: if g0==2 then g0=1
assignment: (if g0==2 then g0=1) = 1
IN 1.3: MIDI 8 bytes: F0 08 40 0A 01 05 2D F7
condition satisfied: if g1==0 then exit rules, skip Outgoing Action
OUT 0.3: MIDI 12 bytes: 80 7E 00 80 7D 00 80 7C 00 80 7B 00
IN 0.1: MIDI 8 bytes: F0 08 40 0A 01 03 37 F7
condition satisfied: if g0==1 then g0=0
assignment: (if g0==1 then g0=0) = 0
IN 1.1: MIDI 8 bytes: F0 08 40 0A 01 03 37 F7
condition satisfied: if g0==0 then exit rules, skip Outgoing Action
IN 1.2: MIDI 8 bytes: F0 08 40 0A 01 03 37 F7
condition satisfied: if g1==0 then Goto "One"
assignment: (g1=1) = 1
exit rules, skip Outgoing Action
OUT 0.1: MIDI 12 bytes: 80 7E 00 80 7D 00 80 7C 00 80 7B 00
And here is the log of pressing E7sus4:

Code: Select all

IN 1.0: MIDI 8 bytes: F0 08 40 0A 01 03 39 F7
condition satisfied: if g1==0 then Goto "One"
assignment: (g1=1) = 1
exit rules, skip Outgoing Action
IN 0.2: MIDI 8 bytes: F0 08 40 0A 01 05 2F F7
condition satisfied: if g0==0 then Goto "One"
assignment: (g0=1) = 1
exit rules, skip Outgoing Action
IN 0.1: MIDI 8 bytes: F0 08 40 0A 01 03 37 F7
condition satisfied: if g0==1 then g0=0
assignment: (if g0==1 then g0=0) = 0
IN 1.1: MIDI 8 bytes: F0 08 40 0A 01 03 37 F7
condition satisfied: if g0==0 then exit rules, skip Outgoing Action
IN 1.2: MIDI 8 bytes: F0 08 40 0A 01 03 37 F7
condition satisfied: if g1==1 then Goto "Two"
assignment: (g1=2) = 2
exit rules, execute Outgoing Action
OUT 0.1: MIDI 12 bytes: 80 7E 00 80 7D 00 80 7C 00 80 7B 00
OUT 1.2: MIDI 9 bytes: 90 7F 46 90 7C 46 90 7B 46
IN 0.3: MIDI 8 bytes: F0 08 40 0A 01 05 2D F7
condition satisfied: if g0==0 then exit rules, skip Outgoing Action
IN 1.3: MIDI 8 bytes: F0 08 40 0A 01 05 2D F7
condition satisfied: if g1==2 then g1=1
assignment: (if g1==2 then g1=1) = 1
OUT 1.3: MIDI 9 bytes: 80 7F 00 80 7F 00 80 7B 00
The log of pressing Strum Down button:

Code: Select all

IN 2.2: MIDI 10 bytes: F0 08 40 0A 08 00 00 00 00 F7
OUT 2.2: MIDI 90 79 46
IN 2.1: MIDI 10 bytes: F0 08 40 0A 08 00 00 08 00 F7
OUT 2.1: MIDI 80 7A 00
IN 2.3: MIDI 10 bytes: F0 08 40 0A 08 00 00 08 00 F7
OUT 2.3: MIDI 80 79 00

arturchernyshov

2014-02-07 14:48:25

Hi Jared!
We can try another way.
Let’s forget about the chords. There are only a Strum-Down / Strum-Up trigger, and six rows of Fret-buttons (six strings).
If there is no signal from Fret board (all fret-buttons are release), clicking Strum-down button (F0 08 40 0A 08 00 00 00 00 F7) will only generate signal Strum-down D1 (90 26 50). RealGuitar determines that there is no chord in the chord area and sounds like Muted Strum (see attachment)
If to press and hold any Fret-button(s) and then click the Strum-down button, the MT must generate six signals (in accordance with the position of the strings - open or pressed), and after short time (eg 1 millisecond) - signal Strum-down D1 (90 26 50). RealGuitar determines six signals as a chord, and then the signal Strum-down D1 (90 26 50) sounds like a Strum.
More detail about these six signals:
By SysEx message we can determine what string it corresponds. For example in the message “F0 08 40 0A 01 03 38 F7” value “03”are string number, and “38” - note number. Consequently, the outgoing signal, corresponding to the third string, must be 92 38 50, and the remaining five signals - like open strings - 90 40 50, 91 3B 50, 93 32 50, 94 2D 50, 95 28 50.
Sixth string can be ignored, because it usually does not participate in the formation of the chord.
What do you think about - is it possible to implement such an algorithm?
Attachments
chords mode.gif
chords mode.gif (40.94 KiB) Viewed 9835 times

DvlsAdvct

2014-02-07 17:57:48

I think this might be doable.

How does this sound:

You trigger a strum and have one fret pressed, say on string 1. MT triggers 6 notes based on the position of each string. So string 1 is the only string that has a note that is different from Open, right?

Now you keep that fret pressed down and select a fret on string 3. When you fire off your strum it will trigger all 5 strings with only strings 1 and 3 having a different note.

What you can do to facilitate this is have a single translator for each string and one total output translator for the final chord. In string translator the rules are looking for the note number which will trigger a timer on a slight delay (1 to 5ms), which will be what triggers the final chord translator. The output of the final chord translator will be based on the variables defined in each string translator, and the output will be filled with local variables. This way if you press one string and trigger it you will get your final chord, and if you press three strings and trigger the output you will get a different final chord, but only related to all of the strings that are held down.

Does that make sense? As a note, I'm going to be going on a quick trip and will be back on Monday. If I can't get to this over the weekend (which is unlikely) I will once I get back.

J

arturchernyshov

2014-02-07 20:58:34

Hi Jared!
I do not know what I would do without you! You understand me correctly!
There is only one thing I want to mention especially - final chord should consist of two parts.
1. Six MIDI-notes (five midi-notes are better) which go to "chord area" for chord recognition.
2. Midi-note which go to "repeat area" (after 1-5 millisecond delay) for "Strum" or "Muted Strum" sound.
Have nice weekend!

arturchernyshov

2014-02-17 04:18:28

Hi, Jared!
After much experimentation I finally found a mode that allows me to achieve maximum realism of rhythmic accompaniment playing. I set RealGuitar to "Solo" mode and changed only open strings values, in case if not pressed any buttons on the fretboard. In this case I assign them sound "Mute". It sounds very natural, the way of the playing is no different from the real.
But there is one problem I can’t solve without your help. If I play by pressing a few buttons at the same time аnd a few notes sounded simultaneously, that stops sound only note that I'm releas the first. Others notes continue to sound even after releasing it's buttons.
If I use only one button (any), then no such problems.
Here is the code:

Code: Select all

Project: Midi-Guitar (solo mode)
_____________________________________________________________
Preset 0: 1 preset

Translator 0.0: 1 String (FretButtons)
Options: stop=false
Incoming: MIDI F0 08 40 0A 01 01 oo F7
Rules: 
  ga=0
  if oo>64 then ga=1
  if oo==64 then exit rules, execute Outgoing Action
Outgoing: MIDI 80 40 00 81 3B 00 82 37 00 83 32 00 84 2D 00 85 28 00

Translator 0.1: 2 String (FretButtons)
Options: stop=false
Incoming: MIDI F0 08 40 0A 01 02 oo F7
Rules: 
  ga=0
  if oo>59 then ga=1
  if oo==59 then exit rules, execute Outgoing Action
Outgoing: MIDI 80 40 00 81 3B 00 82 37 00 83 32 00 84 2D 00 85 28 00

Translator 0.2: 3 String (FretButtons)
Options: stop=false
Incoming: MIDI F0 08 40 0A 01 03 oo F7
Rules: 
  ga=0
  if oo>55 then ga=1
  if oo==55 then exit rules, execute Outgoing Action
Outgoing: MIDI 80 40 00 81 3B 00 82 37 00 83 32 00 84 2D 00 85 28 00

Translator 0.3: 4 String (FretButtons)
Options: stop=false
Incoming: MIDI F0 08 40 0A 01 04 oo F7
Rules: 
  ga=0
  if oo>50 then ga=1
  if oo==50 then exit rules, execute Outgoing Action
Outgoing: MIDI 80 40 00 81 3B 00 82 37 00 83 32 00 84 2D 00 85 28 00

Translator 0.4: 5 String (FretButtons)
Options: stop=false
Incoming: MIDI F0 08 40 0A 01 05 oo F7
Rules: 
  ga=0
  if oo>45 then ga=1
  if oo==45 then exit rules, execute Outgoing Action
Outgoing: MIDI 80 40 00 81 3B 00 82 37 00 83 32 00 84 2D 00 85 28 00

Translator 0.5: 6 String (FretButtons)
Options: stop=false
Incoming: MIDI F0 08 40 0A 01 06 oo F7
Rules: 
  ga=0
  if oo>40 then ga=1
  if oo==40 then exit rules, execute Outgoing Action
Outgoing: MIDI 80 40 00 81 3B 00 82 37 00 83 32 00 84 2D 00 85 28 00

Translator 0.6: 1 String (Pick)
Options: stop=false
Incoming: MIDI 90 pp vv
Rules: 
  if ga==1 then gc=pp
  if ga==0 then gc=92
  exit rules, execute Outgoing Action
Outgoing: MIDI 90 gc vv

Translator 0.7: 2 String (Pick)
Options: stop=false
Incoming: MIDI 91 pp vv
Rules: 
  if ga==1 then gd=pp
  if ga==0 then gd=92
  exit rules, execute Outgoing Action
Outgoing: MIDI 91 gd vv

Translator 0.8: 3 String (Pick)
Options: stop=false
Incoming: MIDI 92 pp vv
Rules: 
  if ga==1 then ge=pp
  if ga==0 then ge=92
  exit rules, execute Outgoing Action
Outgoing: MIDI 92 ge vv

Translator 0.9: 4 String (Pick)
Options: stop=false
Incoming: MIDI 93 pp vv
Rules: 
  if ga==1 then gf=pp
  if ga==0 then gf=92
  exit rules, execute Outgoing Action
Outgoing: MIDI 93 gf vv

Translator 0.10: 5 String (Pick)
Options: stop=false
Incoming: MIDI 94 pp vv
Rules: 
  if ga==1 then gg=pp
  if ga==0 then gg=92
  exit rules, execute Outgoing Action
Outgoing: MIDI 94 gg vv

Translator 0.11: 6 String (Pick)
Options: stop=false
Incoming: MIDI 95 pp vv
Rules: 
  if ga==1 then gh=pp
  if ga==0 then gh=92
  exit rules, execute Outgoing Action
Outgoing: MIDI 95 gh vv
Can you help me please?

DvlsAdvct

2014-02-20 06:02:48

Hi arturchernyshov

I just want to make sure I understand the problem correctly. If you trigger a few notes at the same time and try to turn them off then only the first string will disconnect but the others will continue, correct?

I think this is happening because each string is tied to the same global variable, namely ga. So ga is 0 when translator 0.6-0.11 trigger. Instead, change string 2 to gb, string 3 to gc, etc.

And then, in the Pick translators change the second global variable to a local variable, so instead of

Code: Select all

if ga==1 then gd=pp
if ga==0 then gd=92
have it read

Code: Select all

if ga!=0 then exit rules, skip outgoing action
if ga==0 then pp=92
Outgoing Action: 91 pp vv
Does that make sense?
Jared

arturchernyshov

2014-03-05 21:55:37

Hi Jared!
Your advice of "Thu Feb 06, 2014 10:35 pm" was helpful! I do not know why I did not succeed at the first attempt. Now everything is OK, if the chord has two notes. Could you tell me the rules for chord of three or more notes?
Thank you for your attention.

DvlsAdvct

2014-03-05 23:56:23

Well, if you want to add three notes then you expand the rules to include a value of 3, instead of two. So instead of the translator triggering on g1=2, it would trigger on g1=3. I'm going to just expand on the A3 string on and off, which should be self-explanatory for the other notes.

Code: Select all

Translator 1: A3 On
Incoming Trigger: F0 08 40 0A 01 03 39 F7
Rules: if g1==0 then Goto "One"
if g1==1 then Goto "Two"
if g1==2 then Goto "Three"
Label "One"
g1=1
Exit rules, skip outgoing action
Label "Two"
g1=2
Exit rules, skip outgoing action
Label "Three"
g1=3
Exit rules, execute outgoing action
Outgoing Action: 90 7F 46 90 7C 46 90 7B 46

Translator 2: A3 Off
Incoming Trigger: F0 08 40 0A 01 03 37 F7
Rules: if g1==0 then exit rules, skip outgoing action
if g1==1 then g1=0
if g1==2 then g1=1
if g1==3 then g1=2
Outgoing Action: 80 7F 00 80 7F 00 80 7B 00
Make sense?

arturchernyshov

2014-03-06 04:53:47

Yes, sure! It works, thank You very much!
But I have one more question.
For Am chord I need to push buttons 34, 39 and 3C. And for Am7 chord - only buttons 34 and 3C. As a result, in both cases I get Am7 chord. Is there a way out of this situation?

DvlsAdvct

2014-03-06 14:24:58

See, this is rough because there's no way for MT to know you only want to play a two note chord that is different from the three note chord of the same notes. There may be options, though.

It can be based on the order of notes played, so if 34 is played followed by 3C then it will play Am7, but if it is 34 followed by 39 then it is Am.

Is there a secondary button that we can use to force the chord with less notes? So, for example, have a sort of "Go" button, play the chord based on what is currently selected and force it to recognize it?

Since there is an initial strum you need to create, would you be interested in having that trigger chords based solely on what is selected? So nothing will happen until the chord is strummed and it is based only on what buttons you have pressed?

arturchernyshov

2014-03-06 15:51:37

Yes, there is the 2 secondary buttons - Strum Up and Strum Down.
I press chord of two or more notes, and then I click trigger "Strum Up" or "Strum Down".
Can MT correctly recognize a chord, no matter how many notes it contains, based on this?

Code: Select all

Preset 5: Strum

Translator 5.0: Strum Up
Options: stop=false
Incoming: MIDI F0 08 40 0A 08 00 00 04 00 F7
Outgoing: MIDI 90 7A 46

Translator 5.1: Strum Down
Options: stop=false
Incoming: MIDI F0 08 40 0A 08 00 00 00 00 F7
Outgoing: MIDI 90 79 46

Translator 5.2: Star Power
Options: stop=false
Incoming: MIDI F0 08 40 0A 08 00 00 06 00 F7
Outgoing: MIDI 90 78 46

Translator 5.3: Strum Up/Down/Star Power Off
Options: stop=false
Incoming: MIDI F0 08 40 0A 08 00 00 08 00 F7
Outgoing: MIDI 80 7A 00 80 79 00 80 78 00 80 77 00

arturchernyshov

2014-03-18 11:04:44

Hi Jared!
Can I hope that I will get your answer?

Best regards!

DvlsAdvct

2014-03-18 11:36:36

Hi there

Terribly sorry. I've been travelling to trade shows and spending some time away from home so I haven't had reliable access to the internet.

You can have the signal based off of when strum is hit, that way it counts what each note is that is held and doesn't play anything until the strum is triggered. To do that, though, you're going to need to create a translator system for each chord. What I think would make sense is to assign a global variable to each string and a value to each fret. So, it would be something like string one is g0, fret one is g0=1, fret two is g0=2, etc. What you need to do is make sure there is a method of reseting the global variable to 0, because that's the only way chord combinations would work. So, for example, the signal sent by releasing the string could set the global variable.

You need to have one translator per string, and I would just set the value of the global variable to the fret's note value. So doing this would look something like:

Code: Select all

Translator 1: String 1
Incoming Message: F0 08 40 0A 01 01 pp F7
Rules: if pp!=64 then Goto "On"
if pp==64 then Goto "Off" 
Label "On"
g0=pp
Exit Rules, execute outgoing action
Label "Off"
g0=0
Exit Rules, execute outgoing action
Outgoing Message: None
So each string has its own value, and when it is released the global variable is 0, so it can be ignored in the chord progression.

What we can then do is have the value of each string cross referenced when the strum up and down commands are used within a chord translator. So you'd have a translator for whole chords, and they wouldn't trigger unless all of the variables equal the correct notes. Does that make sense?

Sorry for the delay again, but I'm fighting jet lag and some of this is escaping my memory.

arturchernyshov

2014-03-18 14:20:34

Thank you, Jared!
Sorry for my persistence. I'll take your advice and let you know the results. We will continue when you defeat jet lag after traveling!

DvlsAdvct

2014-03-20 17:37:36

I'm back now and ready to go. Let me know how that idea worked and we'll see where we can go from there. :) We will get this sorted.

arturchernyshov

2014-03-20 21:13:05

Hi, Jared !
The code you suggested can be used in Realguitar only on MIDI / Chords mode. But I want to set up my MIDI controller for use on Joystick mode. The chord limit in this mode - only 31 chord, but it is possible to use strumbar on Strum, Bass Strum and Picking1, Picking2, Picking3 modes.
Yes, I can assign each chord on it's own button (the fretboard have 103 buttons) and will have no problem, but more interestingly for me - assign on each chord several buttons, as in a real play.
We already discussed this option and you gave me good advice, but there is a problem - some chords contain the same notes (Thu Mar 06, 2014 5:53 am).
Maybe you could give me some advice - how to solve this problem?

Sorry for my English :oops: