Posts Tagged ‘ pucktronix

Sketches for new Pucktronix project

image

Schematics for the new pucktronix magix device.

pucktronix.magix complex lfo diagram

“DIY Hybrid Analog/Digital Modular Synthesis” – NIME 2012 Paper

Here’s the paper I had published in the proceedings at NIME this year, titled “DIY Hybrid Analog/Digital Modular Synthesis.” It covers the first three Pucktronix devices and a bit about my performance practice using this custom hardware. I presented a poster on the subject as well, and will post that soon.

Also, here are some photographs of my recent performance (05.26.2012) at Mariposa, a cool artists’ residence/live-work space in Tijuana, Mexico.

Setting up.

During performance.

patch[04242012] – modular synth / laptop improvisation

Rehearsal for California Electronic Music Exchange Concerts on 4.27.2012 and 4.28.2012

Using custom hardware (pucktronix tabulaRasa and snake.corral, etc) and software – http://www.gregsurges.com/

News – 4/21/2012

Some news:

  • My short paper “DIY Hybrid Analog/Digital Modular Synthesis” – which covers the USB-Octomod, tabulaRasa, and snake.corral –  has been accepted for NIME 2012, and I will present a poster version at the conference. The conference runs from May 21 – 23, in Ann Arbor, MI.
  • I will perform 4/27 at UCSD and 4/28 as part of the California Electronic Music Exchange Concert series.
  • Finally, I’ve started posting some live coding videos:

tabulaRasa user demos

Here are two new tabulaRasa demos:

From Clarke Robinson (who designed the panel in the video), using a set of vocal waveforms, no effects:

From Greg Davis, using tables composed of mixed harmonically-related sinusoids, through a filter, and a delay:

pucktronix.snake.corral python interface

Here’s a Python script which interfaces between OSC and the pucktronix.snake.corral. It’s a work-in-progress, but allows you to toggle individual switches via OSC. You can download the source here: https://bitbucket.org/pucktronix/pucktronix.snake.corral/src/3e9b712971df/control_software/pySnakeCorral.py

 1 __author__ = 'Greg Surges'
 2 
 3 '''
 4     pySnakeCorral.py
 5     interface between OSC messages and pucktronix.snake.corrral hardware
 6     created 08.18.2011
 7     last modified 03.26.2012
 8     greg surges - pucktronix
 9     surgesg@gmail.com
10     http://www.gregsurges.com/
11 '''
12 
13 import OSC
14 import threading
15 import serial
16 from serial.tools.list_ports import comports
17 import time
18 
19 ThreadRun = True
20 
21 address = '127.0.0.1', 9999
22 server = OSC.OSCServer(address)
23 
24 print "Server Initialized..."
25 print "Listening on Port: " + str(address[1])
26 
27 server.addDefaultHandlers()
28 
29 ser = serial.Serial()
30 
31 def init_port():
32         ''' poll serial ports, prompt user for port, open port '''
33         ports = comports()
34         for i, port in enumerate(ports):
35                 print "[" + str(i) + "]" + " " + port[0]
36         port_choice = input("select serial port: ")
37         ser.baudrate = 19200
38         ser.port = ports[port_choice][0]
39         ser.open()
40         if ser.isOpen(): print "opened serial port"
41 
42 def write_bytes(bytes):
43         ''' write bytes to serial port corresponding to a single pin being toggled '''
44         ser.write(bytes)
45 
46 init_port()
47 
48 def print_msg(addr, tags, stuff, source):
49         ''' just print out received data '''
50         print "---"
51         print "received new osc msg from %s" % OSC.getUrlStr(source)
52         print "with addr : %s" % addr
53         print "typetags %s" % tags
54         print "data %s" % stuff
55         print "---"
56 
57 def pin_msg(addr, tags, stuff, source):
58         ''' toggle a single pin on/off '''
59         # osc message should look like "/matrix/one x y state" to match max 
60         if addr == '/matrix/one': chip_byte = 255
61         if addr == '/matrix/two': chip_byte = 254
62         x = stuff[0]
63         y = stuff[1]
64         state = stuff[2]
65         # print chip_byte, x, y, state
66         bytes = ''.join([chr(i) for i in [chip_byte, x, y, state]])
67         write_bytes(bytes)
68 
69 server.addMsgHandler("/print", print_msg) # adding our function
70 server.addMsgHandler("/matrix/one", pin_msg) # add msgs for matrix one 
71 server.addMsgHandler("/matrix/two", pin_msg) # add msgs for matrix two 
72 
73 def osc_process():
74         while ThreadRun:
75                 server.serve_forever
76         print "Stopping OSCServer Thread"
77 
78 
79 print "\nStarting OSCServer. Use ctrl-C to quit."
80 st = threading.Thread( target = osc_process)
81 st.start()
82 
83 try:
84         while 1:
85                 time.sleep(5)
86 except KeyboardInterrupt:
87         ThreadRun = False
88         server.close()


