Tiction is a flexible, nodal music sequencer.
It’s pretty simple: Each node represents an event, and a connection from one node to the next triggers the next event after a certain number of tics. Nodes send MIDI note messages and/or MIDI controller change messages when triggered. Connecting nodes in a circuit lets you start a repeating pattern when one of the nodes is triggered.
A node can change its pitch and controller values based on its position on the screen. When a node is triggered, it performs some physical action: either repelling or attracting other nearby nodes, or nudging itself in a random direction. The physical interaction between nodes allows you to construct complex, rhythmic melodies and effects without having to draw filter envelopes or touch a traditional sequencer.
New to version 0.4.0
Tiction v0.4.0 adds a full-screen option, MIDI sync, improved controller behavior (number boxes for editing MIDI pitches and other parameters are more intuitive), and it fixes some bugs related to NOTE OFF messages.
v0.4.1 fixes a few more bugs:
- Key strokes used to edit text in the number boxes no longer erroneously trigger nodes.
- Notes no longer hang if the sequencer stops before a note finishes playing.
Download
Tiction is available for Mac OS X 10.4 and above, Windows XP and Vista, and (nominally, so far) Linux.
Tiction v0.4.1 Mac
Tiction v0.4.1 Windows
Tiction v0.2.1 Linux (older version until I can test v0.3.0 and above on Linux)
Tiction is free for any use. However, if you use it and enjoy it – and especially if you make money with it – please consider a donation. Donations help me justify spending time to maintain and improve Tiction and other cool software. Thanks!
How to use Tiction
Get Tiction to play nice with others
Tiction doesn’t make any noise by itself – it just sends MIDI data. When you first launch Tiction you’ll need to press ‘o’ on your keyboard and select the correct MIDI output from the list shown in the options screen. Press ‘o’ again to hide the options.
If you have a MIDI-enabled hardware device, select the output on your MIDI interface to which the device is connected.
If you want to use Tiction to control a software instrument, you’ll need to set up an inter-application MIDI connection. On Mac OS X, you can create an inter-application MIDI bus with Audio MIDI Setup in Applications/Utilities. Launch the utility, select the MIDI tab, double-click on IAC Driver, and set up one or more buses. Make sure “Device is online” is checked. You’ll need to restart Tiction before the new bus(es) are visible.
I’ve never set up an inter-application MIDI connection in Windows, so you’re on your own there.
For now, set your instrument to listen to all MIDI channels on the bus you’ve selected.
Create a loop
Press ‘n’ to create a new node (it will be placed under your mouse pointer). Create a few more nodes. Now click on one to select it, press ‘c’, and click on another node or press ‘v’. You’ve just connected these two nodes; when the first node is triggered, it will trigger the second node after the number of tics shown on the connection. The two nodes are also linked by a springy connection; this lets you keep groups of nodes together.
Now connect the rest of the nodes together in a closed circuit, from one node to the next until you’ve connected the last to the first. The direction of the arrow indicates the direction of a message – make sure you construct a loop that allows a message to be passed in a complete circuit.
Make it go!
Now you just have to get things going. Start the sequencer by clicking on the “Start/Stop” button or just press the space bar. Select one of the nodes and press “Enter” or “Return”. The circuit should start playing!
By default, each node’s pitch is determined by its horizontal position in the window. If you click one of the nodes in the loop and drag it from left to right, you’ll hear the notes change pitch. Also by default, the MIDI velocity of a node is determined by its vertical position in the window. NOTE: Currently the vertical axis of Tiction is flipped. That is, higher Y values correspond to the lower part of the screen. This will be corrected soon.
Pressing ’s’ will set the selected node as a stop point – the next message to this node will not trigger it and will not be passed on.
Go wild
You can create as many nodes as you’d like (well, as many as your computer will handle) and connect them however you want. You can leave groups “un-circuited” – you’ll just have to retrigger them manually – or create densely interconnected meshes of nodes.
A note about stability
Stability – keeping things from blowing up – is a hard problem. In order to keep things as flexible as possible, I’ve left it mostly up to you to deal with it. Consider the following network:
What will happen when the left node is triggered? It’ll trigger the top node one tic later, which will trigger both the right node and the bottom node. One tic after the bottom node is triggered by the top, it gets triggered again by the right node. So now you’ve got two trigger events circulating through this network. After a couple more tics, you’ll have three. Pretty soon the network will be saturated – every node will be triggered during every single tic.
Tiction makes sure that a single node only sends one MIDI note per tic, so you don’t have to worry about flooding your instrument with data, but you will end up with a loop that just plays a four-note chord every tic. If that’s what you were going for, then great! But if you weren’t expecting this, it would get annoying. So be aware that this is possible.
Things to play with
Editing nodes and connections
Pressing ‘e’ brings up a set of controls for the selected node:
- You can set a node’s MIDI pitch to be determined by its X position, its Y position, a fixed pitch, or you can have the node send no note at all.
- You can set a node’s MIDI continuous controller number. You can set the CC value to be determined by the node’s X position, its Y position, a fixed value, or you can have the node send no CC messages at all.
- A node can have a physical action associated with its triggering. You can set the node to jiggle a bit in a random direction, attract other nodes, repel other nodes, or do nothing.
- Increasing the mass of the node increases its attract/repel effect on other nodes. This also makes it harder for connected nodes to drag it around.
- You can select the MIDI channel this node sends its messages on.
- Clicking the “Copy to group” button sets all connected nodes to this node’s MIDI channel. Very useful for quickly assigning a loop to a new instrument.
If you press ‘e’ when a connection is selected (select the connection by clicking the dot at its midpoint), a couple controls for the connection pop up:
- The ‘tics’ box sets the number of tics this connection delays a message by before triggering its downstream node.
- The ’strength’ slider changes the spring strength.
Tiction options
Pressing ‘o’ brings up the options screen.
Here you can change the the MIDI pitches associated with positions along either axis. The axes are currently only divided into 16 pitches – future versions will allow more flexibility here.
The options screen also shows options for synchronizing Tiction’s clock source. The options available are:
- USE INTERNAL CLOCK. This is the default option. Tiction will be driven by its internal clock, and the ‘Tic Tempo’ box will adjust the tempo.
- SYNC TO OSC. Tiction will advance the sequence one tic for every “doTic” OSC message it receives (see OSC and Tiction).
- SYNC TO MIDI. Tiction will synchronize to the incoming MIDI bus, selected from the MIDI IN list. If this mode is selected, then START SEQUENCER ON MMC START will automatically start the Tiction sequencer (equivalent to pressing START/STOP) when it receives a MMC start command.
Other things you can do in the options screen:
- Adjust the brightness (0 for off) of the flashing bars with the BAR BRIGHTNESS slider.
- Globally enable or disable physical actions (attract/repel/nudge) with the DO PHYSICAL ACTIONS ON TRIGGER switch.
- Adjust the incoming and outgoing OSC port numbers.
Clicking and dragging the ‘tic tempo’ box in the upper right corner lets you speed up or slow down the pace of things. This number represents ‘tics per minute’.
To cycle through all nodes onscreen, press ‘tab’ repeatedly. To “grab” a selected node (suck it toward your mouse pointer), press ‘g’.
Pressing ‘h’ toggles the displayed help.
Standard and Full Screen versions
When you download Tiction, you’ll get both a “Standard” and a “FullScreen” version. The standard version works the same as in previous versions – Tiction launches in a 1024×768 window. The full-screen version will behave just as it sounds – take up your entire screen for maximum nodal goodness. If the full-screen version detects a second monitor or display, it will open on that display.
Due to a low-level Java/Processing issue, pressing Ctrl-Q on Windows will not quit the full screen application. In this case, pressing the Escape key will quit. Ctrl-Q still works in the standard WIndows version and Cmd-Q still works on both Mac versions.
OSC and Tiction
Version 0.3.0 added support for OpenSoundControl. So far the following messages are used:
- /tiction/nextnode takes one integer argument. If the argument is non-zero, the next node is selected. This is the equivalent of pressing “tab”.
- /tiction/tic takes one integer argument. If the argument is non-zero, the sequencer advances one tic. For this to have any effect, you must select “sync to osc” in the options screen.
- /tiction/triggernode takes one integer argument. If the argument is non-zero, the selected node is triggered. This is the equivalent of pressing “Enter” or “Return” when a node is selected.
- /tiction/stopnode takes one integer argument. If the argument is non-zero, the selected node is armed as a stop point. This is the equivalent of pressing “s” when a node is selected.
- /tiction/sequencer takes one integer argument. If the argument is 1, the sequencer starts. If the argument is 0, the sequencer stops. This is the equivalent of pressing the “start/stop” button or pressing the space bar.
- /tiction/movenode takes two float arguments, each between 0 and 1. The first argument sets the selected node’s X position on the screen, the second argument sets the selected node’s Y position on the screen. This lets you move a node around with controllers such as TouchOSC’s X-Y pads.
- /tiction/setpitch takes two integer arguments. The first argument, between 0 and 15, specifies which pitch to change. The second argument, between 0 and 127, specifies the new pitch value (60 is middle C).
The first four messages above take an argument in order to work with controller buttons that send a 1 when pressed and a 0 when released.
If you don’t have control over OSC addresses of the messages your controller sends, I recommend the excellent OSCulator, which you can use to route any OSC message to another.
OSCulator and Tiction
I’ve received a number of questions asking for more clarification on getting Tiction to work with OSCulator. Here’s how I set up OSCulator to use route messages from TouchOSC on the iPhone to Tiction. Hopefully it will illuminate some common issues:
- I set TouchOSC to send messages on port 9000, so in OSCulator I set 9000 as the “OSC Input Port”. Once that’s set, I can move things around in TouchOSC and any new messages show up in OSCulator automatically.
- If you can get messages to show up in OSCulator’s “Message” column, you should be in business. Select a message, and under “Event Type” select “OSC Routing.”
- In the “Value” column, select “New…”. This brings up the Parameters pane. Make sure you’re in the “OSC hosts” tab and click the little “+” at the bottom. You should now have a line with “localhost” as the Host.
- Set the “Port” field to the port number that Tiction is listening on. Tiction’s default is 8000.
- Now double-click the “Rewrite Address” column. This brings up a window where you can specify the re-routed message. In “Target OSC address”, enter one of the messages Tiction understands. For example, “/tiction/nextnode” (without quotes).
- Here’s the tricky part, and it’s where many people experience problems. Since “/tiction/nextnode” expects an integer argument (that is, you can’t just send Tiction the message “/tiction/nextnode”, you have to send it “/tiction/nextnode 1″), you’ll have to make sure that the rewrite address includes that integer. When you initially press a button, OSCulator receives a “/1/push1 1″ or something like that, and when you release the button, it’ll receive something like “/1/push1 0″. So you want the “Target arguments” box to have the “<all args>” object in it. This will pass along that 0 or 1 to Tiction, as it’s expecting. Basically you just have to make sure that the message is getting passed along with that integer argument (1 or anything non-zero for the message to have any effect).
- Close the window, click OK, and test it out.
Work in progress / Planned features
Work in progress
- Improved OSC support
New to version 0.3.0
Tiction v0.3.0 adds support for OpenSoundControl (OSC). Now you can trigger and move nodes, start and stop the sequencer, and sync to an external source, all over a network with OSC. This lets you control Tiction with practically anything, including the iPhone/iPod Touch (using TouchOSC, Mrmr, or OSCemote, for example), Pd, Max/MSP, or pretty much anything else you can dream of. The ability to send OSC messages from Tiction is coming soon. See OSC and Tiction (below) for more information.
The ability to save files and open them later means you can hang on to that amazing patch you set up.
You can now globally disable the physical actions. This prevents nodes from moving around when triggered.
The background now subtly pulses to indicate which pitch was triggered. You can turn this off by setting the “bar brightness” slider to 0.
The Tiction window is no longer inverted, meaning the top of the window corresponds to higher pitch/velocity/CC values.
A number of other bugs were fixed, including one that didn’t preserve the source of a node’s note velocity.
Screenshots / Videos
Controlling Tiction v0.3.0 with OSC from Hans Kuder on Vimeo.
(The above video shows an earlier version of Tiction – new videos will be up shortly)
Older Versions
Tiction v0.3.0
Tiction v0.2.1
Tiction v0.2.0
Tiction v0.1a
Tiction is made with Processing.



