SynthMaker

midi input/midi remapper/midi router?

Archive · 2008 11 old posts

From the original SynthMaker forum (2004–2014), with its members’ names and dates.

posh ·

right. so after searching the forum, the wiki and whatnots ive decided to just ask away then.

what i need: a way to remap 8 incoming note on/off messages to different midi data outputs. they are to be triggered in an random order (drumpad controller to be exact) abd i have no idea how to remap these really.

i mean, i know how to map a message and i know how to take one input and remap it into something else, but how can i take 8 different inputs (midi in -> splitter -> filter?) and let them all map to 8 different channels/cc outputs?

should i make a filtering module that filters out anyhting incoming except the data i tell it to, and then make 8 of those that extracts the midi in and filters it before spitting it out to the remapper? if so, how should i map these to the remapper?

i have made a mockup osm that has 8 pads and a ui switch that has 8 output pads. now, how can i get the inputs to actually map to these outputs? i know i can do it with one cc, but several? how do i tell sm that "hey, i hit pad number 5 (on my realworld physical drumpad controller that is) , that one should send 90 0b 2f" and the other pads should send bla bla bla..."? i know how to remap something cause that already works, so thats not the problem. although im pretty sure that the pad module has some missing connections causing it to fail heh.

heres the example mockup + the remapper module that works with ableton live, a little remapping test module heh. check it: http://nwrecords.com/storage/the_pad_monitor_Test.osm

oddson ·

I'm looking at your OSM but I'm not sure from your text what it is supposed to do and what problem you're having with it (I've only been looking a few minutes so far but I see you're online and I thought you might try to clarify)>

What is the input source? What should the output look like?

Do you have a MIDI message capture of the the input you could post as text?

posh ·

oh, its quite easy actually heh. the working one is.. well. taking a midi input and then remaps it to another midi output. different channel, different cc etc.

the not working one is the same thing, but for the 8 pads. should take inputs of the 8 physical drumpads and remap them to the settings on the midi mapping ui page. so i could reprogram the contorller basicly, cause i cant reprogram mine so i need a plug to remap it for me 😉

edit: its plugged into my audiophile delta card, running through midi ox to midiyoke 1, through bomes midi translator and out as midi yoke 2. so im taking midi yoke as input with SM, if that matters?

heres a screenshot from midi ox for the actual data:

yep, im online although im just about to go to sleep. its almost 8 am here 😮

edit more: yeah. im tired. when you say input source you are referring to the midi port no? if so i apologise for posting useless midi ox monitoring data for you hah 🙂

ill leave this for now and come to it in the morning with a clear head. thanks for trying though mate. aaaand..

good night!

oddson ·

My confusion stems from the fact that you've indicated in the text that it's note messages you want to remap but all I've found so-far is CC remapping (I can't say I've actually figured out what it's doing yet).

The other thing is that you've used the word 'working' next to each... which one isn't?

