/trackpad_synth

Make music with a macbook trackpad

Primary LanguageC

Trackpad synth
==============

Program to generate SKINI or MIDI data from a macbook trackpad.


Binary Installation (use this if you're not sure)
-------------------------------------------------

Download the disk image for snow leopard (10.6):

  https://github.com/downloads/jeffkaufman/trackpad_synth/multitouch_midi_v1.dmg

Open it, drag to applications.  Double click on it to run.

You need something to turn my program's midi signals into sound.
SimpleSynth is good:

    http://notahat.com/simplesynth

Download, install, run.  Once it's running, select "touchpad" under
"MIDI Source" and you should hear this play!


Source Installation
-------------------

Choose either MIDI, SKINI, or Octaveless output.  MIDI lets you choose from more and
better voices, SKINI lets you write new voices with the stanford toolkit, Octaveless
doesn't have octaves.


  MIDI
  ----

See the note on SimpleSynth above.


  SKINI
  -----

Get a SKINI reader.  I've been using the Standford Synthesis Toolkit.
You can download it from:

  http://ccrma.stanford.edu/software/stk/release/stk-4.4.2.tar.gz

Unzip it, run "./configure" and "make" in the stk directory.

Check that it's working:

  cat stk-4.4.2/projects/demo/scores/test.ski | stk-4.4.2/projects/demo/demo Clarinet -or -ip

You should hear something.

Put the stk folder paralell to our test.m and Makefile.


  Octaveless
  ----------

Get octaveless from:

   https://github.com/jeffkaufman/octaveless

Build it (requires port audio) and check that it works as:

   gcc -o octaveless octaveless.c -lportaudio -Wall
   echo A | ./octaveless

You should hear something; kill it with Ctrl+C.

Copy the octaveless binary to this directory

  cp /path/to/octaveless .


Once you have MIDI, SKINI, or Octaveless working, in this directory run one of:

  # for midi
  make
  ./trackcontroller [options]

  # for skini
  make runskini

  # for octaveless
  make runoctaveless

  # for midi, simple
  just double click on the trackcontrol command line program



Kill it with control C when you're done.  It puts midi on channel 3,
so that's the one you'd twiddle settings for.  Options are:

Usage: trackcontroller [options]

Options:
  -k [KEY]  Play in the given key.  Allowable keys are
            'A'-'G' followed by an optional '#' or 'b'.
            Default is D.
  -H        Harmonic minor mode
  -r        Relative/natural minor mode
  -x        Mixolidian mode
  -K        A Klezmer mode (flat 2, sharp 6)
  -5        Pentatonic scale
  -C [nnn]  Specify scale (ex: '024579B')
  -S        Send SKINI to stdout instead of MIDI from a
            virtual source.
  -V        Use the far left of the controller as a
            volume control.
  -o [N]    Divide the trackpad vertically into this many
            octaves.  Default is 5.
  -s [N]    Octave Shift: how far down to shift from the
            top of our range.  Default is 3.
  -v        Use velocity.  When pressing keys, set midi
            velocity to the finger width detected on the
            trackpad.
  -a        Send aftertouch midi messages based on how fat
            each finger is
  -c [N]    Send on channel N.  Default is 3.
  -p        Send channel pressure messages based on how fat
            all the fingers are on average,
  -P        Fake channel pressure using volume instead.
  -h        Print this usage.

(run "./trackcontroller -h" for the most up to date usage info)

Usage
-----

There are 5 rows (-o option) each of which has a major scale (change
'scale') of 7 notes.  It's polyphonic, so move your fingers around.
If using midi output, it can do velocity, aftertouch, channel
pressure, and a kind of faking channel pressure by setting the volume,
all depending on how much of your finger is in contact with the pad
(and if your midi synthesizer supports it).  These are off be default
and can be enabled with the -v, -a, -p, or -P options.

If you don't want a major scale, the -h, -r, -x, and -K options choose
other scales; see above.  You can also specify arbitrary scales with
-C.  The format is:

  ./trackcontroller -k C -C 0123456789AB

This would make a fully chromatic trackpad starting on C (with even
divisions).  To leave notes out, don't include their numbers:

  ./trackcontroller -k C -C 024579B

This would include the notes of the major scale.  You can make
sections wider by repeating them:

  ./trackcontroller -k C -C 0057

This would divide the pad with the left half sounding 'C' and the
right half divided into 'F' and 'G'.

Misc
----

Started with multitouch code from:
  http://www.steike.com/code/multitouch/

For writing midi output I used the source of vmpk as a guide:
  http://vmpk.sourceforge.net/

All code gpl