Difference between revisions of "SLOrk/Instruments/Permutations"

From CCRMA Wiki
Jump to: navigation, search
(Priority 1 (Absolutely needs to be fixed asap):)
(June 4, 2009 - SLOrk Concert in Dinkelspiel)
 
(42 intermediate revisions by 3 users not shown)
Line 1: Line 1:
 
by J3 (Jason Riggs, Jacob Shenker, and Jay Bhat)
 
by J3 (Jason Riggs, Jacob Shenker, and Jay Bhat)
  
[[Image:permutations.png]]
+
[[Image:permutations2.png]]
  
 
==Overview==
 
==Overview==
  
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.
+
This instrument works by displaying a GUI (shown at top of page) through which the slorker interacts with a score constructed of nested epicycles, producing pitches triggered in a server-synchronized or metrically-free manner. Extensive real-time controls affect the sound generated by the pitches.
  
==How to Play==
+
==Live Performances==
 +
 +
===May 9, 2009 - SLOrktastic Chamber Music I @ The CCRMA Stage===
  
===Keyboard Controls===
+
Recording: [http://slork.stanford.edu/listen/2009/slorktastic/permutations.mp3 permutations1.mp3] ([http://slork.stanford.edu/listen/2009/slorktastic/aiff/one/7.aiff aiff])
  
The keyboard primarily controls the shape of the sound.
+
Code used: [http://ccrma.stanford.edu/~jnriggs/Slork/permutations/permutations_first_performance.zip permutations1.zip]
  
"[" 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.
+
===May 16, 2009 - SLOrktastic Chamber Music II @ The CCRMA Stage===
  
"<-" and "->" (arrow keys) change the register (in octaves).
+
Recording: [http://slork.stanford.edu/listen/2009/slorktastic/permutations2.mp3 permutations2.mp3] ([http://slork.stanford.edu/listen/2009/slorktastic/aiff/two/5.aiff aiff])
  
"-^" and "-v" (arrow keys) increase and decrease tempo.
+
Code used: [http://ccrma.stanford.edu/~jnriggs/Slork/permutations/permutations_second_performance.zip permutations2.zip]
  
"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.
+
===June 4, 2009 - SLOrk Concert in Dinkelspiel===
  
===Trackpad Controls (hold "." to activate!)===
+
Recording: coming soon
  
IMPORTANT: For the following trackpad commands to be active, you must be holding down the "." key.
+
Code Used: coming soon
  
X-axis: Traversing the x-axis sweeps a low-pass filter with a moderate resonance.
+
==How to Play==
  
Y-axis: Traversing the y-axis detunes the pitch slightly around its base frequency.
+
===Running===
 +
Grab the latest code (above, for the May 16th performance).
  
===GUI Controls===
+
On the server machine, add the appropriate hostnames to line 11 in <code>scripts/server_main_loop.ck</code>, then double-click <code>bin/permutations-server</code>.
  
The GUI is controlled through clicks (with optional keyboard shortcuts).
+
On each client, double-click <code>bin/permutations-gui</code>, <code>bin/permutations-sampler</code>, <code>bin/permutations-supersaw</code>, <code>bin/permutations-osc</code>, and add the shred in the miniAudicle window that appears.
  
Click on a square: Swaps the value in that square with the value in the square immediately to its right.
+
===Performance Paradigm===
 +
The GUI displays a series of rows of boxes, each box corresponding to an relative interval. The blue LEDs indicate the current location of the beat in each of the rows. Depending on the keys one has pressed, the beat will either be advanced by the server, or will be advanced manually. A note is played every time the beat is advanced corresponding to the sum of the relative intervals with respect to middle C. Note that while the internal representation of the intervals are relative intervals in semitones (as integers, in the array <code>int rows[][]</code>), there are many display modes that will show effective notes (i.e., summing the intervals from middle C) and other information.
  
" " (spacebar) or clicking "next note" plays the next note in the sequence.
+
Sections are presets of row configurations. While rows can be different sizes, corresponding rows of each section must be the same size. Selecting a section and modifying it will change the section, such that re-selecting the section will not revert to the original configuration.
  
"`" (tildé) or clicking "play" sets the GUI to loop through the sequence.
+
The various timbres control the mechanism for sound generation, and there are many keyboard and trackpad controls for modifying the sound.
  
==Sweet Spots==
+
===Keyboard Controls===
  
If you are playing around with the instrument and you come across a sound texture that works well, it belongs in this sweet spot list. A large collection of sweet spots can be a good way to craft an entire score by aiming for the spots as midway-marks and finding creative, coherent ways to transition between them. Sweet spots should be given in the following format:
+
Selecting timbre, envelopes, or sections is possible by holding down "t", "e", or "s", respectively, and pressing number keys "1"-"9", "0" to select the parameter values 1-10. Holding down shift when pressing a number key accesses the second bank, 11-20. (i.e., to select envelope 11, press shift+e+1)
  
'''(title of sweet spot):'''
+
With the stock configuration, the lowest-numbered envelopes are the shortest and most percussive, while envelopes 6-9 are pads of increasing length. One can add up to 20 different envelopes and sections by modifying the code (in <code>gui.ck</code>, an array of ADSR vectors on lines 52-61, and the rows for each section on lines 85-90). Adding more timbres is also possible, but will remain undocumented for the time being (feel free to contact the authors for instructions). As configured currently, timbre 1 is a supersine, 2 is a supertriangle, 3 is a supersquare, and 4 is a supersaw oscillator bank. Timbres 5-11 are samples, listed on lines 127-136 in <code>sampler.ck</code>.
 +
{|
 +
! Timbre !! Sound/Sample
 +
|-
 +
| 1 || supersine
 +
|-
 +
| 2 || supertriangle
 +
|-
 +
| 3 || supersquare
 +
|-
 +
| 4 || supersaw
 +
|-
 +
| 5 || <code>data/bell.aif</code>
 +
|-
 +
| 6 || <code>data/toy_piano.aif</code>
 +
|-
 +
| 7 || <code>data/glockenspiel.aif</code>
 +
|-
 +
| 8 || <code>data/clarinet.aif</code>
 +
|-
 +
| 9 || <code>data/kalimba.aif</code>
 +
|-
 +
| 10 || <code>data/xylophone.aif</code>
 +
|-
 +
| 11 || <code>data/piano.aif</code>
 +
|}
  
Timbre: (# of timbre)
+
The stock configuration has four sections, corresponding to the tonic, subdominant, dominant, and supertonic major triads of C major.
  
Register: (# of register)
+
Additionally, holding down "t", "e", or "s" and pressing "[" or "]" will scroll though the available parameter values, wrapping around (i.e., if you are on timbre 0, pressing "[" will go to the highest-numbered timbre available).
  
Envelope: (# of digit selected)
+
Without holding down "t", "e", or "s", the number keys default to changing envelope, and "["/"]" default to changing timbre.
  
Filter: (closed/midway/open)
+
Holding down "i", "j", "k", or "l" while pressing up or down arrow keys modify attack, decay, sustain, and release parameters, respectively, for the ADSR envelope. Selecting an envelope (with number keys or "["/"]") clears the modifications one has made to it (e.g., if I press 2, I'll play with envelope 2, then if I hold down "i" and press down arrow twice, it'll play with my modified envelope. Pressing 2 again will reset the ADSR to the original envelope 2).
  
Detuning: (none/low/medium/high)
+
"<-" and "->" (arrow keys) change the register (in octaves). Holding down shift modifies the register (basenote) in semitones (100 cents), holding down apple does the same in quartertones (50 cents), and shift+apple does so by an eighth-tone (25 cents).
  
Tempo: (value of tempo in console)
+
"-^" and "-v" (arrow keys) double and halve the tempo, respectively. Holding down shift does so by factors of 3, apple does so by factors of 5, and shift+apple does so by factors of 7. (i.e., to reach an 7:8 polyrhythm from a tempo of 8, press down arrow three times [reaching a tempo of 1] then press shift+apple+up once [to get a tempo of 7]). Note that in the current implementation, one should only have integer tempos (although this restriction is ''not enforced!''); press "escape" to return to the nearest power of 2. Polyrhythm support and robust synchronization will be added in a future version.
  
===The Sweet Spot List===
+
===Trackpad Controls===
  
'''Eerie Triangle Pads:'''
+
With "." held down:
 +
X-axis: controls the cutoff frequency of a low-pass filter
 +
Y-axis: For the oscillator timbres (0-3), traversing the y-axis detunes the pitch slightly around its base frequency. For the sampled timbres  (3-11), traversing the y-axis increases the resonance of the low-pass filter.
  
Timbre: 1
+
With "g" held down:
 +
X-axis: controls gain
  
Register: 4 or 5
+
With "r" held down:
 +
X-axis: controls mix of reverb
  
Envelope: 9
+
===GUI Controls===
 +
 
 +
The GUI contains a grid of boxes with associated LEDs that display the current location of the beat. The beat will advance the top row. Every time the one row's location reaches the end and wraps back to the beginning, the row below it advances by one. As such, the score can be considered a series of nested epicycles. The note that is triggered for every advancing of the top row is the sum of all the active boxes (where "active" means they correspond to the current location of the beat, displayed by blue LEDs). By default, there are three rows, the top row with 5 boxes, the second with 5, and the third with 3.
 +
 
 +
Pitche display is in Lilypond notation, so <code>'gis</code> would be the G-sharp an octave above middle C and <code>,,bes</code> would be the B-flat one octave below middle C (note: <code>,bes</code> is the note ''one semitone'' below <code>c</code>). The default format is for the top and bottom rows to display their absolute pitches (i.e., the note that would be triggered if they were active their row were the "top" row, so the notes in the top row really do display exactly what pitch would be triggered when the beat lands on them), and the second row to show the relative interval, e.g., if the current note on the middle row was displayed as <code>P4</code>, and the bottom note was <code>'d</code>, the current note on the top row would be <code>'g</code> (the D above middle C transposed up a fourth). This is all fully customizable by modifying the appropriate configuration parameters in <code>gui.ck</code> (again, until this is documented, please contact the authors). Note that intervals are always treated as "up", so an <code>M3</code> down would be displayed as <code>,m6</code> (where the comma indicates an octave down, then a minor sixth up) and <code>P8</code> would be displayed as <code>'P1</code>.
 +
 
 +
Clicking on a box swaps the value in that square with the value in the square immediately to its right (it wraps, so clicking on the last box will swap with the first). Holding down shift transposes the note ''up'' by a semitone, and holding down apple transposes the note ''down'' by a semitone. Holding down option does the same by an octave, control does the same by a perfect fifth, and control+option does so by a major third. Holding shift+apple and clicking a note will turn it into a rest (indicated by "r"), shift+apple+clicking again will turn it back to the original note. Note that a rest placed on an active (i.e., has a blue LED) note in a lower row will silence all notes while it remains active.
  
Filter: open
+
"`" (tilde) or clicking "play" sets the GUI to trigger note events when the beat is advanced.
 +
" " (spacebar) momentarily enables playing while it is held down, and disables playing when it is released (note: with tilde enabled, pressing spacebar will continue playing, and releasing it will 'stop' playing).
 +
"m", when held down, prevents the server beat from advancing the local beat.
 +
"n" advances the beat manually. This is best used by holding down "m", then tapping "n" to play a rhythm.
 +
"b", when held down, waits for the next server beat, advances once, and prevents subsequent server beats from advancing the local beat. This is best used by holding down "m" and "b", and is useful for playing an isolated note or notes together, like a sting at the end of a piece (esp. at a slow tempo).
  
Detuning: high
+
===Code Modification (how to add new tone rows, sections, and more)===
 +
TODO: talk about adding tone rows, sections, etc. This should be better once we clean up the code...
 +
TODO: describe the various row_format values
  
Tempo: 1.0
+
''For right now, please contact the authors for help with making changes to the code...''
  
 
==Score/Performance Ideas==
 
==Score/Performance Ideas==
Line 83: Line 128:
 
3) Improvisation (to what extent should it be allowed? in what way(s)?)
 
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? if split into sections, how many? should sections be fixed before the piece, or should we allow 'dynamic section allocation'? or both?)
+
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===
 
===List of Score/Performance Ideas===
Line 98: Line 143:
  
 
===Priority 1 (Absolutely needs to be fixed asap):===
 
===Priority 1 (Absolutely needs to be fixed asap):===
 
- Optimize code for efficiency. It can't handle a heavy payload, plus it needs to work on slork laptops. Slorktops.
 
  
 
===Priority 2 (Would make the instrument run more smoothly/efficiently):===
 
===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.
+
- 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 via OSC messages from the command-line version.
  
 
===Priority 3 (Minor issues):===
 
===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.
 
 
- It's hard to have fine-grained control over the low-pass filter's cutoff value when it's extremely low [20, 250] because it ramps down so quickly. It would be smart to put a power function on the low pass so that there's finer control towards the bottom and less fine control towards the top.
 
  
 
==Whiteboard==
 
==Whiteboard==
  
 
===Priority 1 (Should be in there asap):===
 
===Priority 1 (Should be in there asap):===
 
- A server needs to synchronize the machines to a master rhythmic meter. 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. (best to leave the players' tempos on a discrete scale so they can't get out of sync)
 
 
- Currently, all oscillators are sent out all channels (in function "playSound"). We should make it so that each time an oscillator is created, it gets randomly sent to one of the six channels. This is crucial to spatializing the sound.
 
 
- There should be a toggle that kills the sound. If pressed again, it resumes at the previous volume.
 
  
 
===Priority 2 (Would definitely be nice):===
 
===Priority 2 (Would definitely be nice):===
 
- The list of available timbres should be expanded, and those currently in place should be improved.
 
  
 
===Priority 3 (Might consider experimenting with):===
 
===Priority 3 (Might consider experimenting with):===
Line 130: Line 161:
  
 
- 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.
 
- 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.
 
==Files==
 
 
Here is the set of chuck files. Set the miniAudicle's root path to a directory containing these files, and then simply add permutations_main.ck. Only one machine should add the server, and the others should be configured accordingly:
 
 
[http://ccrma.stanford.edu/~jnriggs/Slork/permutations/permutations.zip permutations.zip]
 
  
 
==Related Projects==
 
==Related Projects==

Latest revision as of 12:01, 25 May 2009

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

Permutations2.png

Overview

This instrument works by displaying a GUI (shown at top of page) through which the slorker interacts with a score constructed of nested epicycles, producing pitches triggered in a server-synchronized or metrically-free manner. Extensive real-time controls affect the sound generated by the pitches.

Live Performances

May 9, 2009 - SLOrktastic Chamber Music I @ The CCRMA Stage

Recording: permutations1.mp3 (aiff)

Code used: permutations1.zip

May 16, 2009 - SLOrktastic Chamber Music II @ The CCRMA Stage

Recording: permutations2.mp3 (aiff)

Code used: permutations2.zip

June 4, 2009 - SLOrk Concert in Dinkelspiel

Recording: coming soon

Code Used: coming soon

How to Play

Running

Grab the latest code (above, for the May 16th performance).

On the server machine, add the appropriate hostnames to line 11 in scripts/server_main_loop.ck, then double-click bin/permutations-server.

On each client, double-click bin/permutations-gui, bin/permutations-sampler, bin/permutations-supersaw, bin/permutations-osc, and add the shred in the miniAudicle window that appears.

Performance Paradigm

The GUI displays a series of rows of boxes, each box corresponding to an relative interval. The blue LEDs indicate the current location of the beat in each of the rows. Depending on the keys one has pressed, the beat will either be advanced by the server, or will be advanced manually. A note is played every time the beat is advanced corresponding to the sum of the relative intervals with respect to middle C. Note that while the internal representation of the intervals are relative intervals in semitones (as integers, in the array int rows[][]), there are many display modes that will show effective notes (i.e., summing the intervals from middle C) and other information.

Sections are presets of row configurations. While rows can be different sizes, corresponding rows of each section must be the same size. Selecting a section and modifying it will change the section, such that re-selecting the section will not revert to the original configuration.

The various timbres control the mechanism for sound generation, and there are many keyboard and trackpad controls for modifying the sound.

Keyboard Controls

Selecting timbre, envelopes, or sections is possible by holding down "t", "e", or "s", respectively, and pressing number keys "1"-"9", "0" to select the parameter values 1-10. Holding down shift when pressing a number key accesses the second bank, 11-20. (i.e., to select envelope 11, press shift+e+1)

With the stock configuration, the lowest-numbered envelopes are the shortest and most percussive, while envelopes 6-9 are pads of increasing length. One can add up to 20 different envelopes and sections by modifying the code (in gui.ck, an array of ADSR vectors on lines 52-61, and the rows for each section on lines 85-90). Adding more timbres is also possible, but will remain undocumented for the time being (feel free to contact the authors for instructions). As configured currently, timbre 1 is a supersine, 2 is a supertriangle, 3 is a supersquare, and 4 is a supersaw oscillator bank. Timbres 5-11 are samples, listed on lines 127-136 in sampler.ck.

Timbre Sound/Sample
1 supersine
2 supertriangle
3 supersquare
4 supersaw
5 data/bell.aif
6 data/toy_piano.aif
7 data/glockenspiel.aif
8 data/clarinet.aif
9 data/kalimba.aif
10 data/xylophone.aif
11 data/piano.aif

The stock configuration has four sections, corresponding to the tonic, subdominant, dominant, and supertonic major triads of C major.

Additionally, holding down "t", "e", or "s" and pressing "[" or "]" will scroll though the available parameter values, wrapping around (i.e., if you are on timbre 0, pressing "[" will go to the highest-numbered timbre available).

Without holding down "t", "e", or "s", the number keys default to changing envelope, and "["/"]" default to changing timbre.

Holding down "i", "j", "k", or "l" while pressing up or down arrow keys modify attack, decay, sustain, and release parameters, respectively, for the ADSR envelope. Selecting an envelope (with number keys or "["/"]") clears the modifications one has made to it (e.g., if I press 2, I'll play with envelope 2, then if I hold down "i" and press down arrow twice, it'll play with my modified envelope. Pressing 2 again will reset the ADSR to the original envelope 2).

"<-" and "->" (arrow keys) change the register (in octaves). Holding down shift modifies the register (basenote) in semitones (100 cents), holding down apple does the same in quartertones (50 cents), and shift+apple does so by an eighth-tone (25 cents).

"-^" and "-v" (arrow keys) double and halve the tempo, respectively. Holding down shift does so by factors of 3, apple does so by factors of 5, and shift+apple does so by factors of 7. (i.e., to reach an 7:8 polyrhythm from a tempo of 8, press down arrow three times [reaching a tempo of 1] then press shift+apple+up once [to get a tempo of 7]). Note that in the current implementation, one should only have integer tempos (although this restriction is not enforced!); press "escape" to return to the nearest power of 2. Polyrhythm support and robust synchronization will be added in a future version.

Trackpad Controls

With "." held down: X-axis: controls the cutoff frequency of a low-pass filter Y-axis: For the oscillator timbres (0-3), traversing the y-axis detunes the pitch slightly around its base frequency. For the sampled timbres (3-11), traversing the y-axis increases the resonance of the low-pass filter.

With "g" held down: X-axis: controls gain

With "r" held down: X-axis: controls mix of reverb

GUI Controls

The GUI contains a grid of boxes with associated LEDs that display the current location of the beat. The beat will advance the top row. Every time the one row's location reaches the end and wraps back to the beginning, the row below it advances by one. As such, the score can be considered a series of nested epicycles. The note that is triggered for every advancing of the top row is the sum of all the active boxes (where "active" means they correspond to the current location of the beat, displayed by blue LEDs). By default, there are three rows, the top row with 5 boxes, the second with 5, and the third with 3.

Pitche display is in Lilypond notation, so 'gis would be the G-sharp an octave above middle C and ,,bes would be the B-flat one octave below middle C (note: ,bes is the note one semitone below c). The default format is for the top and bottom rows to display their absolute pitches (i.e., the note that would be triggered if they were active their row were the "top" row, so the notes in the top row really do display exactly what pitch would be triggered when the beat lands on them), and the second row to show the relative interval, e.g., if the current note on the middle row was displayed as P4, and the bottom note was 'd, the current note on the top row would be 'g (the D above middle C transposed up a fourth). This is all fully customizable by modifying the appropriate configuration parameters in gui.ck (again, until this is documented, please contact the authors). Note that intervals are always treated as "up", so an M3 down would be displayed as ,m6 (where the comma indicates an octave down, then a minor sixth up) and P8 would be displayed as 'P1.

Clicking on a box swaps the value in that square with the value in the square immediately to its right (it wraps, so clicking on the last box will swap with the first). Holding down shift transposes the note up by a semitone, and holding down apple transposes the note down by a semitone. Holding down option does the same by an octave, control does the same by a perfect fifth, and control+option does so by a major third. Holding shift+apple and clicking a note will turn it into a rest (indicated by "r"), shift+apple+clicking again will turn it back to the original note. Note that a rest placed on an active (i.e., has a blue LED) note in a lower row will silence all notes while it remains active.

"`" (tilde) or clicking "play" sets the GUI to trigger note events when the beat is advanced. " " (spacebar) momentarily enables playing while it is held down, and disables playing when it is released (note: with tilde enabled, pressing spacebar will continue playing, and releasing it will 'stop' playing). "m", when held down, prevents the server beat from advancing the local beat. "n" advances the beat manually. This is best used by holding down "m", then tapping "n" to play a rhythm. "b", when held down, waits for the next server beat, advances once, and prevents subsequent server beats from advancing the local beat. This is best used by holding down "m" and "b", and is useful for playing an isolated note or notes together, like a sting at the end of a piece (esp. at a slow tempo).

Code Modification (how to add new tone rows, sections, and more)

TODO: talk about adding tone rows, sections, etc. This should be better once we clean up the code... TODO: describe the various row_format values

For right now, please contact the authors for help with making changes to the code...

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):

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 via OSC messages from the command-line version.

Priority 3 (Minor issues):

Whiteboard

Priority 1 (Should be in there asap):

Priority 2 (Would definitely be nice):

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.

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