(you were editing while I posted... I see you are talking note on/off messages... I still don't know what the output messages should be).

posh ·

basicly i just want to make a channel/cc remapper. note on/off messages is fine as they are. right now i jsut want to be able to change the cc messages and the outgoing midi channel with a midi remapper.

the bottom one of the two main modules is working, i have tested it with live and it does remap the input to the output. now, given the fact that these are done mainly by trial and error i tried to make a similar remapper on the top main module, the 8 pad module, but that one is not working whatsoever. it is taking midi input properly though, but its not sending it out through the remappers, which it should because (afaik) they are connected in the same fashion as the working remapper in the bottom main module. i think. i have to recheck it in the morning i guess.

but if we leave that for now and say that they are actually working, sending out midi as they should, my question would be then how to make each (physical input) pad to send out a different remapped value that ive specified in sm.

the more i think of it, the more i come to think that i should make the incoming ui (incoming midi channel/cc then) so that you manually enter the channel/cc on the ui, then use a cc filter that only sends to the remapper if the values from the incoming is matching (basicly telling your plugin, hey, this is how my controller is programmed, now remap it for me!), otherwise it doesnt send anyhting. this would work in theory.

so, how would i do that then? 🙂

ok, now, i sleep. thanks alot man.

oddson ·

I'm drawing something up for you... it uses a single MIDI split and event primitive and an integer array to keep track of the mapping relations... should have it later today if I can get some time to play.

posh ·

thanks alot, looking forward to it. im sorry for my previous ramblings, i was very tired and very confused to say the least. still trying to learn to use sm really hehe.

i am well aware that my projects is way bigger then they should be for someone so early in the learning curve but hey. how can you learn unless you experiment? 🙂

oddson wrote: I'm drawing something up for you... it uses a single MIDI split and event primitive and an integer array to keep track of the mapping relations... should have it later today if I can get some time to play.

oddson ·

The trick I've used is to encode/decode Channel and D1 into a single integer scheme so that a an integer array can be used to store the data.

The channel data is multiplied by 128 and then the D1 data is added. This becomes the index value for the input and the encoded data in the stored array. You just have to build an interface to write and erase values from the array (but you do have to erase them explicitly or reset the whole array when changes are made and loop trough all your remap points to reset them -- otherwise old remappings will be left active).

The rest of it is just simple logic to pass other messages to pass (or to decode them back into simple data in the case of CC data not remapped).

posh ·

wah. thats a solution i would never ever figure out hehe. i thought that my filter solution theory was neat. i guess i have alot to learn 😉

any way that i can use a timer module that gets triggered by an input that sends out one trigger (to clear) and then N millisecond later sends out another trigger (to map) perhaps? cause that would make my life way easy, now that i think i have decided on an UI hehe.

im actually reading the users guide now again now that i understand a (wee) bit more about sm.

edit: thanks alot for the schematic by the way. youre a lifesaver: now i can use my pad contorller the way i want it to. yay.

oddson wrote: The trick I've used is to encode/decode Channel and D1 into a single integer scheme so that a an integer array can be used to store the data.

The channel data is multiplied by 128 and then the D1 data is added. This becomes the index value for the input and the encoded data in the stored array. You just have to build an interface to write and erase values from the array (but you do have to erase them explicitly or reset the whole array when changes are made and loop trough all your remap points to reset them -- otherwise old remappings will be left active).

The rest of it is just simple logic to pass other messages to pass (or to decode them back into simple data in the case of CC data not remapped).

kirkagur ·

oddson wrote: The trick I've used is to encode/decode Channel and D1 into a single integer scheme so that a an integer array can be used to store the data.

The channel data is multiplied by 128 and then the D1 data is added. This becomes the index value for the input and the encoded data in the stored array. You just have to build an interface to write and erase values from the array (but you do have to erase them explicitly or reset the whole array when changes are made and loop trough all your remap points to reset them -- otherwise old remappings will be left active).

The rest of it is just simple logic to pass other messages to pass (or to decode them back into simple data in the case of CC data not remapped).

this is very useful ! thanks...

oddson ·

posh wrote: wah. thats a solution i would never ever figure out hehe.

The encode/decode thing isn't absolutely essential to a working solution. It's a workaround to SM not having a two dimensional arrays that allowed me to use a single array and apply my standard means of remapping MIDI events.

posh wrote: i thought that my filter solution theory was neat. i guess i have alot to learn 😉

I never really sorted out how yours worked exactly so I can't say how close it is to working properly. I did notice "by NothanUmber" in one module, so I assumed you've borrowed elements from elsewhere. That approach can work but in this case I was concerned the multiple MIDI splitters and event primitives might be the problem so I came up with a solution that used just one of each. (BTW - I did not test it thoroughly!)

posh wrote: any way that i can use a timer module that gets triggered by an input that sends out one trigger (to clear) and then N millisecond later sends out another trigger (to map) perhaps? cause that would make my life way easy, now that i think i have decided on an UI hehe.

First, the Window timers and MIDI generated threads don't play nice (search "MIDI Timer" for the back story). Second, the events don't need timed delay to work, they just need to happen in the correct order. So if you're going to use eight editors, then you do need them to send '0' to the old index when they start to be edited. You could use a Boolean to True primitive connected to the 'Is Editing' output of the Edit Control to trigger clearing the old value and a Boolean to False to set the new one once they leave.

Wrote something here? To have a post removed or your name hidden, write to [email protected].

Before your first post

A few rules keep this a friendly place. You agree to them once.

Shown next to what you post, here and in the app. It doesn’t have to be your real name: 3–24 lower-case letters, digits or _ (capitals become lower case, spaces become _).

    Then your post goes up straight away.

    Delete this reply?

    Open it in SynthMaker?

    It goes on the track you’re editing there, in place of that track’s sound, and into My sounds. Your other tracks stay as they are.

    Want to keep that track’s sound? Start a new song in SynthMaker first (Song › New song), then open this.

    Report this reply?

    Only the developer reads reports. The person isn’t told who reported them.

    What’s wrong with it?

    Block this person?

    You won’t see their posts and replies here any more. They aren’t told, and you can unblock them at any time.

    People you’ve blocked

    Their posts and replies are hidden from you. Unblock someone to see them again.

    The community rules

    A few rules keep this a friendly place. Everyone agrees to them once, before their first post.