Greetings and congrats on this amazing piece of software. I have a few questions regarding controlling Iannix via OSC. First though lets describe what Im up to.
I am desigining a MaxForLive device to use with a project in Iannix in order to create a Cyclic sequencer. Im hoping to make it so that I can control Iannix with a midi controller indirectly, meaning I will be controlling with my controller the Max device and then the decice will send the apropriate messages via OSC to Iannix.
So far I have managed to send messages from MaxForLive to Iannix and set initial zooming, zoom in and out with a knob, make curves and cursors visible/invisible, active inactive, change speed and also have visual feedback in BPM values and many interesting things.
Now my questions:
1. Is there documentation on Iannix API besides the one found in the download? I keep wondering because there are some things found in Iannix examples that are not mentioned anywhere in the help documentation (such as iannix.ask for example)
2.Is there a way to “save” the groups created in a project or do I always have to use a script after opening a project to configure groups?
3. If I understood correctly the variable “current” relates to the last targeted object. Is there a way to target a trigger after its manual (not by script) creation? What Im trying to do, is create for example triggers by clicking with the mouse and then use a script to add those triggers to specific groups. Is it possible?
Here is an early example image of what Im on, attached 😉
Ooops…ermmmm….registered now as a forum member! 😉
First, thanks for trying and experimenting IanniX!
Your work sounds great, don’t hesitate to post some samples here on or on Facebook (or just by tagging IanniX in your post like you already did).
So, our answers:
1. Everything is now in the documentation, excepting iannix.ask (to ask the user a variable) and iannix.meta (title of the dialog box). There are some beta features in JS, like onOSC(message) function which allows you to script when IanniX receives messages (useful to map for example MIDI messages with IanniX actions). But this function is really poor (you receive raw messages, in a string, you need to parse it…).
2. Fixed in the new beta (0.8.21)
3. Yes, you can specify the ID of the object. For example : setPos 41 0 0 0 will place the object with ID=41 to (x,y,z)=(0,0,0). You can also target a group : setPos my_group 0 0 0. You can create an object with add trigger 41 to create a trigger with the ID=41 or var id = iannix.execute(“add trigger auto”);. And, no, sorry, you can’t target an object that has been clicked in the interface… But maybe you can do it with M4L with a bangs a message that targets the desired group ?
Thanks for the reply. Already downloaded the new beta and it works great.
Im finsihing up my M4L device and soon I’ll provide the examples to you which I think you will find VERY interesting mainly because I have found ways to sync Iannix to Live (evwen though Iannix doesnt feature a BPM based timeline).
To be sincere, what Im trying to achieve goes away from the purpose of this software I suppose as it is targeted to more “defined” created music and not ayto-generated triggers.
The examples will showcase what Im saying but in the meantime my problem is this: my script creates 8 circles and 8 cursors and sets them into groups. I was hoping to provide to the end user a “Cyclic Sequencer” where the end user will add the triggers (by clicking his mouse) where he pleases without getting in the hassle of using scripts. This gives me the problem that the triggers do not belong to any group so I cannot target them from M4L.
I even thought of creating an M4L “add created triggers to groups” button but still I cannot target “current” objects via osc (only via script – or am I wrong?)
The only solution would be to provide ready-made scripts-scores (with ready made triggers grouped) which is not what I want.
Also, as a feature request, it would be perfect if we could define (via script) default messages for triggers, cursors and curves, in other words everytime the end user adds a trigger (via mouse-click not script), it will have a script-designed default message for example
“registerMessage triggers 1, trigger_value cursor_id”
Anyway, all the above sound pointless unless you actually get to see what Im trying to achieve, and that will possibly be during the weekend! So, talk to you soon.
Here is the almost finsihed M4L device! 😉
Woow, I’m amazed by the work you did! It looks really cool!
To the contrary,
… Anyway, all the above sound pointless unless you actually get to see what Im trying to achieve, and that will possibly be during the weekend! So, talk to you soon.
…it makes sense and I’m looking forward to your next phase. I think a customized default message prototype is a great idea, BTW, and doubt I would ever have thought of it (but I’d surely use it!).
Ok guys, here is a short demo video on Vimeo. In a couple of days (after fixing some glaring mistakes in my programming) I will provide you the download links for all associated files (actually just a background image, a iannix script and the MaxForLive device) 😉
From the designer perspective, it was fairly easy to group the cursors and the curves (circles) into groups inside my script. Afterwards, it is easy to ‘associate” triggers with the circles-cursors due to the cursor_id being sent by each trigger. In other words, as far as triggering goes, Im using each trigger’s cursor_id value to trigger corresponding notes, in a the fashion of “cursor_id (sent by trigger) -> bang -> specific midi note (the user can also define this through the “Notes settings” in my patch.
So, targetting from MaxForLive the circles and the cursors (which remember have been script-created) is easy because they are grouped as soon as they are created (upon running the script). So its easy to affect their opacity or other properties by sending OSC messages to their groups from my M4L.
Now, from the user’s perspective it would be cool if velocity and mute-unmute buttons could “affect” the triggers opacity associated with each circle and not just the circles and the cursors. For this to happen however, the designer must find a way to group the “user created triggers”. Since we dont know the id of a trigger untill it is created, how can we target it in a message created in M4L beforehand? Do I make any sense? lol
FWIW, i tried a cunning way to solve this…..
Lets say the user creates a trigger (remember, by user I mean that the trigge ris created by mouse, not script)…this trigger by default sends out its id and its cursor_id (amongst the rest of the values). I used the triggering itself to cause a message to be sent from M4L to Iannix which uses the transmitted trigger_id and groups it to the group “circleX” (where X= cursor_id)
In other words, if we create a trigger by mouse, and it automatically gets the id 1009 and is triggered by cursor 4 then a message triggered IN M4L by the trigger does the job
iannix/setGroup 1009 circle4
My problem however was that each time the specific trigger is triggered, the message is being re-sent to Iannix causing havock.
trigger_id = 1009 -> send the message: iannix/setGroup 1009 circle4 (or whatever the cursor_id is)
if trigger_id = 1009 for a second time -> do nothing, wait for 1010 (in essence it will wait for the second trigger to be created from the user, so that it can be grouped)
So what do you say? is it possible?
Cunning, maybe. Smart, creative, resourceful — for sure! I’ll bet Guillaume is hiding behind his workstation right now ginning up a more elaborate way to handle trigger groups! :–)
…My problem however was that each time the specific trigger is triggered, the message is being re-sent to Iannix causing havock.
No problem: Max has some very idiomatic ways to handle that. This is a common problem. For example: You want to sequence MIDI note-off messages in a polyphonic context, so when you lift a key, you want to turn off that pitch, but only on the polyphonic voice that is most recently sounding it. So, the voice ID becomes the index with which to associate a note-off message.
Yes, you could also use some js. Just do an associative array (dictionary) with the id as index. I personally prefer writing Java, js, or C over creating Max-patch spaghetti, but it’s good to become familiar with the builtins.
For standard Max built-ins, have a look at [coll] and [funbuff] (I’m not sure, but I think one of the tutorials or examples shows those very same objects in a note-off application). In 3rd party externals, Peter Elsea’s LObjects are perfect for all kinds of list operations, index-object pairs, lookups, etc., types of things.
Cool, thanks for the info! Already had a look yesterday night on those LObjects. I think though I have figured out a solution. Will try and see! 😉
Ok guys Im very happy to present and share with you the final version.
Download link and info:
If I had M4L I’d be running this right now! But just through taking in the video, I’d say this project is an enticing way to indicate the potential of Iannix in combination with other software. You must have solved your OSC denial-of-service message cloud problem :–)