macsaif

Midi forwarding with modification

19 posts in this topic

Hello,

is there any example how to transform and forward received midi messages?

I will use Midibox KB form serving of 2 Fatar keybeds. This board will send The info on MidiCH 1 - Upper keybed, Midich 4 - Lower keybed.

It will send also SUSTAIN, EXPREESSION, MODWHEEL, PITCHBEND values.

 

I want to use the second board (Midibox NG)to transform the received information like:

Key transpose (Octave +1, +2, -1, -2, 0)

Velocity MAP - transforming of velocity values based on the velocity MAPs

Mapping (CH1 to CH1, CH4 to CH4),  (CH1 to CH4, CH4 to CH1),  (CH1 to CH1, CH4 to CH2),  layering(CH1 to CH1, CH4 to CH4 and CH4), splitting  (CH1 to CH1, CH4 to CH3low, CH2high), etc

Mapping of Modwheel and Pitchbend (CH1 to CH1), (CH1 to CH4), (CH1 to CH1 and CH4)

 

This bourd should serve all the pots and Leds/buttons and the patch memory, but the first step to do the Midi mapping function.

Is there anybody with some experience with application of this function?

Thank you in advance!

 

Frank

Share this post


Link to post
Share on other sites

Posted (edited)

Hello Frank

NG offer midi router, but it seem it's not enough for your need

You should then use event sender/receiver to format/forward midi event, in addition with conditional definition you can flip or select different midi mapping depending of some buttons status

e.g for all notes from ch1 to ch4 if button 1 is pressed (simplified definitions)
 

event_receiver id=1 fwd_id=sender:1 type=noteon key=all chn=1 if_equal=button:1:127

event_sender   id=1                 type=noteon key=all chn=4

event_button   id=1 range=0:127     button_mode=toggle

Best

Zam

Edited by Zam

Share this post


Link to post
Share on other sites

How to implement Transpose and velocity map? Do you have any suggestions?

Share this post


Link to post
Share on other sites

I'm not used to keyboard with MB_NG but there is

kb_transpose=

and

kb_velocity_map=

You can define multiples KB event id (same hw_id), with different map, then select the proper event with a button (if_equal=)

Best

Zam

Share this post


Link to post
Share on other sites

A know these functions because I am running a Midibox KB however now I have to solve the transpose and velocity map as midi router, it means there will be not used the KB function just the receiver and sender. Somehow I have to solve for example...if I receive NoteOn 12 than the sender will send NoteOn 24 (Transpose +12), etc.

The same for velocity values

Share this post


Link to post
Share on other sites

yes you use 2 core... KB+NG

what about KB remote from NG for those particular function ?

I mean a button at NG that send CC, nrpn or sysex to KB core that flip/change those functions (with dummy led or button receiver that handle the status, used as conditional like I explain before)

Right now I don't see how to format note transpose at NG without a keyboard directly hooked to it (with functions named below)

Best

Zam

Share this post


Link to post
Share on other sites

Hello,

 

it was my first ide, however I do not know what Sysex messages I have to send to Midibox NG to change these parameters (Transpose, Break is Make, Fastest and Slowest parameters, Assigned Midi Channel to Key 1 and Key 2). Is there any manual for that or anybody who can help with it? My previous post about that:

http://midibox.org/forums/topic/20759-starting-up-the-dual-manual-organ/?page=3

 

Velocity MAP can not be solved however maybe It is possible to solve in NG. Lets see!

 

Frank

Share this post


Link to post
Share on other sites

It's up to you to define the event type you want to use as a trig for other event.

The idea is to have different event activated depending of button status or external midi, it work.

Now for transpose (in a NG router) I maybe just find something:

receiver with note=all and use_key_number=1 to process the note n°

range= have to be a map like (for 1octave transpose) 0:11 11:23 23:31 etc...

You can also use a button that set pitchbend to different fixed value?

Best

Zam

 

Share this post


Link to post
Share on other sites

It is not a problem to define the event type to trig the other event, I will figure out.

You have mentioned that there is a possibility to change the predefined values in Midibox KB via SYSEX. I think It will be the best solution for me. Maybe in that case I will change my concept And the Midibox KB will be connected directly to the sound module. Than Midibox NG will be connected to the KB module to change parameters via SYSEX. Other evens coming from NG (CC values, PCH values) will be forwarded by KB directly to the sound module. I think there is an integrated Midi route in the KB.

The question is how to change predefined parameters of the Midibox KB via SYSEX - I have not found any literature or example!

Frank

Share this post


Link to post
Share on other sites

Ok, my bad, I just look at MB_KB manual, I was thinking it use the same .NGC .NGR text event definition but it's only configurable via mios studio terminal.

Maybe its possible from other midi device (like NG) to trick sysex stream to enter and send data/config bit like mios studio ?

Best

Zam

Share this post


Link to post
Share on other sites

FanomXR has written me about this possibility however till now he jas not replied me how can I solve it, what kind of Sysex I have to send to KB. 

