Difference between revisions of "SLOrk/Instruments/Permutations"

From CCRMA Wiki
Jump to: navigation, search
(Optimizing Performance)
Line 128: Line 128:
Save the file and close it.
Save the file and close it.
Finally, click on "Start Virtual Machine," and click "add shred" once for each of the two files that are still open. Hit the "`" (tilde) key to start making sound. Now you can play the instrument following the "How to Play instructions on the wiki."
Finally, click on "Start Virtual Machine," and click "add shred" once for each of the two files that are still open. Hit the "`" (tilde) key to start making sound. Now you can play the instrument (beginners, see the "How to Play" section of this page).
==Related Projects==
==Related Projects==

Revision as of 22:17, 9 May 2009

by J3 (Jason Riggs, Jacob Shenker, and Jay Bhat)



This instrument works by displaying a GUI (shown at top of page) through which the slorker plays with algorithms for note-playback. Extensive real-time controls affect the texture and rhythm of the sound.

How to Play

Keyboard Controls

The keyboard primarily controls the shape of the sound.

"[" and "]" change the timbre of the sound. "[" scrolls down through the list of timbres, while "]" scrolls up. As you scroll upward, the sound becomes more harmonically rich.

"<-" and "->" (arrow keys) change the register (in octaves).

"-^" and "-v" (arrow keys) increase and decrease tempo.

"1, 2, ... 9, 0" (digits) set the amplitude envelope of the notes. The digits are arranged in a logical progression such that the sound becomes less percussive and more fluid/pad-like as the digits move to the right.

Trackpad Controls (hold "." to activate!)

IMPORTANT: For the following trackpad commands to be active, you must be holding down the "." key.

X-axis: Traversing the x-axis sweeps a low-pass filter with a moderate resonance.

Y-axis: Traversing the y-axis detunes the pitch slightly around its base frequency.

GUI Controls

The GUI is controlled through clicks (with optional keyboard shortcuts).

Click on a square: Swaps the value in that square with the value in the square immediately to its right.

" " (spacebar) or clicking "next note" plays the next note in the sequence.

"`" (tildé) or clicking "play" sets the GUI to loop through the sequence.

Score/Performance Ideas

Jot down any ideas for a performance or its score here. Possible issues to consider:

1) The role of the conductor (which gestures? use a computer to spread information? control other players' sounds directly?)

2) The format of the score (gestures alone? hold up signs? server-based instructions sent to each player?)

3) Improvisation (to what extent should it be allowed? in what way(s)?)

4) Number of players (how many total? should they be split into sections? how many sections? should sections be fixed before the piece, or should we allow 'dynamic section allocation'? or both?)

List of Score/Performance Ideas

Conductor-controlled timbre w/ Server-based tone selection

A master server runs and controls the tonal evolution of the piece. As the piece transitions from one stage to the next, performers will see their GUIs transition from one set of permutations to another. The conductor can control parameters of the sound such as texture, density, etc., and performers are also left to improvise. The server can fade the piece away by itself when the score is over. Also, the conductor could be given high-level, real-time control over the messages that the server is sending out. The conductor could even have a midi controller and use it to send out permutations in a more spontaneous way. That could sound cool.

People should solo

Everyone not soloing is instructed to hold a certain texture, while the soloist improvises. In a large performance, this means that one computer should be up front and center, and soloists alternate by going up to the front laptop.

Known Bugs

Priority 1 (Absolutely needs to be fixed asap):

- Display registers in octaves rather than basenotes (notation-wise)

Priority 2 (Would make the instrument run more smoothly/efficiently):

- We can make the instrument able to handle more of a payload by eliminating MAUI entirely and using command-line Chuck to run it. This means that we need to use a different GUI (probably an altered version of the Gamelan-Taiko-Fusion GUI) via OSC messages from the command-line version.

Priority 3 (Minor issues):

- Right now, the resonance on the low-pass filter causes slight distortion around the fundamental frequency of any given note. There should be a linear function on the resonance so that the amount of resonance decreases as the filter opens up.


Priority 1 (Should be in there asap):

- A button on the keyboard should play sound as long as it's held down, in addition to the toggle (tilde) currently in the code.

- Holding "g" and using the x-axis of the trackpad should control master gain. Likewise, holding "r" and using the x-axis of the trackpad should control reverb mix.

Priority 2 (Would definitely be nice):

- The list of available timbres should be expanded, and those currently in place should be improved.

- It would be nice if the conductor could control the master tempo in real time, thus adjusting all of the machines' tempos at once on a continuous scale.

Priority 3 (Might consider experimenting with):

- Timbre selection does not need to be discrete. We could experiment with a slider.

- It might be worth experimenting with a Joystick for the x/y-axis control of the filter/detuning. It would be set up so that the trigger on the joystick needs to be held in order for the detuning (y-axis) to have any effect, while the filter (x-axis) would always have effect. The little circle thingy at the base makes a good way to control master volume as well. The joystick might make more sense than the touchpad, but the con is that everyone who's playing needs a joystick. Maybe we could have it use the joystick if one is plugged in and otherwise default to the trackpad.


Here is the set of chuck files. Set the miniAudicle's root path to a directory containing these files, and then simply add permutations.ck. Only one machine should add the server.


Optimizing Performance

Rather than opening the entire piece in the miniAudicle, you can also download the command-line version of ChucK (http://chuck.stanford.edu). Then, you can run the sound-generating portion of the code from the command line while running the interactive portion within miniAudicle (sadly, you cannot run the GUI from the command line). It will boost performance by around 150%, and it's much more stable, so it's a good idea if possible. Here's what to do:

In your terminal, navigate to the permutations folder you get off of the wiki. Now, type "chuck --probe". This shows the list of all possible audio interfaces connected to your computer. Find the one you would like by id number, and then remember that number. Let's say that the number is "4".

In a command line, enter the following: chuck -c2 --dac4 class/supersaw.ck scripts/client_main_loop.ck

(where the "4" in --dac4 is your number)

This will begin running the sound portion of the code.

Now, open up the miniAudicle. Go to preferences and click the "miscellaneous" tab. Set the file path to the permutations folder you unzipped. Click OK.

Still in the miniAudicle, go to file --> open, and open the following three files from the permutations folder:

permutations_server.ck scripts/server_main_loop.ck class/gui.ck

Inside the "server_main_loop" window, look at line 11 of the code and make sure that it reads ["localhost"] @=> string clients[];

Save the file and close it.

Finally, click on "Start Virtual Machine," and click "add shred" once for each of the two files that are still open. Hit the "`" (tilde) key to start making sound. Now you can play the instrument (beginners, see the "How to Play" section of this page).

Related Projects

This permutations project was created out of a merging of three prior projects.

Jason's Supersaw project is located here: Supersaw

Jacob's Permutations code is located here: permutations_original.ck

Jay's Arpeggiator code is located here: arpeggiator.ck