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 properly
- 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
- in fullscreen mode, you sometimes need to click in the window to enable transport shortcuts
IanniX 0.8.21
- bug with duplicate function fix
- major cursor bug fix (with pattern like
1 -1 )
- undo improved and redo added
- mouse in fullscreen mode disabled
- speed slider in transport dock behavior fix
- messages are not sent when fast-rewinding
- about window closes with IanniX
- displays real-time OSC messages on object hover
- objects ID in script examples are now more human-readable
- object center list (in inspector) is now sorted by ID
- MaxMSP example has been updated
- SuperCollider example added
- OSC port in examples is now 57120 to be compatible with SuperCollider
- new simple Javascript example
- trying to make message editor window more readable...
play , stop and fastrewind are now sent
- snap to grid bug on custom grid fix
- objects group is now saved with score and when copying/pasting
- MIDI bug fix
- raw UDP bug fix
- Ableton Live (MIDI) example added
- Arduino (serial port) example added
- groups can be selected from Object Selection panel
- multiple selection is allowed in Object Selection panel
- settings (OSC port, UDP port, Serial port and transport message) are saved when IanniX closes
- message time interval/period can be changed through the inspector
- files can be opened with a drag&drop on the Dock (Mac OS X users)
- files can be opened in command line (1st argument)
- added
nb_triggers , nb_curves and nb_cursors arguments for messages
- Cancel button is Message Editor is now working
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 note , cc or pgm . IanniX MIDI Out port is called IanniX_Out Example : midi://portname/note channel note velocity (zero-velocity equals to note-off command) 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 127 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.
nb_triggers , nb_curves and nb_cursors gives informations about the score number of objects
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 100 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 curves are 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> <scaling> <font> <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 SVG 2
Curves can be defined by a SVG polyline (beta).
API : setPointsSVG2 <target> <scaling> <svg path> SVG polyline looks like 0.5,0 145,357.75 235.5,423 289,469...
Curve image
Curves can be a picture (automatic binarisation and vectorisation) (beta).
API : setPointsImg <target> <scaling> <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 in PureData : send /iannix/zoom 100
serial (ASCII Serial Port), by sending commands on opened serial port Example in Arduino : Serial.println("zoom 100");
udp (Raw UDP, PureData compatible), default port is 1235 . Example in PureData : send zoom 100
http (GET Reply) by replying with a command when IanniX sends a http message (cf. messages) Example in PHP : echo "zoom 100";
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). Example : direct:// zoom 100
nxscript file (JavaScript), please see an example included in IanniX Example : iannix.execute("zoom 100");
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
|