## Introduction IanniX is still in beta version. You can report bugs through our website iannix.org. Scores made with earlier versions of IanniX (0.6xx and before) are not yet compatible, however we are working on a solution for you to soon be able to import them. Don't hesitate to try the examples with our patches (in `Patches` folder), they interact with triggers and up to 60 cursors! Linux users, please run `IanniX.sh` if you don't have Qt on your computer. ## Version tracking Known bugs on 3D mode, objects selection is not working on Linux, you need to press on `ALT`+`CONTROL` to control IanniX in 3D `Snap to grid` option can make the object selection difficult to use IanniX 0.8.2 documentation is now accessible from the Help menu on Windows JPG background are now working on Windows and Linux you can lock the objects position when you navigate in the score (avoiding moving accidentally objects) you can toggle the display of objects labels object selection has been enhanced `Snap to grid` icon has been added in the toolbar `Patches example folder` icon has been added in the toolbar displays OSC messages on object hover font size bug on Windows fix script editor closes with IanniX hide menu bar in fullscreen on Windows and Linux bug with trigger size/tickness/zoom fix bug with cursors on empty curves fix minor bugs with inspector fix minor bugs with keyboard shortcuts (arrows) fix compilation warnings fix # shortcuts ## Score & objects You can use the following modifiers to control IanniX : `CONTROL`/`COMMAND` navigate through the score without moving or selecting any object `SHIFT` allows you to add object in selection `ALT` allows you to control IanniX in 3D (beta) `WHEEL` zooms on the score `SHIFT+WHEEL` fast zooming `ESC` exits edition or fullscreen ## Curve edition You can use the following modifiers to edit a curve : `SHIFT` add a point on the curve (some bugs are known with this feature) # messages ## General contruction <protocol>://<destination>/<address> <arguments> `osc` (Open Sound Control), followed by IP, port and OSC adress. Example : `osc://127.0.0.1:1234/oscAddress` `serial` (ASCII Serial Port). Example : `serial://` `udp` (Raw UDP, PureData compatible), followed by IP and port. Example : `udp//127.0.0.1:5678/` `http` (GET Request), followed by standard URL construction. Example : `http://localhost/myapp/page.php` `midi` (MIDI Protocol), followed by portname (without spaces and slashes) and `noteOn`, `noteOff`, `cc` or `pgm`. Example : `midi://portname/noteOn channel note velocity` Example : `midi://portname/cc channel controller value` Example : `midi://portname/pgm channel value` `direct` (Direct Call to IanniX, kind of very fast loopback/localhost). Example : `direct://` ## Cursors & curves variables Messages are sent when the cursor moves and is active. Arguments can be (separated by spaces) : `cursor_id`, `cursor_group_id`, `cursor_document_id`, `cursor_xPos`, `cursor_yPos`, respectively the cursor unique ID, the group of the cursor, the name of the document, the x and y position of the cursor on the score `cursor_time` and `cursor_time_percent`, the cursor position on the curve, respectively in seconds and in percent (from 0 to 1) `cursor_value_x` and `cursor_value_y` are the cursor values according to specified target bounds `cursor_angle` is the cursor angle on the curve `cursor_nb_loop` is the cursor number of loops on the curve `curve_id`, `curve_group_id`, `curve_document_id`, `curve_xPos`, `curve_yPos`, respectively the curve unique ID, the group of the curve, the name of the document, the x and y position of the curve on the score (first point of the curve) `collision_curve_id`, `collision_xPos`, `collision_yPos`, `collision_value_x` and `collision_value_y` are sent when a cursor crosses a curve. ## Triggers variables Messages are sent when the trigger is triggered and is active. Arguments can be (separated by spaces) : `trigger_id`, `trigger_group_id`, `trigger_document_id`, `trigger_xPos`, `trigger_yPos`, respectively the trigger unique ID, the group of the trigger, the name of the document, the x and y position of the trigger on the score `trigger_value` is 1 when the trigger has been triggered, 0 when the trigger triggers off (time is specified by trigger-off property) all the information about the cursor that triggers the trigger (cf. cursor arguments) ## Other variables You can also send custom values (floats or string values) by putting directly their values as arguments. ## Examples `osc://127.0.0.1:2001/cursor cursor_id cursor_xPos cursor_yPos` send the cursor ID, the x and y position of the cursor via OSC to host 127.0.0.1 on port 2001 `udp://192.168.255.255:2001/cursor cursor_id` send the cursor ID via raw UDP to broadcast of network 192.168.0.0 on port 2001 `http://myserver.com/trigger.php trigger_id 15 true` poll the page `http://myserver.com/trigger.php?trigger_id=<trigger ID>&custom2=15& custom3=true` `serial:// display trigger_id 2` send the ASCII string `display <trigger ID> 2` on serial port `midi://nanoKORG/cc 1 22 cursor_value_y` send the value of the cursor to the MIDI device nanoKORG on controller #22 on MIDI channel #1 `direct://zoom 2` controls the zoom of IanniX viewport (cf. scripts commands) # properties ## Object creation/removal You have three types of objects `triggers` that sends event when triggered by a `cursor` `cursor` that evoluates on a `curve` API : `add <trigger | curve | cursor> <id | auto>` (returns object ID in JavaScript) API : `remove <target>` ## Group An object can be grouped with others in order to structure your score, to ease object manipulation and to make groupped control. Avoid spaces in group names. API : `setGroup <target> <group name>` ## Position An object has a 3D position on the score (but IanniX doesn't render 3D yet). A cursor placed in z=2 will only trigger triggers placed in z=2. API : `setPos <target> <x> <y> <z>` ## Activity An object can be active (send messages, triggers objects) or inactive (no message sent, doesn't trigger). API : `setActive <target> <0 | 1>` ## Messages Triggers and cursors send messages. A trigger send its messages when triggered (and after a delay if trigger-off is specified). A cursor send periodically messages. See messages documentation. API : `setMessage <target> <period>, <message1>, <message2>, <message3>, ...` For trigger, `period` is usually `1` (1 ms), for curves, period is usually `20` (20 ms) ## Trigger Off (note off) If positive, a message will be sent when a trigger is triggered and an other message will be sent after the delay you specify. API : `setTriggerOff <target> <delay>` ## Cursor A cursor can follow a curve or can be free (controlled by OSC for example). API : `setCurve <target> <curve target>` You can specify the keyword `lastCurve` to specify the last curve created. ## Cursor width Cursor will trigger triggers that hit the cursor line, defined by its width. API : `setWidth <target> <width>` ## Cursor speed Cursor follows a curve with a speed factor (regarding the timeline) or with a precise duration. API : `setSpeed <target> <speed factor>` API : `setSpeed <target> auto <duration>` ## Cursor master speed You can apply a master speed factor on a curve. Very useful in real-time performance. API : `setSpeedF <target> <speed factor>` ## Cursor loop pattern Cursor follows a cursor according to the loop pattern. It's a succession of speed factors. The pattern `1 0` says that the cursor will go forward and make one iteration on the curve. The pattern `1 -1` says that the cursor will go forward then backward, then forward, ... indefinitly The pattern `1 2 1 0` says that the cursor will go forward and then twice as fast then normal speed and finally stops. API : `setPattern <target> 0 0 <pattern>` ## Cursor offsets A cursor starts on a curve with the `initial offset`. Then it will goes to `start offset` to `end offset`. API : `setOffset <target> <inital> <start> <end>` You can use the keyword `end` to specify the end of the curve if you don't know the curve length. ## Cursor position You can manually set the cursor position on the curve. API : `setTime <target> <time>` ## Cursor bounds You can map the cursor's coordinates onto a different space. API : `setBoundsSource <target> <x-top-left-corner> <y-top-left-corner> <x-bottom-right-corner> <y-bottom-right-corner>` API : `setBoundsTarget <target> <x-top-left-value> <y-top-left-value> <x-bottom-right-value> <y-bottom-right-value>` ## Curve resize Curves have a bounding rectangle that you can resize. API : `setResize <target> <width> <height>` ## Curve points Curves is defined by a serie of points. Bezier cuves is in beta testing. API : `setPointAt <target> <point index> <x> <y>` API : `setPointAt <target> <point index> <x> <y> <quad bezier c1 x> <quad bezier c1 y>` API : `setPointAt <target> <point index> <x> <y> <cubic bezier c1 x> <cubic bezier c1 y> <cubic bezier c2 x> <cubic bezier c2 y>` Point index starts from `1` ## Curve ellipse Curves can be an ellipse. API : `setPointsEllipse <target> <width> <height>` ## Curve text Curves can be glyphes (beta). API : `setPointsTxt <target> <width> <height> <text>` ## Curve SVG Curves can be defined by a SVG path (beta). API : `setPointsSVG <target> <width> <height> <svg path>` SVG path looks like `M637.599,1569.972c0,0,89.127,0,222.818,0c8.913,0,18.023,0,27.381,0.113...` ## Curve image Curves can be a picture (automatic binarisation and vectorisation) (beta). API : `setPointsImg <target> <width> <height> <filename>` ## Autosize Objects can be resized when score is zoomed. API : `autosize <0 | 1>` ## Zoom Sets the viewport zoom. API : `zoom <zoom factor>` ## Center Sets the score viewport center. API : `center <x> <y>` ## Score speed Control the timeline speed. API : `speed <speed>` ## Play Plays the score. API : `play` ## Fastrewind Fast rewind the timeline. API : `fastrewind` ## Label Objects can have a label drawn on the score. API : `setLabel <target> <label>` ## Colors You can specify the color of an object or register colors as a IanniX variable. (global variables : `grid`, `axis`, `selection`, `object_selection`, `trigger_active`, `trigger_inactive`, `trigger_active_message`, `trigger_inactive_message`, `curve_active`, `curve_inactive`, `cursor_active` and `cursor_inactive`) API : `setColorActive <target> <r> <g> <b> <a>` for active objects that doesn't send messages API : `setColorInactive <target> <r> <g> <b> <a>` for active objects that send messages API : `setColorActiveMessage <target> <r> <g> <b> <a>` for inactive objects that doesn't send messages API : `setColorInactiveMessage <target> <r> <g> <b> <a>` for inactive objects that could send messages API : `setColorActive2 <target> <h> <s> <b> <a>` for active objects that doesn't send messages API : `setColorInactive2 <target> <h> <s> <b> <a>` for active objects that send messages API : `setColorActiveMessage2 <target> <h> <s> <b> <a>` for inactive objects that doesn't send messages API : `setColorInactiveMessage2 <target> <h> <s> <b> <a>` for inactive objects that could send messages API : `registerColor <variable> <r> <g> <b> <a>` API : `registerColor2 <variable> <h> <s> <b> <a>` API : `setColorActive <target> <variable>` API : `setColorInactive <target> <variable>` API : `setColorActiveMessage <target> <variable>` API : `setColorInactiveMessage <target> <variable>` ## Textures You can register textures (PNG, JPG) as a IanniX variable to use it for objects. (global variables : `background`, `trigger_active`, `trigger_inactive`, `trigger_active_message`, `trigger_inactive_message`) API : `registerTexture <variable> <x-top-left-corner> <y-top-left-corner> <x-bottom-right-corner> <y-bottom-right-corner>` API : `setTextureActive <target> <variable>` API : `setTextureInactive <target> <variable>` API : `setTextureActiveMessage <target> <variable>` API : `setTextureInactiveMessage <target> <variable>` ## Size Objects can have a size (trigger) or line-width (curves and cursors). API : `setSize <target> <size>` ## Line-style You can set the line-style of a curve or cursor. (documentation todo) API : `setLine <target> <dash style> <dash pattern>` # API ## Interfaces IanniX can be controlled through : `osc` (Open Sound Control), default port is `1234`, default address is `/iannix` Example : `osc://127.0.0.1:1234/iannix/zoom 2` `serial` (ASCII Serial Port), by sending commands on opened serial port Example : `zoom 2` `udp` (Raw UDP, PureData compatible), default port is `1235` `http` (GET Reply) by replying with a command when IanniX sends a `http` message (cf. messages) Example : `zoom 2` `midi` (MIDI Protocol), not documented, need to write special script `direct` (Direct Call to IanniX, kind of very fast loopback/localhost), sent by IanniX itself, through a `direct` message (cf. messages) `nxscript file` (JavaScript), please see an example included in IanniX Example : `iannix.execute("zoom 2");` ## Target Each command of IanniX need to know the targeted object(s). You can specify : `id` to target one precise object Example : `setActive 3 2` `group id` to target a group of object Example : `setActive mygroup 2` `all` to target all the objects Example : `setActive all 2` `current` to target the last created or targeted object Example : `setActive current 2`