Cristiano

Midibox_NG and kb_transpose

10 posts in this topic

Hi All,

first of all, many thanks to Thorsten for his great work!

Excuse me if this is a trivial question, but I looked for a while at the forum without reaching key information.

I have already prepared one MBHP_CORE_STM32F4, one MBHP_DIO_MATRIX (connected with a FATAR keyboard), a SCS, a DOGM display, and all seems working correctly.

I am trying to substitute two broken keyboards of a midi church organ using two new 61 keys Fatar keyboards and midibox_NG project. I would like to control also pedalboard using a midibox_NG (having midibox NG or KB a keyboard number limit of 2), and control actual synthesizer completely by midi messages (perhaps in the future I will substitute also synthesizer with a PC based or other synth, I do not know).

I need to transpose two keyboards and pedalboard using only one encoder, and I have to do this by transposing EVENT_KB (having the synth a mechanical transposition encoder, not perfectly working).

I read about kb_transpose parameter of EVENT_KB, but how can I modify it runtime according with SCS encoder rotation?
Perhaps I should introduce a meta like KbBreakIsMake (say KbTranspose), but It seems being a bit more complicated...

Furthermore, I would like to send transposition request to another device (for the third keyboard), but I am not sure of how to do this, and how to capture that information on receiver.
I suspect having to use Registered Parameter 2 setting (https://www.midi.org/specifications/item/table-3-control-change-messages-data-bytes-2), sending three CC (101 : 0, 100 : 2, 6 : transposition + 64), but NGC cc directives processing allow to send only one CC per event. On receiver side I do not know how to retrieve this registered parameter.

If anyone has a suggestion, at least to point me on the right direction, I will appreciate it.

Thanks to all, regards,

Cristiano

 

Share this post


Link to post
Share on other sites

Hi Christiano,

very nice first posting with so many detailed information! Welcome on board! :)

Actually providing a proper solution for keyboard transpose (and velocity map) changes was still on my TODO list.

It's implemented now, please try this version:
http://www.ucapps.de/mios32/midibox_ng_v1_036_pre4.zip

A configuration example (for a single keyboard) can be found under:
http://svnmios.midibox.org/filedetails.php?repname=svn.mios32&path=%2Ftrunk%2Fapps%2Fcontrollers%2Fmidibox_ng_v1%2Fcfg%2Ftests%2Fkb_6.ngc
http://svnmios.midibox.org/filedetails.php?repname=svn.mios32&path=%2Ftrunk%2Fapps%2Fcontrollers%2Fmidibox_ng_v1%2Fcfg%2Ftests%2Fkb_6.ngr

As you can see, I preferred to use .NGR commands instead of meta events, because we want to change parameters of an event (KB:1) instead of a physical device (KB)

I tested this with a Fatar keyboard (donated by FantomXR! :)) - works fine! I can even change the transpose value with the SCS encoder while playing some keys, the corresponding note-off events are matching so that we won't get hanging notes.

 

On 5.1.2018 at 4:17 PM, Cristiano said:

Furthermore, I would like to send transposition request to another device (for the third keyboard), but I am not sure of how to do this, and how to capture that information on receiver.
I suspect having to use Registered Parameter 2 setting (https://www.midi.org/specifications/item/table-3-control-change-messages-data-bytes-2), sending three CC (101 : 0, 100 : 2, 6 : transposition + 64), but NGC cc directives processing allow to send only one CC per event. On receiver side I do not know how to retrieve this registered parameter.

We've many solutions for this case

1) the most simple: I could increase the number of supported keyboards from 2 to 4, because I think that especially for organs the slightly increased latency (a couple of uS, not more!) doesn't really matter. This would mean that you could control all keyboards from a single core

2) for reacting on a single CC number multiple times, just define EVENT_* with different IDs

Best Regards, Thorsten.

Share this post


Link to post
Share on other sites
On 6/1/2018 at 10:24 PM, TK. said:

Hi Christiano,

very nice first posting with so many detailed information! Welcome on board! :)

Actually providing a proper solution for keyboard transpose (and velocity map) changes was still on my TODO list.

It's implemented now, please try this version:
http://www.ucapps.de/mios32/midibox_ng_v1_036_pre4.zip

A configuration example (for a single keyboard) can be found under:
http://svnmios.midibox.org/filedetails.php?repname=svn.mios32&path=%2Ftrunk%2Fapps%2Fcontrollers%2Fmidibox_ng_v1%2Fcfg%2Ftests%2Fkb_6.ngc
http://svnmios.midibox.org/filedetails.php?repname=svn.mios32&path=%2Ftrunk%2Fapps%2Fcontrollers%2Fmidibox_ng_v1%2Fcfg%2Ftests%2Fkb_6.ngr

As you can see, I preferred to use .NGR commands instead of meta events, because we want to change parameters of an event (KB:1) instead of a physical device (KB)

I tested this with a Fatar keyboard (donated by FantomXR! :)) - works fine! I can even change the transpose value with the SCS encoder while playing some keys, the corresponding note-off events are matching so that we won't get hanging notes.

 

Wunderbar!

I want a poster of you to hang up in my bedroom (and many thanks to FantomXR, too) ;)

On 6/1/2018 at 10:24 PM, TK. said:

 

 

We've many solutions for this case

1) the most simple: I could increase the number of supported keyboards from 2 to 4, because I think that especially for organs the slightly increased latency (a couple of uS, not more!) doesn't really matter. This would mean that you could control all keyboards from a single core

 

Hmm.

