I need improved Router Actor with several Inputs.
-
I agree with Michel, Javascript would be the good choice, You just need 1 more input, to choose the output…I made a quick sample, 4 inputs, 3 x 4 outputs.Here is the javascript, easy to extend for more inputs/outputs and easy to make the code more compact… And also the izzy patchfunction main() { var00 = arguments[0]; var01 = arguments[1]; var02 = arguments[2]; var03 = arguments[3]; var04 = arguments[4]; out = []; switch (var00) { case 1 : out[0] = var01; out[1] = var02; out[2] = var03; out[3] = var04; break; case 2 : out[4] = var01; out[5] = var02; out[6] = var03; out[7] = var04; break; case 3 : out[8] = var01; out[9] = var02; out[10] = var03; out[11] = var04; break; } return out; }
-
Thanks @jhoepffner
I knew it wasn't to complicated but if you don't know JavaScript its not so easy. To learn JavaScript is on my list for this year :-)
Best Michel
-
Try using the Set Global Value and Get Gobal Value actor. It has multiple ins and outs and would be a good way to clear up some patch cord cludder. You may need to use the Number To Text actor with the name input to select using number values.
Does that help? Let me know if you need an example patch. -
Thanks for all recomendations.
I will try to use all methods you are suggested. After, I will give a comments. But I believe, that [jhoepffner](http://troikatronix.com/troikatronixforum/profile/15/jhoepffner)'s comment will be best solution for this task.Anyway, I hope that router improvements will be included in future version of isadora. By the way, It can be updated with "backward campatibility", because in simple conditions(1 Input) it will be operate as current router Actor! -
@Mikhael
I think it's not a router improvement but another task.For me what you want is not very clear, principally what append to the not choosed output? Old value? Zero (as I made with javascript)?To help you, we need a little bit more about how you want to use the "superRouter".Jacques -
I made another proposition with global values 47b364-multirouter02.izz
-
As I described before try to do simple task:* I have 5 movie players in project.* I have Bin Selector, Play, stop, Speed buttons. Also I have RadioButton Control, which select movie player to operate(only selected player will be recieve commands from these buttons). Only this group of controls will operates all of these 5 movie players, by selecting one of player in radiobutton control.Try to do this now. Very simple way is to do this by Router Actors for each control, which does same operation. It will be "messy" of connectors and actors in your project.I suggest update Router Actor, to route several inputs to several outputs. **It will be compact & plain! **Each inputs will be connected to appropriate control, "Select" parameter wil be connected to Radiobutton Control.1-5 outputs will be connected to appropriate parameters(with same order as inputs) of first movie player, 6-10 Outputs - to second player, 11-15 - to third, and so on till 21-25 outputs, which will be connected to fifth movie player.Here I also have explained all in pictures: http://troikatronix.com/troikatronixforum/discussion/comment/16054/#Comment_16054Also i made additional pics(see attachment) of control group, i mentioned above(which control all af thes 5 movie players).@[jhoepffner](http://troikatronix.com/troikatronixforum/profile/15/jhoepffner) >>>For me what you want is not very clear, principally what append to the not choosed output? Old value? Zero (as I made with javascript)?Not selected outputs haven't to change at all! They will store last changed values. **Same logic as current Router Actor** -
I think Router Improvement will be better, because, i suppose, that Java-based script can't route GPU or CPU video, but i also can give you example for such task.
-
If such improvement is possible for Isadora Router Actor, please note the same improvement for Selector actor also.
-
I believe the best solution is to create a User Actor, that you can reuse for your purpose.
Its a great way to simplify a patch, and create reusable modules.If you take a look thru my tutorial on creating a video sequencer, you will see how I create custom User Actors that contain the Router actor and accomplish another similar function as you have inquired about.http://www.dusxproductions.com/blog/create-a-video-sequencer/ -
I am not an Izzy Guru, but I think your task is very specific and, as said by DusX, User actor is the perfect object to do what you want and to reuse it. As you can see, even in javascript or user actor, it's difficult to have mixed input/output (int, float, video etc.) and different persons would need different in/out.I think also Data Array can be a perfect way to do the task. -
to DusX : I've wached your tutorial, thanks. I'm already have made user actor, but drawback of this method is low flexibility. I have to create defferent User Actor for each count of Inputs.
Actually i wonder, why such simple functionality of Router Actor still doesn't included in Isadora.to [jhoepffner](http://troikatronix.com/troikatronixforum/profile/15/jhoepffner) : I think, it's another case. This improvement could give more fexibility for Isadora. I don't think that it is specific and rare task for end user. They have to create custom User Actors with "messy" of connectors and routers, because Isadora doesn't offer simple way to implement such simple task. -
@Mikhail mutable inputs and outputs on user actors is definitely something that would be great ie the ability to have a variable number of inputs and outputs that follow a pattern and are initialized with a variable when you place the actor (javascript does take care of this a lot though). For this there is also the SDK if you want to make a more solid solution. Remember that Isadora is a kind of programming language and user actors are ostensibly part of that and a very important part. The main idea is to give all the building blocks so you can achieve what you want (you would not want a complete airplane as a single block of lego, the point is you have all the blocks you need to build an airplane). Most users begin to collect a variety of user actors that they use regularly as shortcuts to save time and space (like any programmer collects snippets of code or libraries so they don't have to type the same thing over and over again). Of course there are systems that have no user actor capabilities if you are looking for a more pre-made solution, however if you want to try to do something complex, those systems will not help. Any which way you flip it you will have to do some of the making and if all the bits are there then you have your solution. I understand that you don't feel you should have to make a unique actor for each task, but that is how the system works, in the end it is not very time consuming and you will learn a lit of tricks along the way to make you quicker.
I think a mutable input output pattern system for user actors is a great feature request, but a multi IO router (as you need in this case) is not, the multi IO router can already be built from existing actors, if Mark were to code a new actor every time someone encountered something time consuming no new features would ever arrive. Mutable IO user actors would allow many new and interesting things to be made.Another feature request that would help you would be bundled connections- you could make a list of parameters, video feeds and text (whatever you want) and bundle these into a single cable. In fact this has come up before and would make Izzy a million times more flexible so I am going to do a feature request now.These kind of underlying features are much better to think about as new things we need than a single use case actor.One less elegant approach is for you to make a big router actor using global variables or even the old sender receivers, make it as big as the biggest you need and then embed it in another user actor to save space, this way you have a very small task to do each time you want to adjust the number of outputs and inputs, or you can just always use the biggest one and not utilise the extra ins and outs.It is not uncommon for people to have user actors 20 or more layers deep containing hundreds of logic operations and nested user actors with the same complexity (this is why it is not so important that the Izzy design screen is small, you nest and nest and nest etc, it also makes your patch much more readable and faster to change.This is the work of a media technician or artist, if it was easy anyone would do it and we would all be out of a job. The creative part comes in understanding how to push the logic of the system, there is always a work around.I disagree that Izzy does not offer a simple way to implement this task, it is easy, just takes a while of connecting stuff. Some of the more advanced patches folks have made overcome much more complex logic problems than this simple task. I do agree that the wires can get messy but that is the basis of Isadoras function. -
@Fred : I know advantage of user actor and I already use it in my projects. I have enough expirience in programming, and I know advantage of User Actors to build project by blocks, when possible. Also I undersand what you mean, by nesting of User actors.
I just can't understand why so native functionality of Router Actor still doesn't implemented! As programmer(in past) i suppose, that such impovement should not be so difficult(to implement), but gives flexibility for project developers, also simplify some tasks. I don't ask to create new actor especially for my usage! No! I suppose that this functionallity(to route several inputs, not single) finds lot of usages for other developers. Of course, I could build custom router, BUT think once again about **flexibility for project creating**. I think Router have to had such functionallity as basic! I wonder why such omission taking place!I don't understand about "bundled connections". so, i can't comment it.Where I can find SKD on java actor(or what you mean)?Thanks for your recomendation and comments! I will try to use each method you're suggested. -
Not to be rude, but we (Dusx, Michel, Fred, me, other) are trying to help you. I just note there is few thanks from you for all the time and energy we give to understand your problem and help you…The way to write in bold is not very friendly. We have understood that you wish to have a different router actor. You can fill a feature request for your idea, perhaps Mark and his staff would be interested, but please, be more friendly with us.There is no SDK for java actor, because there is no java but javascript. It's easy to understand, there is some example and I just uploaded some for subtitle that you can easily understand "As programmer(in past)"All the best,Jacques -
BTW, Jaques, I really like your proposition with global values. It lets you route any number of values as a group or single to any value as a group or single - as much I understand.
-
@Mikhail There is an SDK for creating your own Isadora actors here, you can create the actor you want (including the expandable interface), it is clear and well documented. As Joe said there is no SDK for the javascript, it is just javascript.
The feature request I was describing is (with a programming background this will be fast to explain- sorry other readers if this is unclear) that so far the data types in Isadora are often adaptable and set when you make the cords connect, but they are only single instances of a single type. I suggest to have a struct as a data type, this means in a single cord you could pass several types, just like a struct. We would need a struct maker and decoder, but what it means is if the router and selector could also accept this new struct data type your problem would be solved, you would connect a single cable to each input and output but they would be carrying a struct full of goodness.From a programming perspective this is a way better solution than a multi input or batch router/selector, it would also be useful for a lot of other things and has a broader scope of improvement in a single feature. MAX/MSP has a list function (that is just a list), however structs are much more powerful than lists or arrays for obvious reasons.Sorry to harp on it again, but as the solution you want can be easily made with other actors (that is the way Isadora works) the need for this is low: like all other more complex logic problems it is made of smaller logic blocks, all the blocks are there so the priority to make this (even though it adds some functionality) would be low as the essential functionality is there already. Newer features like the mapper, or GPU based processing have really changed the way we work and these were not possible without specific new features that we waited for and were rewarded with. We all love Isadora, and are really aware of the small team involved, I think this combined with some of our long term relationship with Izzy means we are always looking out for really new things to be implemented, things that truly create new possibilities, we hope that does not rub you the wrong way and I am sorry if it did.In the meantime, as I assume you have to get on with your work, the method I mentioned, making the biggest user actor with routing and selecting groups and then just going in and deleting the extra connections (user inputs and user outputs from inside the outer most user actor) not needed for that instance and then saving as a new instance would be a very fast way around your problem. This way you do have to make something **once** with all those little lego bits, but you would have a custom built solution for each instance in seconds after that.CheersFred -
@jhoepffner : I'm so sorry if i was wrong in my lexis. I meant no offense. I just want to note important phrases. Don't forget, that my main language is Russian. So please do not take my phrases personally. I really very thanks for suggections from all of Yours and im very appreciate, that you try to explain each detail so clearly. I will take note of your remarks and will not use bold in future, only underline :))))
Unfortunately i also have no enogh expirience in Javascript(only few simple codes, so I clearly understand your code, once again thanks for your sample), but I know princeples of programming. I worked with Object Pascal(Delphi) and X++(Microsoft Axapta), Visual Basic. And yes I know that Java and JavaScript has different lexis. :))) -
I've got to be honest the global value option does exactly what you want and infact some what better.
-
I just wanted to share a tutorial I added recently.http://troikatronix.com/support/kb/grouping-ungrouping-and-passing-json-values/It shows a rather simple method of grouping sets of data into a single cord (kinda like Pack and Unpack in Max, and It addresses much of what you wrote about).I have used it a bunch and find it a useful and elegant solution.I hope you can make good use of it as well.