Dancing with Ruby

As the Praxis Team grapples with the necessity of making decisions (difficult decisions!) about our priorities when it comes to creating at tangible product between now and May, I continue to find new uses for Ruby in my own non-Prism-related work.

Last week a choreographer friend asked for help with a problem that came up in her rehearsal last week for our new project. She had devised a system of textual instructions to guide a dance improvisation. This meant that in rehearsal one of the dancers would have to sit out and play the role of reading the instructions. Her system was a chance procedure, so it had already occurred to her that it might be possible to record the instructions one by one and place the soundfiles in a shuffled iTunes playlist. But she wanted another level of organization as well: an instruction drawn at random from one of three categories in sequence. A random instruction from the first category, another random selection from the second category, one from the third, then back to the first category, and so on. She had seen me whip up Max Patches to shuffle soundfiles in various ways and wondered if I could do something like that for this case.

Using Ruby’s ability to execute shell commands, and the CLI for Mac’s speech synthesizer, I was able to come up with a solution that didn’t require recording all of the instructions.

require "csv"
adjectives_file = "adjectives.csv"
pause = 5

adj = CSV.read(
:headers => true,
:header_converters => :symbol

adj_by_cat = {}

adj.each do |a|
if adj_by_cat[a[:category]].nil?
adj_by_cat[a[:category]] = []
adj_by_cat[a[:category]].push a[:adjective]

20.times do
adj_by_cat.each do |cat, adjs|
cmd = “say “#{adjs.shuffle.pop}”; sleep #{pause};”
#puts cmd
%x( #{cmd} )

This little script reads in the instructions (organized into categories in a CSV file) and speaks them in a synthesized voice like this. Fun, right?

Chris Peck is a composer/performer whose work has been presented extensively around the US and internationally. His works involving collaboration with contemporary dance, audience participation, various mixtures of trained and “untrained” performers, and site specificity have been performed at the Venice Biennale, Performa, ImPulsTanz, Improvised and Otherwise, The Whitney Museum, and The Kitchen, and reviewed…

Comments are closed.