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) :

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 :

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