Provided by: python-numm_0.5-1_all bug

NAME

       one bit instrument - how to make a gnarly synth with numm-run

SYNOPSIS

       numm-run FILE

DESCRIPTION

       In  this tutorial we will learn how to live-code a one-bit synthesizer controlled by mouse
       position.  It is intended as a gentle introduction to development with numm-run.

       To get started, create a text file with the following method stubs:

              def audio_out(a):
                  pass
              def video_out(a):
                  pass

       Save the file as onebit.py, and then launch it with numm-run:

              numm-run onebit.py

       You should see a blank window appear.  We will now make some sound and light  by  changing
       the value of a in the audio_out and video_out functions:

              def audio_out(a):
                  a[::100] = 2**15
              def video_out(a):
                  a.flat[::100] = 255

       Save  the  file,  and  you  should  see and hear the sketch update.  This is using numpy's
       array-indexing to turn every hundredth audio sample and pixel-color on.  The audio  sample
       rate  is by default 44100Hz, so it produces a series of clicks that will be perceived as a
       441Hz tone.  We can turn this into an instrument by connecting mouse motion to frequency:

              period = 100
              def audio_out(a):
                  a[::period] = 2**15
              def video_out(a):
                  a.flat[::period] = 255
              def mouse_in(type,px,py,button):
                  global period
                  period = px*1000

       Finally, let's use the keyboard to record and jump to notes.  The first time you  press  a
       key, it records the period, and subsequant depressions play the saved period:

              period = 100
              record = {}
              def audio_out(a):
                  a[::period] = 2**15
              def video_out(a):
                  a.flat[::period] = 255
              def mouse_in(type,px,py,button):
                  global period
                  period = px*1000
              def keyboard_in(type,key):
                  global period
                  if record.has_key(key):
                      period = record[key]
                  elif record.has_key(key):
                      record[] = period

SEE ALSO

       numm-run(1), numm.getting-started(7), numm.spectral-analysis(7)