Modular/Laptop Rehearsal 03082012


Some rehearsal sketches for an upcoming performance. I’m using my custom modular system with a mixing/delay Max patch, routed through the pucktronix.snake.corral. There’s also a grid button and fader controller in there. Here’s the setup, minus the midi controller:

 

pucktronix.snake.corral software and interface

This is a revamped interface screenshot for the snake.corral.

Download the beta.

from the readme file:

pucktronix.snake.corral

readme.txt
last modified 02.26.2012

software, text, and images copyright 2012
greg surges
surgesg@gmail.com

http://www.gregsurges.com/

pucktronix.snake.corral is a computer-controlled dual 8 x 8 analog signal routing matrix.
Two independent matrices are presented, each with 8 inputs and 8 outputs. Within each matrix,
any input (or summed combination of inputs) can be routed to any output. The device can switch
and route any type of analog signal within the range of +/- 5V. The main electronic components
of the pucktronix.snake.corral are a Teensy 2.0 and a pair of Zarlink MT8816 analog switching
matrix ICs. The MT8816 is a bidirectional 8 x 16 matrix with minimal signal bleed.
Like the USB-Octomod, the pucktronix.snake.corral is powered from the USB bus.

A Max/MSP patch which allows the user to define and switch between presets and/or
apply various algorithmic rhythmic effects to the switching matrices has also been developed.

Using the pucktronix.snake.corral, a modest number of synthesis modules can be used
to create interesting rhythmic and timbral variety. The ability to rapidly switch or
reconfigure a large number of signal connections enables a level of rhythmic complexity
which is difficult to obtain through other means. Sharp cuts between disparate types
of musical material are made possible, and patches can be stored and quickly recalled.

The software is available in two forms, a Max 6 collective which can be run using the free
Max 6 runtime software available from cycling74.com, and a standalone application. Currently,
the standalone is OS X only, but hopefully a volunteer can help compile it for Windows.

On loading the software, the user is presented with two sets of matrix controls and a set of
serial port controls. The first thing to do is to select the serial port which the snake.corral
device is plugged into, and then click the “open serial” button.

Matrix connections can be made by clicking cells on the large matrices. If desired, a configuration
can be saved as a preset by shift-clicking one of the preset slot circles to the right of each matrix.A preset can be recalled by clicking a circle.

Below the preset selection buttons are a pair of buttons, one for clearing the matrix, and one for
setting up a random automation configuration. The two number boxes below select low and high range
limits for the automation timing.

Finally, to the far right of each matrix is a rhythmic automation interface. By selecting one of the
tabs labeled “sinusoid”, “periodic”, “random”, or “pucklet”, the user can then toggle a given
cell to toggle itself on/off with the corresponding rhythmic type. The number box below selects a
relevant time value for each automation type.

Please contact me with suggestions or questions.

Simulating a Spring Reverb in C++

Recently, I implemented a spring reverb simulator VST in C++. The plugin was created for an assignment in Miller Puckette’s “The Vibrating Body” seminar at UCSD.

We’d been talking about mass-spring systems and resonators, so I decided to use a bank of parallel resonant filters to simulate the springs.

I implemented a Resonator class, following Robert Bristow-Johnson’s biquad formula for a resonant LPF [1]. Each resonator tends to ring at a particular frequency, and the impulse response looks like a decaying sinusoid.

By combining a few hundred of those simple resonators, each resonating at a different frequency and driven with a complex sound, you can approximate the sound of a spring reverb.

Here’s the Resonator implementation file – the rest of the plugin source is on the bitbucket page linked below:

[1] http://www.musicdsp.org/files/Audio-EQ-Cookbook.txt