MIDI-OX User Forum (http://www.midiox.com/cgi-bin/yabb/YaBB.pl)
MIDI-OX >> Mapping Questions >> one finger mode for arranger
(Message started by: tor on May 4th, 2003, 6:58pm)

Title: one finger mode for arranger
Post by tor on May 4th, 2003, 6:58pm
Introduction:  Most arranger keyboards like Korg PA 80 that have auto accompaniament, split the keyboard and use the lower 7 keys for chord recognition.  There are three types of chord recognition. Im only considering one of those here, that is single finger mode.  In single finger mode, with the key specified, the left hand has to only place one finger in the chord recognition area, and the proper chord would be chosen.  For example; in the key of C, hitting the C note will produce the chord of C Major, hitting the D note will give the chord of D minor, E note gives the chord of E minor and so on.  

The problem:  Most keyboards are not flexible in single finger mode to give the appropriate chord for a particular song.  For example in the key of C, when I hit the E note, I want the chord E Major 7, not Eminor.  
The second problem:  I want to trigger this single finger mode from my midi guitar low E string only and silence the midi information coming from the other strings.

The solution:   My great discovery::: MIDIOX.  Im not a great programmer.  Im a mechanical engineer, so I learned FORTRAN and Basic in college. but Im ready to dive in again.

Heres my structure:
    My foot controller chooses the Key.  This key then selects
a "map" which I have programmed to play specific chords for my chord recognition string (the low E  or A string).  Then when I hit a note on my note recognition strings, the appropriate chord is played by midiox, which then is introduced to my Korg PA80 which is set to three note recognition mode.  

I know I didn't use any programming  language to explain this so I hope I have expressed myself well enough to evoke your sympathy.

Thankyou for your consideration

Newbie,

Tor Marquis

Title: Re: one finger mode for arranger
Post by Jamie OConnell on May 4th, 2003, 11:11pm
Thanks, that explains it a little more.


Quote:
For example; in the key of C, hitting the C note will produce the chord of C Major, hitting the D note will give the chord of D minor, E note gives the chord of E minor and so on.  


Yes, that would be correct diatonic interpretation for C major.


Quote:
For example in the key of C, when I hit the E note, I want the chord E Major 7, not Eminor.  


OK, as long as we don't pretend that EMaj7 is related to the key of C: the 3rd (G#) and 7th (D#) are non-scale tones for the Key of C.


Quote:
   My foot controller chooses the Key.  This key then selects  
a "map" which I have programmed to play specific chords for my chord recognition string (the low E  or A string).  Then when I hit a note on my note recognition strings, the appropriate chord is played by midiox, which then is introduced to my Korg PA80 which is set to three note recognition mode.  


Assumptions:

  • The foot controller will somehow change the map in MIDI-OX.  I don't know how that would best be done at the moment, but lets just assume that it happens (you could use Scripting ot Patch mapping).  
  • Your guitar controller transmits on 6 different channels, 1 for each string.


Now it would be a fairly simple feat to construct a map that reacts to each different fretted note on the E string with a different Triad.  For example, Open E on channel 1 could trigger  C-E-G on channel 7.  F on channel 1 could trigger A-C#-G# on channel 7. etc...

Title: Re: one finger mode for arranger
Post by tor on May 5th, 2003, 3:31am
quote:

OK, as long as we don't pretend that EMaj7 is related to the key of C: the 3rd (G#) and 7th (D#) are non-scale tones for the Key of C.

Thats the whole point,  some songs go out of the key, thats why I need to be able to customize this.

Quote:

Now it would be a fairly simple feat to construct a map that reacts to each different fretted note on the E string with a different Triad.  For example, Open E on channel 1 could trigger  C-E-G on channel 7.  F on channel 1 could trigger A-C#-G# on channel 7. etc...


Question:  Does that mean I need a different map for every note?

I tried to modify the mapping file example  "Minor chord"you placed with the MIDIOX  program.  I modified it as follows just to get a response when I hit low E.
First Line:
When input matches:
________________Note_#__Velocity__________
Chan__Evntype_Min_Max_Min_Max____________
Any___Note_on_28__28__-1___-1____________

Set Output to:
Chan__Evntype_Min_Max_Min_Max____________
Mtch__Note_on_32__32__-1___-1____________
Clone

Second Line:
When input matches:
________________Note_#__Velocity__________
Chan__Evntype_Min_Max_Min_Max____________
Any___Note_on_28__28__-1___-1____________

Set Output to:
Chan__Evntype_Min_Max_Min_Max____________
Mtch__Note_on_35__35__-1___-1____________
Clone

And that didn't work.

But I haven't given up yet.  I think this system would be really worthwhile. Why should the keyboarders have all the fun!!??

Thank you for responding

Tor Marquis



Title: Re: one finger mode for arranger
Post by Jamie OConnell on May 5th, 2003, 12:59pm

Quote:
Question:  Does that mean I need a different map for every note?


I think you'd need a different set of mapping lines for each note, but only a different map for each different Key you wanted to  support.  In other words, you could set up a single map that handled a complete set of different chords for the 'E' string: #28 (E) - #47 (B).


Quote:
I tried to modify the mapping file example  "Minor chord"you placed with the MIDIOX  program...And that didn't work.


Do you mean you got no sound from it, or no output in the monitor?  If the map was on and the items were cloned as you indicate, you should have gotten a triad.  But to include several different chords in the same map, you'll need to map from the original triggering channel to a target chord channel.

As an example, lets say your guitar 'E' string sends on channel 1.  Let's put all mapped chord values on channel 7.

Let's say thet we will create the following chord mappings:
 E  (28) -> EMaj7
 F  (29) -> AMaj7
 F#(30) -> B7
 G  (31) -> C7

This is only the beginning of your final map, but will serve as an example.  

The open E (28) on channel 1 will map to a EMaj7 chord (E(40), G#(44), D#(51)) on channel 7:


Ch Message V1Min V1Max V2Min V2Max C|Ch Message V1Min V1Max V2Min V2Max
1 NoteOn     28    28     0   127 Y| 7 *          40    40     *     *
1 NoteOff    28    28     0   127 Y| 7 *          40    40     *     *
1 NoteOn     28    28     0   127 Y| 7 *          44    44     *     *
1 NoteOff    28    28     0   127 Y| 7 *          44    44     *     *
1 NoteOn     28    28     0   127  | 7 *          51    51     *     *
1 NoteOff    28    28     0   127  | 7 *          51    51     *     *



The F (29) on channel 1 will map to an AMaj7 chord (A(45), C#(49), G#(56)) on channel 7:


Ch Message V1Min V1Max V2Min V2Max C|Ch Message V1Min V1Max V2Min V2Max
1 NoteOn     29    29     0   127 Y| 7 *          45    45     *     *
1 NoteOff    29    29     0   127 Y| 7 *          45    45     *     *
1 NoteOn     29    29     0   127 Y| 7 *          49    49     *     *
1 NoteOff    29    29     0   127 Y| 7 *          49    49     *     *
1 NoteOn     29    29     0   127  | 7 *          56    56     *     *
1 NoteOff    29    29     0   127  | 7 *          56    56     *     *


And so on...

Here's an ASCII Map (.txm) of the above 2 mappings: chordmap.txm (http://www.midiox.com/maps/chordmap.txm)

Title: Re: one finger mode for arranger
Post by tor on May 5th, 2003, 3:54pm
Hi Jamie, thank you for helping me:

I said:

I tried to modify the mapping file example  "Minor chord"you placed with the MIDIOX  program...And that didn't work.  

Then, you responded:

Do you mean you got no sound from it, or no output in the monitor?  If the map was on and the items were cloned as you indicate, you should have gotten a triad.  But to include several different chords in the same map, you'll need to map from the original triggering channel to a target chord channel.

My response:

I loaded your text file (nice feature) and I got no response: no output in the monitor and as you would expect  no sound.
But , I think if I can get this part to work Im half way there.


Title: Re: one finger mode for arranger
Post by tor on May 6th, 2003, 12:29pm
Hi Jamie

    I still havent got your example map to work.  Have you tried this on your system?

Title: Re: one finger mode for arranger
Post by Jamie OConnell on May 6th, 2003, 12:55pm
Yeah, of course I tried it.  This is the result:

http://www.midiox.com/forumpix/chordmap.gif

In your case, you say you got 'no output' in the monitor.  That doesn't sound right. You should at least get the input traveling to the output, even with the map off.  What happens when the map is off?  You need to get that working first.


Title: Re: one finger mode for arranger
Post by tor on May 6th, 2003, 4:14pm
Well then, I suppose your right.  I didn't get no output.  I got the same as that which I put in:
MONITOR-INPUT
time__IN_PORT_STATUS__DATA1_DATA2_CHAN_NOTE_EVENT
1B7F0_1__--___90______28______42_____1__E_2_Note_On
1BA8B_1__--___80______28______40_____1__E_2_Note_Off

MONITOR-OUTPUT
time__IN_PORT_STATUS__DATA1_DATA2_CHAN_NOTE_EVENT
1B7F0_1___2 __90______28______42_____1__E_2_Note_On
1BA8B_1__ 2___80______28______40_____1__E_2_Note_Off


Also, for what its worth, your example "minor chord" works perfectly.

Title: Re: one finger mode for arranger
Post by tor on May 6th, 2003, 5:22pm
Jamie:  I got it.  I hit octave down on the keyboard and it worked.  But I can't figure it out.  It said 28 on the imput screen.  Anyway Im jazzed , and Im proceeding to write the map for the whole key.  I dont know what to do after that.  But I'll slam into that wall when I reach it.

Thanks again!

Title: Re: one finger mode for arranger
Post by Jamie OConnell on May 6th, 2003, 5:32pm

Quote:
Well then, I suppose your right.  I didn't get no output.  I got the same as that which I put in:


That IS output.  Please don't say you get nothing when you get something.


Quote:
MONITOR-INPUT
time__IN_PORT_STATUS__DATA1_DATA2_CHAN_NOTE_EVENT
1B7F0_1__--___90______28______42_____1__E_2_Note_On  
1BA8B_1__--___80______28______40_____1__E_2_Note_Off


That's 28 Hex.  The Mapping dialog expects and displays decimal numbers.  To have your monitor display in decimal, right-click it and choose Display Decimal.


Title: Re: one finger mode for arranger
Post by tor on May 9th, 2003, 2:31am
Ok I mapped an entire key of C and I tested it running a midi keyboard into  Midiox using our map, then out into midiyoke then into Jammer live.  I changed user settings in Jammer live to accept chord recognition on channel 7, turned a few bells and whistles and it now obeys when I hit a single note on my midi keyboard.  I know this seems quite trivial, but before I met you, I was just on a wish list.  Thank you

Since Ive talked to you, I realize that for any given key, I can map the entire fretboard for any position that I would be at on my guitar.  For example, the open E chord plays the lower E string in the open position. For this string I use channel 1 as a condition in my map (like in our example).  For the open Am chord I use the A string which would be accepted as input on channel two instead of channel 1.   I think this is working well.


The next step , is what you said  

"The foot controller will somehow change the map in MIDI-OX.  I don't know how that would best be done at the moment, but lets just assume that it happens (you could use Scripting ot Patch mapping).   "


For this Ive bitten the bullet and started delving into beginning Visual Basic 6 books.  If you could help me focus a little bit,  I would surely appreciate it.

Title: Re: one finger mode for arranger
Post by Jamie OConnell on May 9th, 2003, 12:01pm
You could use patch mapping to load various maps, but then you might not be able to easily change patches.

For scripting, you could use Windows Script Host, which is pre-installed on XP, or you could use VB6 or any other high-level language that supports COM.

The MoxScript API has an interface that loads a Map.  You could load a map in response to any sort of MIDI controller stimulii.  It might be easier if you first decide what action will load a particular map.


Title: Re: one finger mode for arranger
Post by tor on May 11th, 2003, 9:27pm
I think were going into scripting questions, but I will post here for continuity sake, unless you indicate otherwise.

My conceptual program would be:
Continue loop until finishedplaying = y
'  Accept input from foot controlled midi controller pertaining to
' the key of x

'  close existing map  ( I didn't see this command in your
'   scripting discussion
)
' open map 'keyof x"
   If input =  keyofx then mox.LoadDataMap "C:\Program     Files\midiox\map\keyofx.oxm")
'   user plays until set is finished leaveing midiox open
Finishedplaying?
y=finishedplaying
close midiox
'END of PROGRAM

There, did I miss anything major?

Assuming I got the main idea,  am I supposed to keep 10 data maps open at once and specify with the foot controller which one Im using,  or is there a command which closes the datamaps?




Title: Re: one finger mode for arranger
Post by Jamie OConnell on May 12th, 2003, 12:04pm
The act of loading a map, automatically closes and cleans up any other Global map in effect, so a close map API is not strictly required.  If you wanted to clear a Map, you could load an empty map.



MIDI-OX User Forum » Powered by YaBB 1 Gold - SP 1.3.1!
YaBB © 2000-2003. All Rights Reserved.