icube - a Linux editor/controller for the ICubeX

Paul Barton-Davis, Summer/Fall 2000

The Infusion Systems ICubeX is a digitizer that can be used to convert analog sensor data into a MIDI data stream.

The ICubeX can be used in "Host" mode, where a computer recieves the sensor values via MIDI System Exclusive messages and does its own processing (and output) based on the sensor data. It can also be used in "Standalone" mode, where a computer is used to configure the digitizer, after which it can be unplugged from its connection to the computer, and will do the mapping of sensor inputs to MIDI data by itself.

icube is a relatively small application for Linux that allows ICubeX users to program their digitizers from within Linux, and also acts as a sensor->MIDI mapping program.

Current Status

icube is a functioning program that can be used with an ICubeX. It currently only works in "Host" mode - it cannot be used to program the digitizer for "Standalone" use (this will hopefully work very soon). It can map sensor data into NoteOn/NoteOff, Program Change, Controller, PitchBend, Channel Pressure and Polyphonic Pressure messages. The NoteOn mode includes 3 variants: simple noteOn/noteOff based on a sensor threshold, noteOnWithPressure, in which sensor changes after a note is turned on but before its turned off are converted to channel pressure messages, and noteOnToggle, in which a noteOn is sent when the sensor first exceeds a threshold, and turned off the next time it exceeds (not crosses) that threshold.

That said, its also a very new program. There is a thread related bug during startup that will not arise if run under gdb, making it hard to track down. I am sure there are other problems too. If you are not a C++ programmer, ICube is quite likely to be more hassle than its worth right now.


September 25th, 2000
Fixes and improvements to note on/off handling

It turned out that I had a poor design for handling note-on/note off mappings that led to poor performance "feel". This has been dramatically improved. There were also some other small bugfixes.

I am trying to design a mapping system that would allow the various FSR sensors (touch, mini-touch, etc.) to be used as switches with set-and-stay-set behaviour rather than the current "return to zero" when all pressure/tension/flex is removed.

July 26th, 2000
New mapping functions:
send NoteOn when sensor channel value first exceeds the threshold, and NoteOff when it next exceeds the threshold.
send NoteOn when sensor channel value first exceeds the threshold, then send ChannelPressure ("AfterTouch") messages using sensor channel value until it drops below the threshold again.

Plus, numerous bug fixes, trace-output variable added to the config file, invert button and midichannel controls now operational.


icube is currently available as a tarball (.tar.gz) file, in the same state that you'd end up with if you were using CVS.

I intend to try to reduce the library dependencies in the near future. Its not right that such a simple program should have so many dependencies.

You will need a set of my usual audio+MIDI development libraries, available (at this time, only via CVS) from the Quasimodo website. Specifically, you will need:

You will also need libsigc++ and Gtk-- installed, which are both available via the Gtk-- website, and Guile, available from many sources. The build process relies on the usual set of GNU build tools: automake, configure, libtool and friends.


Assuming that you have the libraries all built and installed as described on the Quasimodo website, its easy to build icube:

      % sh ./
      % ./configure
      % make
      % make install-guileDATA 
      % make install (optional)


The future

The program has lots of development left, but even now, it has enabled me to use my ICubeX with Linux without having to use jMax, which was the only other option. I have nothing against jMax, its just not quite the right environment for what I am using my ICubeX for. Come back and visit the webpage after September 5th, 2000, and see what's going on.

Paul Barton-Davis