Jump to content

macsaif

Members
  • Posts

    128
  • Joined

  • Last visited

Posts posted by macsaif

  1. Finally all the functions are working. Only one small issue:

    It seems that the scanning frequency of Midibox KB under NG is not enough to get a certain amount of different velocity values. I have tried many fast/slow adjustmants however it seems that I can get only 8-10 different velocity walues from 0-127. I am able to tune it with velocity map function however the velocity resolution is notenough for fine playing of Piano and Rhodes sounds. It would need more velocity values scanned, I think 40-60 linear distributed vlues (0-127) should be enough. The most higher resolution is neede  in range of values 30-90. From 0-30 and over 90-127 is enough a lower resolution.

    Do you have any experience that what is the maximum achievable resolution with Fatar TP8 keybeds(when I am using Midibox KB under Midibox NG)?

    The possible solution is that I will use only a simple Midibox KB which is 10x faster (and probably have 10x more higher resolution) however in this case I am loosing a control of functions like Make is Break, Octave switch, Midi mapping.

    Any suggestion?

     

    Thank you in advane!

     

    Frank

  2. Hello,

     

    I am starting the second phase of my dual manual organ project based on the GSI Gemini module. The first board is already started up (based on NG) which is used for scanning of 2 manuals and sending the info to midi info to channels 1-4 depending on the input bits connected to DIO port.

    Now I will design and build the second PCB based on the St32F4 develop.kit. I will connect button and led groups to the board via DIOMATRIX and Pots via AINSER64 boards. The board will control the first module via DIO port(Midi mapping, BiM, Octave -2 to +2).

    It should store 256 bank/presets. After selection of bank/preset the board will adjust the stored DIO bits and send Midi CC and PCH information based on the stored values/or actual status of the Buttons/pots. The Banks/presets should be stored on the SD card.

    The button and pot functions are explained in the enclosed excel file.

    My 1st question is: can I use NG, SEQ.....for programming of the explained functions or it is better to program it directly in Midibox?

    Thank you in advance!

     

    Frank

    Gemini.xlsx

  3. Thank you for help. Now it works. Only one think is remaining. When I am changing the midi channel mapping it should send some all keys off signal because if there is some key pressed it keeps hanging (no key off signal is sent). Is there any solution?

    If somebody is interested there is the code .NGC:

    RESET_HW

    SRIO num_sr=6

    KEYBOARD n=1   rows=8  dout_sr1=1  dout_sr2=2  din_sr1=1  din_sr2=2 \
                   din_inverted=0  break_inverted=0  din_key_offset=32 \
                   scan_velocity=1  scan_optimized=1  make_debounced=1  break_is_make=0  note_offset=36 \
                   delay_fastest=0  delay_fastest_black_keys=0  delay_slowest=100

    KEYBOARD n=2   rows=12  dout_sr1=3  dout_sr2=4  din_sr1=3  din_sr2=4 \
                   din_inverted=1  break_inverted=0  din_key_offset=32 \
                   scan_velocity=1  scan_optimized=1  make_debounced=1  break_is_make=0  note_offset=28 \
                   delay_fastest=1  delay_fastest_black_keys=0  delay_slowest=140

    MAP1/BYTEI  0:0 1:20 20:60 60:90 90:110 118:127

    EVENT_KB id=1 hw_id=1  type=NoteOn chn=1 key=any use_key_number=1 range=0:127  kb_velocity_map=map1  kb_transpose=0 ports=0000000000000000 fwd_id=sender:1

    EVENT_KB id=2 hw_id=2  type=NoteOn chn=1 key=any use_key_number=1 range=0:127  kb_velocity_map=map1  kb_transpose=0 ports=0000000000000000 fwd_id=sender:2

    EVENT_KB id=3 hw_id=2  type=NoteOn chn=1 key=any use_key_number=1 range=49:127  kb_velocity_map=map1  kb_transpose=0 ports=0000000000000000 fwd_id=sender:2

    EVENT_KB id=4 hw_id=2  type=NoteOn chn=1 key=any use_key_number=1 range=0:49  kb_velocity_map=map1  kb_transpose=0 ports=0000000000000000 fwd_id=sender:3


    EVENT_SENDER id=10 hw_id=1 type=NoteOn chn=1 key=any use_key_number=1 range=0:127 ports=1000110000000000
    EVENT_SENDER id=11 hw_id=1 type=NoteOn chn=4 key=any use_key_number=1 range=0:127 ports=1000110000000000
    EVENT_SENDER id=12 hw_id=2 type=NoteOn chn=4 key=any use_key_number=1 range=0:127 ports=1000110000000000
    EVENT_SENDER id=13 hw_id=2 type=NoteOn chn=2 key=any use_key_number=1 range=0:127 ports=1000110000000000
    EVENT_SENDER id=14 hw_id=2 type=NoteOn chn=1 key=any use_key_number=1 range=0:127 ports=1000110000000000
    EVENT_SENDER id=15 hw_id=3 type=NoteOn chn=3 key=any use_key_number=1 range=0:127 ports=1000110000000000

    #AIN enable_mask=111111

    #AIN pinrange=0:18:3800
    #AIN pinrange=1:18:3800
    #AIN pinrange=2:18:3800
    #AIN pinrange=3:18:3800
    #AIN pinrange=5:18:3800
    #AIN pinrange=4:1500:2500:spread_center

    #EVENT_AIN id=1  type=CC  chn= 4 cc= 1  range=127:0 ports=1000110000000000
    #EVENT_AIN id=5 type=PitchBend  chn= 4        range=0:16383  ports=1000110000000000
    #EVENT_AIN id=2  type=CC  chn= 1 cc= 11  range=0:127 ports=1000110000000000
    #EVENT_AIN id=3  type=CC  chn= 4 cc= 64  ain_mode=Switch range=0:127 ports=1000110000000000
    #EVENT_AIN id=4  type=CC  chn= 4 cc= 11 range=0:127 ports=1000110000000000
    #EVENT_AIN id=6  type=CC  chn= 1 cc= 64  ain_mode=Switch range=0:127 ports=1000110000000000

    DIO  port=J10A  emu_din_sr=5
    DIO  port=J10B  emu_din_sr=6

    EVENT_BUTTON id=40  hw_id=40  type=Meta meta=KbBreakIsMake:1  
    EVENT_BUTTON id=38 hw_id=38  type=Meta meta=KbBreakIsMake:2  

    EVENT_BUTTON id=39  hw_id=39  type=Meta meta=RunSection:1   

    EVENT_BUTTON id=37 hw_id=37  
    EVENT_BUTTON id=35  hw_id=35    
    EVENT_BUTTON id=36  hw_id=36    

    EVENT_BUTTON id=33  hw_id=33  
    EVENT_BUTTON id=42  hw_id=42
    EVENT_BUTTON id=34  hw_id=34
      
    EVENT_BUTTON id=48  hw_id=48    


    EVENT_BUTTON id=46  hw_id=46
    EVENT_BUTTON id=41  hw_id=41
    EVENT_BUTTON id=43  hw_id=43
     

     

    And .NGR:

    if ^section == 0
     set_active (id)KB:1 1
     set_active (id)KB:2 1
     set_active (id)KB:3 0
     set_active (id)KB:4 0
     set_active (id)SENDER:10 1
     set_active (id)SENDER:11 0
     set_active (id)SENDER:12 1
    set_active (id)SENDER:13 0
    set_active (id)SENDER:14 0
    set_active (id)SENDER:15 0
    endif

    if ^section == 1

    if BUTTON:37 < 45
    set_kb_transpose KB:1 0
    else
    if BUTTON:35 < 45
    if BUTTON:36 < 45
    set_kb_transpose KB:1 12
    else
    set_kb_transpose KB:1 24
    endif
    else
    if BUTTON:36 < 45
    set_kb_transpose KB:1 244
    else
    set_kb_transpose KB:1 232
    endif
    endif
    endif


    if BUTTON:33 < 45
    set_kb_transpose KB:2 0
    else
    if BUTTON:42 < 45
    if BUTTON:34 < 45
    set_kb_transpose KB:2 12
    else
    set_kb_transpose KB:2 24
    endif
    else
    if BUTTON:34 < 45
    set_kb_transpose KB:2 244
    else
    set_kb_transpose KB:2 232
    endif
    endif
    endif

    if BUTTON:48 < 45
    set_kb_velocity_map KB:2 1
    else
    set_kb_velocity_map KB:2 2
    endif

    if BUTTON:46 < 45
     set_active (id)KB:1 1
     set_active (id)KB:2 1
     set_active (id)KB:3 0
     set_active (id)KB:4 0
     set_active (id)SENDER:10 1
     set_active (id)SENDER:11 0
     set_active (id)SENDER:12 1
    set_active (id)SENDER:13 0
    set_active (id)SENDER:14 0
    set_active (id)SENDER:15 0
    else
    if BUTTON:41 < 45
    if BUTTON:43 < 45
     set_active (id)KB:1 1
     set_active (id)KB:2 1
     set_active (id)KB:3 0
     set_active (id)KB:4 0
     set_active (id)SENDER:10 1
     set_active (id)SENDER:11 0
     set_active (id)SENDER:12 0
    set_active (id)SENDER:13 1
    set_active (id)SENDER:14 0
    set_active (id)SENDER:15 0
    else
     set_active (id)KB:1 1
     set_active (id)KB:2 1
     set_active (id)KB:3 0
     set_active (id)KB:4 0
     set_active (id)SENDER:10 1
     set_active (id)SENDER:11 0
     set_active (id)SENDER:12 1
    set_active (id)SENDER:13 0
    set_active (id)SENDER:14 1
    set_active (id)SENDER:15 0
    endif
    else
    if BUTTON:43 < 45
     set_active (id)KB:1 1
     set_active (id)KB:2 1
     set_active (id)KB:3 0
     set_active (id)KB:4 0
     set_active (id)SENDER:10 0
     set_active (id)SENDER:11 1
     set_active (id)SENDER:12 0
    set_active (id)SENDER:13 0
    set_active (id)SENDER:14 1
    set_active (id)SENDER:15 0
    else
     set_active (id)KB:1 1
     set_active (id)KB:2 0
     set_active (id)KB:3 1
     set_active (id)KB:4 1
     set_active (id)SENDER:10 1
     set_active (id)SENDER:11 0
     set_active (id)SENDER:12 0
    set_active (id)SENDER:13 1
    set_active (id)SENDER:14 0
    set_active (id)SENDER:15 1
    endif
    endif
    endif

    endif
    exit

  4. Solved:

    EVENT_SENDER id=10 hw_id=1 type=NoteOn chn=1 key=any use_key_number=1 range=0:127 ports=1000110000000000

    use_key_number=1 was missing

    I have tried the split function,it works however the upper part lowest velocity value is 60, probably it has somethig with multiple usingofthe same hwkeyboard. The code for splitting is:

    EVENT_KB id=1 hw_id=1  type=NoteOn chn=1 key=any use_key_number=1 range=0:48  kb_velocity_map=map1  kb_transpose=0 ports=0000000000000000 fwd_id=sender:1
    EVENT_KB id=2 hw_id=1  type=NoteOn chn=1 key=any use_key_number=1 range=49:127  kb_velocity_map=map1  kb_transpose=0 ports=0000000000000000 fwd_id=sender:2

    EVENT_SENDER id=10 hw_id=1 type=NoteOn chn=3 key=any use_key_number=1 range=0:127 ports=1000110000000000
    EVENT_SENDER id=11 hw_id=2 type=NoteOn chn=1 key=any use_key_number=1 range=0:127 ports=1000110000000000

     

  5. I have triedit....it is closertothe solution howeverthe situation is:

    1. the velocity of the keypress changesthe note,the release(NoteOFF)is alwaysC-2

    2. The key I am pressing is defining the velocity value

    For ex. C1 -gives velocity value 48, D1 - 50, E- 51...etc

    if I press slowly the key is for example C1 and fastly G5 etc

    but now there are the samevalues on both channels...

    Any idea?

  6. and complete configuration for split mode (HW keyboard 2):

    RESET_HW

    SRIO num_sr=4

    KEYBOARD n=1   rows=8  dout_sr1=1  dout_sr2=2  din_sr1=1  din_sr2=2 \
                   din_inverted=0  break_inverted=0  din_key_offset=32 \
                   scan_velocity=1  scan_optimized=1  make_debounced=1  break_is_make=0  note_offset=36 \
                   delay_fastest=0  delay_fastest_black_keys=0  delay_slowest=100

    KEYBOARD n=2   rows=12  dout_sr1=3  dout_sr2=4  din_sr1=3  din_sr2=4 \
                   din_inverted=1  break_inverted=0  din_key_offset=32 \
                   scan_velocity=1  scan_optimized=1  make_debounced=1  break_is_make=0  note_offset=28 \
                   delay_fastest=1  delay_fastest_black_keys=0  delay_slowest=140
    MAP1/BYTEI  0:0  1:20 20:60 60:90 90:110 118:127

    EVENT_KB id=1 hw_id=2 type=NoteOn chn=3 key=any use_key_number=1 range=0:47  kb_velocity_map=map1  kb_transpose=0 ports=1000110000000000

    EVENT_KB id=2 hw_id=2 type=NoteOn chn=2 key=any use_key_number=1 range=48:127  kb_velocity_map=map1  kb_transpose=0 ports=1000110000000000

  7. Hello,

     

    here is the complete .NGC file for layer configuration:

    RESET_HW

    SRIO num_sr=4

    KEYBOARD n=1   rows=8  dout_sr1=1  dout_sr2=2  din_sr1=1  din_sr2=2 \
                   din_inverted=0  break_inverted=0  din_key_offset=32 \
                   scan_velocity=1  scan_optimized=1  make_debounced=1  break_is_make=0  note_offset=36 \
                   delay_fastest=0  delay_fastest_black_keys=0  delay_slowest=100

    KEYBOARD n=2   rows=12  dout_sr1=3  dout_sr2=4  din_sr1=3  din_sr2=4 \
                   din_inverted=1  break_inverted=0  din_key_offset=32 \
                   scan_velocity=1  scan_optimized=1  make_debounced=1  break_is_make=0  note_offset=28 \
                   delay_fastest=1  delay_fastest_black_keys=0  delay_slowest=140
    MAP1/BYTEI  0:0  1:20 20:60 60:90 90:110 118:127

    EVENT_KB id=1 hw_id=1 type=NoteOn chn=1 key=any use_key_number=1 range=0:127  kb_velocity_map=map1  kb_transpose=0 ports=1000110000000000

    EVENT_KB id=2 hw_id=1 type=NoteOn chn=4 key=any use_key_number=1 range=0:127  kb_velocity_map=map1  kb_transpose=0 ports=1000110000000000

  8. The layer:

    [13608.608] 90 45 14   Chn# 1  Note On  A-3  Vel:20

    [13608.608] 93 45 3c   Chn# 4  Note On  A-3  Vel:60

    [13608.681] 93 45 00   Chn# 4  Note Off A-3 (optimized)

    [13608.681] 93 45 00   Chn# 4  Note Off A-3 (optimized)

    [13613.072] 93 45 14   Chn# 4  Note On  A-3  Vel:20

    [13613.072] 93 45 3c   Chn# 4  Note On  A-3  Vel:60

    [13613.158] 93 45 00   Chn# 4  Note Off A-3 (optimized)

    [13613.158] 93 45 00   Chn# 4  Note Off A-3 (optimized)

     

    The split:

    [13895.421] 92 28 5b   Chn# 3  Note On  E-1  Vel:91

    [13895.548] 92 28 00   Chn# 3  Note Off E-1 (optimized)

    [13896.752] 92 56 6e   Chn# 3  Note On  D-5  Vel:110

    [13896.881] 92 56 00   Chn# 3  Note Off D-5 (optimized)

     

    The split point is 47(in earlier e-mail it was 67 however now it is changed to 47) C2youcansee that there is only signal to CHN3

     

     

  9. Yes, this is the logic and it works, the problem is somewhere else. I have tried the simple layer and split function and there are the following problems:

    Layer: I am assigning the KB1 and KB2 to HW ID 1 , KB1 to CH1 and KB2 to CH4

    EVENT_KB id=1 hw_id=1 type=NoteOn chn=1 key=any use_key_number=1 range=0:127  kb_velocity_map=map1  kb_transpose=0 ports=1000110000000000

    EVENT_KB id=2 hw_id=1 type=NoteOn chn=4 key=any use_key_number=1 range=0:127  kb_velocity_map=map1  kb_transpose=0 ports=1000110000000000

    1. At the first key press the midi event is sent to CH1 and CH4,then to other key presses are sending only to CH4 however each keypress is sending 2 on and 2 off signals to CH4

    2. The other problem is that the 2 signals have different velocity value, it seems that the second key press event is sending higher velocity value,

    Split mode:

    EVENT_KB id=6 hw_id=2 type=NoteOn chn=3 key=any use_key_number=1 range=0:67  kb_velocity_map=map1  kb_transpose=0 ports=1000110000000000

    EVENT_KB id=8 hw_id=2 type=NoteOn chn=2 key=any use_key_number=1 range=68:127  kb_velocity_map=map1  kb_transpose=0 ports=1000110000000000

    It is sending only events to CH3 and not only until splitpoint however in whole range.

     

    KB id 1 and 2 are assigned to the uppermanual and KB id 3-8 are assigned to the lower manual(73 key)

     

     

  10. Just now, FantomXR said:

    Or you maybe could do it with a NGR script. I didn't test it, but this might work.

    Set up a button in your NGC like this:

    
    EVENT_BUTTON id=1 type=meta meta=runsection:1 range=0:127
    
    EVENT_KB hw_id=1 id=1  type=NoteOn chn=1 key=any use_key_number=1 range=0:127
    EVENT_KB hw_id=1 id=2  type=NoteOn chn=2 key=any use_key_number=1 range=0:127

    In NGR you add this:

    
    if ^section == 1
    
     if id(Button):1 127
      set_active (id)KB:1 0
      set_active (id)KB:2 1
     endif
    
     if id(Button):1 0
      set_active (id)KB:1 1
      set_active (id)KB:2 0
     endif
    endif

    And you have to add also this. Without this both KBs would be active on startup:

    
    if ^section == 0
     set_active (id)KB:1 1
     set_active (id)KB:2 0
    endif

     

    Can I make 8 software keyboards and switching them based on the combination of 3 input bits?

    KB:1 - hardware kb1 to ch1

    KB:2 - hardware kb1 to ch4

    KB:3 - hardware kb2 to ch1

    KB:4 - hardware kb2 to ch2

    KB:5 - hardware kb2 to ch4

    KB:6 - hardware kb2 lower part up to C2 to ch3

    KB:7 - hardware kb2  upper part from C2 to ch1

    KB:8 - hardware kb2  upper part from C2 to ch2

     

    What happens when I am deactivating a KB and I have some keys pressed? I want to avoid some hanging notes when switching between configuration!

  11. I want to change the channell based on the combination of 3 inputs. The combinations are:

    1. KB1 – CH1, Kb2 – CH4 ,     DIO- 000

    2. KB1 – CH1, KB2 – CH2,    DIO-100

    3. KB1 – CH1, KB2 – CH1 + CH4,   DIO-010

    4. KB1 – CH1, KB2 – split at C2, lower part – CH3, Upper part – CH2,   DIO 101

    5. KB1 – CH4, KB2 – split at C2, lower part – CH3, Upper part – CH1,  DIO- 111

    6. KB1 – CH4, Kb2 – CH1, DIO- 011

     

  12. The transpose problem is solved, thanks to T.K.: no negative values are allowed I had to use valuse between 128 and 255.

     

    Next question:

    I am trying to apply the Midi channel changing function. My solution is to make 7 different .NGC/.NGR files. Each .NGC file will have different setting of KB1/2 to Midi channel 1-4 mapping. In NGR file I will call the different .NGC files (load xxx). I have tried  it however it seems it does not work. My questions:

    1. If I call a new NGC file does it substitute the running Default NGHC file or the Default stays running?

    2. Can I use the same event id numbers in all NGC files or I have to use different id numbers in each NGC file?

    3. Is it a good solution or there is an easier way to do that function?

    Thank you

    Frank 

  13. I am trying the transpose function switched by DIO register, it works however negative values are not supported. Here is my ngr file

    if ^section == 1
    set_kb_transpose KB:2 12
    endif

    if ^section == 2
    set_kb_transpose KB:2 -12
    endif

    if ^section == 3
    set_kb_transpose KB:2 0
    endif

    If I change the - 12 value for example to 24, it works however - values are not supported and it gives an error message. How can I make negative transposing? 

    Thank you in advance

  14. At the moment I have checked the BreakIsMake function controlled by DIO. It works.

    I think I can do the transpose (Octave -2, -1, 0, +1, +2) function based on the example however I need some help. Is there any function where I can handle several transpose values based on the combination of 3 DIO bits?

    000 – No transpose

    001 – Octave +1

    010 – Octave +2

    101 – Octave -1

    110 – Octave -2

    Or

    000 – No transpose

    100 – Octave +1

    101 – Octave +2

    110 – Octave -1

    111 – Octave -2

    Where I need to define it...in .NGC or in .NGR file?

     

    The second question is regarding the assigning the Midi CHannels to Keyboards and Splitting. I have seen an example for Splitting, I think it is possible to make  more Event_Keyboards listening the same HW and activating them based on the DIO bits. I have to make the following combinations

    1. KB1 – CH1, Kb2 – CH4 ,     DIO- 000

    2. KB1 – CH1, KB2 – CH2,    DIO-100

    3. KB1 – CH1, KB2 – CH1 + CH4,   DIO-010

    4. KB1 – CH1, KB2 – split at C2, lower part – CH3, Upper part – CH2,   DIO 101

    5. KB1 – CH4, KB2 – split at C2, lower part – CH3, Upper part – CH1,  DIO- 111

    6. KB1 – CH4, Kb2 – CH1, DIO- 011

    Is that possible to realize in Midibox NG?

  15. I have sterted up th NG. The velocity is not as sensitive as the direct KB... However I can achieve much more better velocity response by using the velocity map function. Now I have to implment the control of MiB, Transpose, keyboard split and Midi channel mapping (controlled by 16 hw inputs of STM32) and I can continue with the second board controlling the patches, banks, cc parameters. 

  16. I have tried th midibox ng however I can not start it to play any notes. The configuration is the same as KB. Only one thing which is not adjusted, the number of shift registers. 

    Where can by adjusted that the data has to be sent to Midi 2 and Midi 1(maybe this is the problem) on channel 1 or 4?

    Is it possible to upload. Ngc files without connected SD card? I am trying it however no any effect. 

  17. I have tuned the velocity, fastest 20, slowest 380. Modwheel is working from 0 to 127, only pitchwheel needs an analogue correction or calibration in midibox ng. Now it is working 0,5-2.5V, midpoint 1.5V. My question is:

    If I change to midibox ng, I have to change the interval to fastest 2, slowest 38. Is that wide enough to give good velocity response? I want to apply velocity curve too. 

     

×
×
  • Create New...