Jump to content

Recommended Posts

Posted (edited)

I have build the router and... its working!!!!! all poorts are sending from and to with on an off. IIC2 its sending chn.<9 to INT0 and >9 to IIC0 and IIC1, thats all right. But the keybord on IIC3 DON'T split anyway its sending all notes to same . I have software versie from midi_router_v1.1c. (v1.1b working de rotary/encoder not good)

please help :sad:

Best Regards, Troek

Edited by troek
Posted

Cross post deleted (I kept the one in the netherlands-section, doesn't count as a cross-post) and thread moved to a more fitting board.

Posted

Cross post deleted (I kept the one in the netherlands-section, doesn't count as a cross-post) and thread moved to a more fitting board.

Ok, but i am not going to answer there in dutch :laugh:

Posted

hi

i'm sorry for the crossing

The router works great except the note splitting on the last input. All midi signals on input 5 is going directly to output 4 and 5 without the note and following channel split.

Posted

Port #3 is working like intended - from router.c:


void ROUTER_Rx_IIC3(unsigned char ptype, unsigned char evnt0, unsigned char evnt1, unsigned char evnt2) __wparam
{
unsigned char transposed_note;

// IIC3: connected to my Yamaha AN1x

// lock/release this routing path on SysEx streams
ROUTER_LockPathOnSysEx(PORT_IIC3, ptype);

// filter clock
if( evnt0 == 0xf8 )
return;

if( ptype >= 0x08 && ptype <= 0x0e ) {

// check if channel should be forced to specific value
if( router_flags.IIC3_FWD_FORCE_CHN ) {
evnt0 = (evnt0 & 0xf0) | (router_iic3_fwd_force_channel & 0xf);
}

// check if note should be transposed
if( router_iic3_fwd_transpose != 8 && ptype <= 0x09 ) {
if( router_iic3_fwd_transpose >= 8 ) {
evnt1 += (router_iic3_fwd_transpose-8)*12;
// if value >= 0x80, decrement 12 until we have reached the range <= 0x7f again
while( evnt1 & 0x80 ) evnt1 -= 12;
} else {
evnt1 -= (8-router_iic3_fwd_transpose)*12;
// if value < 0, add 12 until we have reached the range >= 0 again
while( evnt1 & 0x80 ) evnt1 += 12;
}
}

if( router_flags.IIC3_FWD_MBSID )
ROUTER_Tx_IIC0(ptype, evnt0, evnt1, evnt2);

if( router_flags.IIC3_FWD_MBFM )
ROUTER_Tx_IIC1(ptype, evnt0, evnt1, evnt2);

if( router_flags.IIC3_FWD_MBSEQ )
ROUTER_Tx_IIC2(ptype, evnt0, evnt1, evnt2);
}

// forward data (also) to the Core MIDI OUT
#if 1
// if no FE
if( evnt0 != 0xfe )
#endif
if( !router_flags.IIC3_FWD_MBSID && !router_flags.IIC3_FWD_MBFM && !router_flags.IIC3_FWD_MBSEQ )
ROUTER_Tx_INT0(ptype, evnt0, evnt1, evnt2);
}
[/code] If you want a similar behaviour like for IIC2 (note splitting; just replace the code of ROUTER_Rx_IIC3 by the code you will find in ROUTER_Rx_IIC2
[code]
void ROUTER_Rx_IIC2(unsigned char ptype, unsigned char evnt0, unsigned char evnt1, unsigned char evnt2) __wparam
{
// IIC2: connected to my MIDIbox SEQ

// lock/release this routing path on SysEx streams
ROUTER_LockPathOnSysEx(PORT_IIC2, ptype);

// forward MIDI clock/start/stop/continue to all IIC modules
if( evnt0 >= 0xf8 && evnt0 <= 0xfc ) {
ROUTER_Tx_IIC0(ptype, evnt0, evnt1, evnt2);
ROUTER_Tx_IIC1(ptype, evnt0, evnt1, evnt2);
ROUTER_Tx_IIC2(ptype, evnt0, evnt1, evnt2);
ROUTER_Tx_IIC3(ptype, evnt0, evnt1, evnt2);
}

// if IIC2_FWD_CHN8_16 flag set:
if( router_flags.IIC2_FWD_CHN8_16 && (ptype >= 0x08 && ptype <= 0x0e) && ((evnt0 & 0x0f) >= MIDI_CHN9) ) {
// directly forward MIDI channel #9..#16 messages to MIDIbox SID and MIDIbox FM only
ROUTER_Tx_IIC0(ptype, evnt0, evnt1, evnt2);
ROUTER_Tx_IIC1(ptype, evnt0, evnt1, evnt2);
} else {
// forward all other events to the Core MIDI OUT
ROUTER_Tx_INT0(ptype, evnt0, evnt1, evnt2);
}
}

or create your own "routing logic" - by changing the source code this MIDI Router is completely configurable! :)

Best Regards, Thorsten.

Posted

hi thanks for the fast respons :thumbsup: but its not what i was looking for :unsure:

on the site i've found a block diagram which says on input iic3 -> only channel 16 -> split notes <c-4 or >=c-4 and then change the channel and send them to ouputs iic3 an iic2. I can't find this in the code.

It might be possible that the code has changed without changing the diagram

grtz

Posted

Yes, the released code always contains the current routing I'm using by myself.

I don't see a need for keeping the diagram up-to-date, since every user would adapt the routing for his own requirements anyhow.

I'm not sure if you are asking for somebody who programs the code for you, or if you just only wanted to mention the differences. If you need a different implementation, you could consider to customize the routing as you really need it - the routing in the diagram is only an example, there are many more possibilities.

Best Regards, Thorsten.

Posted

Hi,

Very tricky from me :shocked: ,But do you have some old code ?????? with that function that whe can experince? C programs is not my thing. :blush:

thanks

Posted

No, I don't have the old code anymore !!!!!!

But probably it looked somehow like this one ??????


void ROUTER_Rx_IIC3(unsigned char ptype, unsigned char evnt0, unsigned char evnt1, unsigned char evnt2) __wparam
{
unsigned char transposed_note;

// IIC3: connected to my Yamaha AN1x

// lock/release this routing path on SysEx streams
ROUTER_LockPathOnSysEx(PORT_IIC3, ptype);

// filter clock
if( evnt0 == 0xf8 )
return;

// apply exactly the routing as documented under http://www.ucapps.de/midi_router/midi_router_default.gif
// note: parameters selectable on the UI are not taken into account here
// if this is desired, replace constants by router_flags.* variables as in the original router.c file
if( ptype >= 0x08 && ptype <= 0x09 ) {

if( (evnt0 & 0x0f) == MIDI_CHN16 ) {
if( evnt1 < 0x3c ) {
ROUTER_Tx_IIC0(ptype, (evnt0 & 0xf0) | MIDI_CHN9, evnt1, evnt2);

transposed_note = evnt1 + 2*12;
// if value >= 0x80, decrement 12 until we have reached the range <= 0x7f again
while( transposed_note & 0x80 ) transposed_note -= 12;
ROUTER_Tx_IIC2(ptype, (evnt0 & 0xf0) | MIDI_CHN1, transposed_note, evnt2);
} else {
ROUTER_Tx_IIC1(ptype, (evnt0 & 0xf0) | MIDI_CHN13, evnt1, evnt2);
}
}
}

// forward data (also) to the Core MIDI OUT
#if 1
// if no FE
if( evnt0 != 0xfe )
#endif
ROUTER_Tx_INT0(ptype, evnt0, evnt1, evnt2);
}
[/code]

Best Regards, Thorsten.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...