Ok for keyboard support increase, but I noticed some keys pressure being lost executing trillos on velocity enabled keyboard with midibox_NG project. I would like to examine in depth this behaviour (I am not sure this happens at synth or keyboard level), but probably I would be more comfortable with a midibox_KB board to scan only keyboards (pedalboard being slowly played).

Furthermore, soon or late I would like to substitute current synthesizer, and I will probably need to manage also combinations' buttons and expression pedal, hence it could be necessary to split work on two boards.

I have very few time to made experiments during this period, so I will try as soon as possible to understand where and if there is a problem with single core approach.

On 6/1/2018 at 10:24 PM, TK. said:

 

2) for reacting on a single CC number multiple times, just define EVENT_* with different IDs

 

Thank you, I will try. The problem should be to send multiple CC numbers, following a sequence (CC 101 and 100 being a preliminary instruction to tell which is registered parameter, and CC 6 the value to write).

In any case, I am not sure this being the better way to obtain transposition message because:

  1. it is not atomic (with two midi message interleaving writing CC 101 or 100 before CC 6, we will not be able to predict what will happen),
  2. another device could try to send this command to a synth thru midibox. If both midibox_NG and synthesizer manage that command, transposition will double its value

I have to study these aspects a bit more (maybe a SysEx message could be better).

For the moment many thanks, I will update when ready.

Best regards, Cristiano

Share this post


Link to post
Share on other sites

Hi Thorsten and all,

when printing a negative transpose value, the vertical bar at its right becomes a box. I suspect there is a bug in mbng_lcd.c, line 692 probably should be

int normalized_value = (item->min <= item->max) ? ((s16)item->value - item->min) : ((s16)item->value - item->max);

 

Share this post


Link to post
Share on other sites

Hello, I havw been redirected to this topic by FantomXR. I have had questions about transposing (octave changes in - 2 to +2 range)  in runtime. It should be done by switches connected to inputs of midibox kb board. 

I am building a 2 manual hammond clone based on GSI Gemini sound module. One midibox ng for storing/recalling of patches and scanning of buttons and pots, one midibox kb for managing if 2 keybeds( upper manual 61 keys, lower manual 73 keys). The project mechanically is ready, now I am prwparing the PCBs. 

My additional questions are:

1. Is it possible to send data from one keyboard to two midi channels paralelly? I want to add layer option to the controller. 

2. Is it possible to split the 73keyboard (it is made from 2 pcbs connected by 2 ribbon cables) tge split point is exactly where I need to have. The lower part should send data to Midi channel 3(assigned to pedal engine in Gsi module) and the upper part should send data to Midi channel 2(assigned to lower manual in Gsi module). This mode should be switched in runtime mode. When I switch off this mode the whole keybed should work whitout splitting and send Midi data to challen 1or 4.

Thank you in advance

Share this post


Link to post
Share on other sites
2 hours ago, macsaif said:

1. Is it possible to send data from one keyboard to two midi channels paralelly? I want to add layer option to the controller. 

Easy task! Just create two EVENT_KBs with different ids but same hw_ids and set them to different channels.

Regarding your second question: I think TK implemented a Learn-function a while ago. Maybe this works with KBs too. Search here for "learn":
http://ucapps.de/midibox_ng_manual_ngc.html

Share this post


Link to post
Share on other sites

For better understanding, I have made an input bit map I want to use on Midibox KB board. It will be connected to Midibox NG board (16 outputs to 16 input bits). 

The first 6 bits are used for octave transpose of 2 keyboards. The next 3 bits are used for Midi mapping of keyboards. The important part is that I want to make possible to split the lower keyboard exactly on place where 2 boards are splitted on the keybed. 

Do you think can it be realized by the Midibox KB? 

Thank you in advance

Frank

midi.pdf

Share this post


Link to post
Share on other sites

Do you think all the mentioned controls (in the midi.pdf) can be implemented in midibox_kb? Otherwise I have to use midibox_ng which has slower scanning frequency of the keyboards. 

Share this post


Link to post
Share on other sites

Hi all,

working on many projects this period, hence no time to follow my first passion.

First of all, I am a newbie (as you can see on the left), but

On 25/1/2018 at 2:17 PM, macsaif said:

Do you think all the mentioned controls (in the midi.pdf) can be implemented in midibox_kb? Otherwise I have to use midibox_ng which has slower scanning frequency of the keyboards. 

I think no, because midibox_kb does not provide DIN scanning for other purpose than keyboard scanning.

 

Then, I more or less completed my evaluations, and I decided to beg Thorsten without dignity to add at least one keyboard.

After this, I have two more requests.

The first, about correcting knob or bars rendering when variable value is negative (%B format)

On 19/1/2018 at 5:27 PM, Cristiano said:

Hi Thorsten and all,

when printing a negative transpose value, the vertical bar at its right becomes a box. I suspect there is a bug in mbng_lcd.c, line 692 probably should be


int normalized_value = (item->min <= item->max) ? ((s16)item->value - item->min) : ((s16)item->value - item->max);

 

Last one, if it is possible to modify contrast for GLCD DOGM using some kind of instruction on NGC file, because there is no hardware way to do it.

Thanks to all,

Cristiano

Share this post


Link to post
Share on other sites

Does it mean that there is no any possibility to scan the digital inputs on J10A and J10B? The minimum I will need is to switch on/off the "make is break" function separately for both keyboards. This week I am making the PCB. It would be necessary ti know if it is possible or not. Otherwise I will make this function by shortening of make and break buses by relays. 10 contacts for 73keys and 8 contacts for 61keys. It wirks because I have tried it on my Roland A33 controller! 

Frank

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