Frank

Share this post


Link to post
Share on other sites

You can monitor in mios studio what output to the core when you send a specific command via the terminal, you can try to copy this stream and send it with NG core in a button event type=sysex stream="..."

Best

Zam

Share this post


Link to post
Share on other sites

Some basec question,

 

I have started up the STM32F4 based board, NG installed...

Can you help how to configure the connected boards?

1x AINSER64, 1x DIO MATRIX (leds and buttons connected - see enclosed file, 1x MIDI board, 16DOUT via J10A and  J10B, 2x AIN via J5A

The main question is how to set shift registers of DIOMATRIX and AINSER module and then which HW ID will belong to which button, LED, POT?

NG concept.pdf

Share this post


Link to post
Share on other sites

Hello Frank

Everything is well documented at the NG user manual, specifically .NGC configuration file info for matrix and AINSER, with examples

For HW id, first pin first SR is ID one, second pin first SR is ID 2....first pin second SR is ID 9 etc...

You can monitor SR nb in debug mode.

Best

Zam

 

Share this post


Link to post
Share on other sites

I did a basic configuration of AINSER module however nothing happened. I think I have to check it in debug mode!

I think the AINSER should be not a big problem. I am not sure how to configure the DIO MATRIX with connected LEDS and BUTTONS to the same module as shown in the example drawing for DIO MATRIX module.

 

Frank

Share this post


Link to post
Share on other sites

The AINSER module is configured. I had to set cs=1 because I wired the module as the 2nd module. One MX is not working but it is HW peoblem, tomorrow I will solve it. 

I have tried to configure the DioMatrix module however I think it will be more dificult issue! If somebody has expeeience with it, please send me a post. 

Thank you in advance! 

Frank

Share this post


Link to post
Share on other sites

Hello,

 

Finally, all the pots and buttons are working. I have checked the leds too (they should work because I have tried the fwd_id function however it sends the binary value for 8 LEDS). I need to address each LED separately in the matrix. Which command or procedure I can use?

Basically these tasks and questions are remaining(hopefuly):

  1. Make the control logic of the controller (selecting banks, assigning the knobs and buttons to Midi ch1 or 4 depending on button status, assigning of pots to CC depending on button status, sending PCH values, etc.) – probably in .NGR file

  2. Is it possible to assign a LED to a Button or CC status? How?

  3. Is it possible to make some register of values and not to send directly the CC and PCH but write them to the register, then send the register values to CC, PCH, LEDs. Probably I will need them when I want to save patches.

  4. Are the CC values remembered separately for each Midi channel? I need to send and store the same CC´s but with different values to MCH1 and MCH4.

  5. What is the procedure to write and read a group of the values(CC, PCH, register) to SD card? I want to make 256 memory positions storing approx 150 values each.

  6. This task is the part of the first phase of my project – how to receive sysex files in KB (not KB under NG) to schitch the Break is Make, Octave and Midi channel parameters?

 

I see not so high activity in answering my questions, but it would be very helpful if somebody could answer them!

 

THank you in advance!

 

Frank

Share this post


Link to post
Share on other sites

Hello Frank

 

3 hours ago, macsaif said:

I see not so high activity in answering my questions, but it would be very helpful if somebody could answer them!

Honestly most of your request/question here are handled by MB_NG, none will explain what is already explained at NG user manual

Please have an extended read about it (i'm sure you already have some), write your .NGC / .NGR files and share when it don't work, then we can help fixing part of the configuration files.

NG is powerful, sometimes there is different way available to achieve same result, it really depend of the whole picture, so again with a preliminary .NGC at your side it might help us helping you :happy:

 

now,

1- check if_equal= parameter

2- check fwd_id parameter

3 and 4 -check meta and snapshot

5- not sure want you want here but maybe check bank mechanisme

6- I already give you some idea about it, you have to try if it work...

Best

Zam

Share this post


Link to post
Share on other sites

I mean under point 5 the storing of CC, PCH and some internal adjustment parameters. It is basically approx 60 CC parameters, 1 PCH parameter and approx 6 Bytes for internal adjustment for MidiCHannel1 and the same for Midi CHannel 4, it means 2x64Bytes=128 Bytes per Patch. I am planning to store 256 Patches. When I want to load a Patch I can do it wit combination of 20 buttons 4x8x8 (like 4 Banks x 8 Patches x 8 Variations). The selection process will consist of pressing of 3 buttons, Pressing of the Variation button will close the process and will read the parameters of the selected Patch and send them to the MidiCH1 and 4. The potentiometers will work in mode that they will start to send parameters only in case the actual parameter is the same as adjusted from the memory.

The internal parameters will be used for (Octave, Break is Make, Midi Mapping, Selection of Midi CHannel where the group of pots will send the parameters)

On the panel I have only controls for 1 midi channel, if I want to send the parameters to Midi channel 4 I have to switch it by button then the same pots will send the parameters to Midi channel 4.

 

F

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now