Sign in to follow this  
Followers 0
dj3nk

Re: MIDI Merging an external controller

20 posts in this topic

OK, so I have to look for another solution to get analog controls.

The problem is: Adding a CoreModule a la MB64 with an ainx2 for 14 pots would be very easily but ....

to record the tweaks I do with the pots while I am playing  ..... do I have to enable the internal MidiMerger of the SID-Core to get the mididata forwarded to the SID-Ouput again, or does the Sid Application send those nrpn even when it is controlled from outside without using the MidiMerger? I think that problems could occure when updating the firmware with the enabled midimerger. I hope you can help me.

greetz

EDIT: Can i tell the Midimerger to ignore sysex ? That would solve the problem I think.

Share this post


Link to post
Share on other sites

MBSID won't forward incoming events by default to avoid a feedback loop between synth and DAW. You can enable the merger function by executing the MIOS_MIDI_MergerSet function from external (e.g. your MB64) via MIDI. You can try this out in the debug window of MIOS Studio and once it works, just create a MB64 Meta Event which sends the same SysEx string like MIOS Studio.

If this sounds too complicated, you could simply add a double pole switch to your MIDIbox for switching the MIDI IO routing of the MB64 and MBSID core.

Or you could use a GM5 MIDI interface (ordered and paid during the second bulk run), and establish the MIDI routing with your PC (e.g. with MIDI-Ox or MIDItrix)

Best Regards, Thorsten.

Share this post


Link to post
Share on other sites

No not too complicated :D . But can I tell the Midimerger to ignore sysex somehow? (even changes in the sourcecode). So I could leave the merger turned on and it won't result into a midi feedback when I update my MB with another firmware.

Share this post


Link to post
Share on other sites

FWIW, I'd like to see this 'local on/off' switch in a menu... It'd suck to have to upload new firmware to have the synth behave differently in a chain of other devices. I have to do this from time to time with my commercial synths.

Share this post


Link to post
Share on other sites

In addition i have to tell the exact meaning of my previous post. The "no sysex forwarding" function should only filter the incoming messages from mbStudio. So it would be possible to add a mb64 (or anything else) before the mbSid and record this events in the host sequencer via the midimerger. No need for doing anything then. You wont get a feedback loop when updating the firmware and all events from other devices are passing through the merger.

Perfect for adding real analog controls to the SID :D not yet

greetz

EDIT: I've added a small sketch. outdated

Problem: When the recorded events are played from the Host they get through the merger again, what means that sended events are received again by the host (=> loop possibility)

EDIT2: I've added another sketch

Due to the above written problems I searched for a new solution. As this seemly doesnt need any modification on the firmware this could be the last post on this prob in this topic.

The yellow rectangles are showing 2 areas where we need to merge 2 signals into 1. The MidiMerger of the SID is turned off in this case. So there's my probably last question ... is it possible to add a 2nd MidiIN to the SID with an IIC module or do I need to build a seperate Core with the merger software?

EDIT3: Perhaps it's the easiest way to integrate a MBrouter with 2 iic's into the case.

mergingold.JPG

mergernew.JPG

Share this post


Link to post
Share on other sites

Stryd: I don't understand, why MBSID would need a "local off" - MBSID only sends CS changes when CC mode is turned on. It's turned off by default, and it can be switched on/off from the CS

Dj3nk: no, it isn't possible to add a second MIDI IN. Why not trying the proposed switch - or wait a bit and use the easier to realize GM5 solution? It doesn't require any software change, is more flexible and less expensive.

Best Regards, Thorsten.

Share this post


Link to post
Share on other sites

The only really reason is that I want to build my SID with analog controls and one MidiIN/Out in one case (without USB). So that it looks and runs like the original just with pots. And I want to leave and use the midi connectors on my SID, so I am not limitated to leave the SID running over a usb port.

The switch would work, but I don't like switches ;) I do more like solutions without "workarounds" if it is possible somehow.

The costs wouldnt matter since I have some core and 74hc00's lying around here.

Share this post


Link to post
Share on other sites

ok, so somebody else has to help you to find a proper solution (I assume that it will require some programming effort)

Best Regards, Thorsten.

Share this post


Link to post
Share on other sites

no problem

thanks for your help and moving this topic

greet

Share this post


Link to post
Share on other sites

DJ and TK, i have the same problem.

I want to add the MB6582 a Keyboard.

I have done the keyboard using a core with ID 04, a scan matrix and enabling :

movlw        MIOS_MIDI_MERGER_MBLINK_FP
call        MIOS_MIDI_MergerSet
I have activated the merger in main.inc of the MB6582 (his ID is 00) with
movlw        MIOS_MIDI_MERGER_MBLINK_EP
call        MIOS_MIDI_MergerSet
instead of
movlw        MIOS_MIDI_MERGER_DISABLED
call        MIOS_MIDI_MergerSet

