Hi everybody,
Thanks to a project based on IanniX core (https://www.facebook.com/media/set/?set=a.263008863722523.60915.191008214255922&type=1), we’ve made some modifications on IanniX (teasing : 3D curves, better curve management, script simplification…) and bugs fixing (font problems with Lucida Sans, 1st point of a curve can be different from its position, score saving improved, new curve rendering…).
There were a lot of code change (to switch from 2D to 3D) and scripts have also changed to be more readable. But don’t worry, everything will be compatible, we’ve juste make some stuff easier.
We’ll be proud to present you this new version at the end of this month (I’m sure we can!). So keep in touch (Facebook or Twitter @iannix_software).
exciting news, i’m eagerly awaiting the new features. 3D ! 🙂
best,
dp
Hi Guillaume, that’s great about the new version.
I’ve made a number of enhancements to my private version of IanniX which I synced to the svn version and am tracking with GIT on my system.
The enhancements include:
– support for pitch bend as a « /bend » MIDI message type
– the addition of some additional parameter types that can be used in messages including
* trigger_distance: distance from the center of cursor to the center of the trigger
* collision_distance: distance from the center of cursor to the intersection of the cursor with the collision curve
* trigger_angle: angle of line between center of cursor to the center of the trigger
* collision_angle: angle of line between center of cursor and intersection of the cursor with the collision curve
(implementation of the angle parameters is underway now)
– support for embedded Javascript expressions in messages. For example the message midi://IanniX_Out/note 0 {127*(trigger_distance/10)} trigger_value
would return MIDI note numbers scaled based on the trigger_distance, assuming the maximum possible trigger distance was 10.
Anywhere a single parameter can be used, an expression enclosed in { } can be substituted and the expression can used any of the parameters that could have been used directly in the expression. Whatever number the Javascript returns is entered into the message in place of the expression.
– I also made a few enhancements to the parameters, notably to the « collision » ones, as currently if these are used in a message and a collision is not occurring, that field is blank in the message and this can displace any parameters following that parameter so they may be mis-identified. I added return value of -999999 as a place filler in these cases. I also added a « colliding » parameter that is 1 if a collision is occurring and 0 if not.
– In working with the cursor-angle parameter I noticed that it always returns a negative angle, if I’m not mistaken. The correct positive angle I believe would be given as 360+cursor_angle.
– I’d also like to add a trigger_angle parameter that would be the angle of the line from the cursor centre to the trigger at the time of a collision. This combined with the cursor-angle could be used to compute (with the embedded Javascript) the angle to the trigger relative to the direction of the cursor. i.e. The angle as it would be seen from the frame of reference of the cursor. Geomaestro support this and it allowed things like panning the sound as it would be heard by an observer riding on the cursor.
– Similarly I’d like to add a collision_angle parameter for cursors colliding with curves.
– I have some other ideas but I think that’s a summary of what I’ve done do far.
I have the source code for these things, which is quite localized in the code, tracked as changes in a GIT repository so if you are interested I could send you the code.
– Chris
One other minor detail: I don’t think cursor_angle currently depends on which direction the cursor is moving. I think it would be most useful if it did. i.e. If the cursor is moving left to right the angle should be returned as it is. If the cursor is moving right to left the angle should be 180 plus the current angle.
There are a few other things I’m planning to add in the next few days:
– Some helper functions available in the embedded Javascript. The most important would be scale(in_min,in_max,out_min,out_max) that would be like the scale object in MaxMsp, and would rescale a parameter ranging from in_min to in_max into the range out_min to out_max. There might also be a version that scales logarithmically. These things could be implemented with the embedded Javascript but would be so commonly needed that it makes sense to provide them.
– The ability to have the MIDI /note message control the note duration. I suggest doing this by allowing an additional parameter at the end of the message that, if present, would set the duration for that note. If the parameter is omitted the note would be the length set in the inspector. (I haven’t looked into the difficulty of implementing this yet. The extent of the changes necessary depends on how the note-off timing is implemented.)
– I have a bunch of other ideas but you may have already done some of these things in the new version so I won’t discuss any other ideas right now.
– Chris
I’m really impressed by all these features you develop! Very excited about that!
– « /bend »
Ok, MIDI is not our favorite protocol, but good idea! Can you send me the piece of code todo that? (guillaume@iannix.org)
* trigger_distance & trigger_angle
Ok, I’ll add this.
* collision_distance & collision_angle
Ok, I’ll add this.
– support for embedded Javascript expressions in messages
Oh yeaaah. I want you piece of code to do that (this is a feature I wanted to develop, but not enough time!)
– « colliding » parameter that is 1 if a collision is occurring and 0 if not
Ok, Because of 3D curve, this feature (collision) is now in alpha…
– negative angle
Ok, with our new curve system, it should be better.
– trigger_angle/collision_angle for collision
Ok, I didn’t code this, because collision is now in alpha. But wait for the next release to have more flexible architecture to manage curves.
– Some helper functions available in the embedded Javascript
Ok, I’ve added a IanniX.JS file with some usefull functions (like in Processing : map, scale, normalize…)
– The ability to have the MIDI /note message control the note duration.
But you have triggerOff parameter in the inspector, maybe it can help isn’t it ?
Waiting now for some piece of code, then I can package that.
Btw, are you on Mac OS X or Windows?
– « /bend »
Ok, MIDI is not our favorite protocol, but good idea! Can you send me the piece of code todo that? (guillaume@iannix.org)
>> I also use OSC into Supercollider but I like MIDI for direct access to acoustic instrument sounds.
* trigger_distance & trigger_angle
Ok, I’ll add this.
>> I have trigger distance implemented so it will be in the code I send you.
* collision_distance & collision_angle
Ok, I’ll add this.
>> I also have collision distance implemented
– support for embedded Javascript expressions in messages
Oh yeaaah. I want you piece of code to do that (this is a feature I wanted to develop, but not enough time!)
>> I have it working and I’ve tested it fairly extensively. The one thing my code doesn’t do at this time is support spaces embedded in the Javascript. The splitting of the messages using space delimiters is in a different place from the rest of the parsing so I was leaving this for later. It would be nice to be able to have spaces in the Javascript, and it would not be too hard to add, hopefully with no bad side effects. You would know of possible side effects better than I do. I also don’t support Javascript in messages EXECUTED from scripts, only from objects. The parsing of script-executed messages was different and would have taken extra work, and I didn’t think it was very useful anyway. However scripts can of course attach messages containing Javascript to objects.
– The ability to have the MIDI /note message control the note duration.
But you have triggerOff parameter in the inspector, maybe it can help isn’t it ?
>> Trigger off does not do all you need. Presumably you set a timer to cause MIDI offs so the message isn’t around any more when the note needs to be turned off. trigger_off certainly will be useful in some cases such as where you want one trigger to turn a note on and another to turn it off, but not for the timed-off case.
Waiting now for some piece of code, then I can package that.
Btw, are you on Mac OS X or Windows?
I’m developing on Windows 7. I also use Macs but I prefer Windows for development. Haven’t installed qt on the Macs. I might at some point.
P.S. If you want someone to help with testing the upcoming release I’d be pleased to do that. These days I have time available to work on IanniX.
I propose to extract all the changed files from my repository, zip them and email them to you. Would that be the best way to send the code?
– Chris
A quick note to say I’m available for testing on Linux. I run a variety of distributions, 32-bit and 64-bit. All machines here can run SuperCollider 3.5 and Csound 5.13.0 in realtime, and all have graphics powered by nVidia GPUs (I need fast 3D for my work with AVSynthesis and Pd/GEM). And of course I have a full development environment installed on each box. 🙂
dp
I now added the ability for my Javascript expressions in messages to have embedded spaces which will be good for readability. Now expressions like this are possible:
midi://VMidi2/note 1 { 100*Math.sin(cursor_angle + 360) } { (cursor_yPos>0)?127:0 }
To do this I modified the message entry parser in extoscpatternask.cpp.
I’ve tested all the boundary conditions and it seems to be working fine. Let me know if you want to me send you this file also.
– Chris
Exciting news, Guillaume. The enhancements by Chris are stunning as well.
–Bob
There’s lots more cool stuff in the next release too! Also additional documentation, and some important crashing bugs (all that I know of) have been eliminated.
© IanniX Association
Qu'est-ce que IanniX ? | Téléchargement | Showcase | Forum | Recherche | À propos
Cookie | Durée | Description |
---|---|---|
cookielawinfo-checkbox-analytics | 11 months | This cookie is set by GDPR Cookie Consent plugin. The cookie is used to store the user consent for the cookies in the category "Analytics". |
cookielawinfo-checkbox-functional | 11 months | The cookie is set by GDPR cookie consent to record the user consent for the cookies in the category "Functional". |
cookielawinfo-checkbox-necessary | 11 months | This cookie is set by GDPR Cookie Consent plugin. The cookies is used to store the user consent for the cookies in the category "Necessary". |
cookielawinfo-checkbox-others | 11 months | This cookie is set by GDPR Cookie Consent plugin. The cookie is used to store the user consent for the cookies in the category "Other. |
cookielawinfo-checkbox-performance | 11 months | This cookie is set by GDPR Cookie Consent plugin. The cookie is used to store the user consent for the cookies in the category "Performance". |
viewed_cookie_policy | 11 months | The cookie is set by the GDPR Cookie Consent plugin and is used to store whether or not user has consented to the use of cookies. It does not store any personal data. |