And concerning the midi data, everything works as expected from a midi box linked chain (very clever to have developped this).

BUT the MB6582 will produce a tone only 7 seconds after pushing a key on the Keyboard (7 sec after the Note On 3 bytes) !!!!!! Note off is executed immediatly

IMO, the merger function (end point) is executed too late in the SID app. Am I right ? Where should it be placed ?

Changing the code as MIOS_MIDI_MERGER_ENABLED in both applications (SID+Keyboard) solve this issue but create a midi loopback with the Host computer

Share this post


Link to post
Share on other sites

i just notice there is no more MBLINK in SIDv2 but MBNet.

It explains my problem, doesn'it ?

Share this post


Link to post
Share on other sites

Strange, I don't see a reason why this doesn't work. MBLink is natively supported by MIOS, and you configured it correctly. Could you do some more debugging to find out, why a note is played after 7 seconds?

Best Regards, Thorsten.

Share this post


Link to post
Share on other sites

why a note is played after 7 seconds?

the note is played directly, it is the tone that appears 7 seconds after

it is like the MB6582 needs 7 seconds to generate the tone. Maybe a priority task issue ?

EDIT

In fact my core ID04 had the wrong app

I reuploaded app with MBLINK_FP and now the MB6582 sounds like it should (no more 7sec delay). But, obvious the MB6582 has the MBLINK_EP active it doesn't forward note events generated by the core with MBLINK_FP active..

I don't understand.

Share this post


Link to post
Share on other sites

In fact my core ID04 had the wrong app

Thats what I assumed ;)

I'm not aware of a task priority issue in MBSID... therefore it was an obvious configuration error.

I reuploaded app with MBLINK_FP and now the MB6582 sounds like it should (no more 7sec delay). But, obvious the MB6582 has the MBLINK_EP active it doesn't forward note events generated by the core with MBLINK_FP active..

I don't understand.

Maybe you are not using MIOS_MIDI_BeginStream() and MIOS_MIDI_EndStream() in your application?

Best Regards, Thorsten.

Share this post


Link to post
Share on other sites

TK, YOU ARE THE BEST !!! EVER ! Thanks a lot !!!

Begin stream and End solved my problem. Now i better understand why it is useful to add those 2 codelines ;)

Share this post


Link to post
Share on other sites

nice to hear that you solved this. I'll have to check that MBLink and perhaps MBNet stuff for my purposes too soon.

Can MBNET access and change the actual values of the encoders in the chosen layer? Or can it only handle a parameter "inside the sidapp", meaning I cant access parameters "of the control surface"? (sry for that bad english ;D)

I  havent read into that stuff very deeply yet, but it were nice to know if you could give me a good starting point for that.

greetz

Share this post


Link to post
Share on other sites

Your english is ... not clear.

Here is what I did (soon in the wiki) :

Device One = A piano keyboard based on MIOS, Core ID4 ; it has a midi out and a midi in.

Device Two = Wilba MB6582, Core ID0, 1, 2, 3.

What I wanted : i play on the piano, notes go to the MB6582 and output from the MB6582 in order to record it in Protools. So I connected the out of the piano to the in of MB6582 and configured the MBLINK EndPoint/ ForwardPOint.

Merger enabling was a very bad solution because of the feedback loop (when my DAW play the SID receive and forward events in this case, it isn't conveniant for re-recording)

What happens ? The Host sends the events to device one, device one forward them to device two and END.

If you tweak device one, events go to device two (and device two react to them) and send them to the host by is MIDI out (in order to record in Protools).

Device One can be considered like a remote for device two.

IMO it is what you want to do if the parameters of the SID are controlled by SySex or CC But notice that you can already tweak 5 knobs on the MB6582 (while activating "CC" it send CC to the host)

Share this post


Link to post
Share on other sites

thank for your explanation !!

I want to replace the 14 encoders with analog pots. As far as you explained, I understand everything. My only problem is that I dont know if it is possible to access a value of an encoder directly. So that I turn a pot and the right value in the chosen layer (!) is changed.

...or...

can I just change one CERTAIN parameter? That way I would have to manage these layer functions in my controller and not in my sid. But that would be a lot more to do I suppose. :/

If everything works fine we could melt our projects to one ?!

Share this post


Link to post
Share on other sites

you can do what you want if the parameter is controlled by a CC (128 values) or NRPN. If SysEx, it will be more complicated.

I noticed that several parameters use 255 values, so ...

Seriously, SID has been designed to be controlled by the control surface of TK. It is easier to do like him.

Study the parameter chart and think about. It's not easy IMO. And you will need more than 14 potentiometers.

Share this post


Link to post
Share on other sites

And exactly these arent controlled by cc or sysex. I think I have to get deeper into MBNet or I have to implement the layer functions in my analog part and stay on MBLink (the easiest way perhaps) ....

Why more than 14 ? The SID has 14 encoders (without menu) and those are to replace.

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
Sign in to follow this  
Followers 0