Glimmer: Audio Scripting with Audacity
From CSWiki
Contents |
Links
Tasks for Audio Scripting
Explore UI Building Tools
- Build a basic three-pane window (no tabs) using the GUI builder that Audacity uses
- Try to get a GTK window working in Audacity
- Add a menu item for either of the prior windows
Background Research
- Learn more about standard sound representations
- Learn more about MIDI
Higher Order Scripting
I'd really like all of you to spend some time thinking about how higher-order procedures can help us manipulate sounds in some representations. Here are a few representations to think about. You'll want to extend/think about them a bit, since some may have significant flaws. One important issue is how to generalize each representation to multiple tracks, and to have the procedures deal appropriately with tracks.
Higher Order Scripting: Simple Samples
You may recall that one way to represent a sound is by a series of samples of the sound's wave, taken at fairly short intervals. (These samples simply represent the height of the wave at any time.)
- Make sure you understand this representation
- Consider effects you can get with the basic list-based higher-order procedures
- (map unary-proc lst)
- (map nary-proc lst1 lst2 ... lstn)
- (select unary-predicate lst)
- (remove unary-predicate lst)
- Consider extensions of these appropriate for this sound representation. E.g., you might make a variant of map that takes an additional integer as a parameter, and calls the procedure on chunks of that many samples.
- No, coming up with these extensions is not trivial. That's why it's research.
- If you do use the "map-n", you'll need to consider whether you step through the list one item at a time (in which case the function returns a single sample), or one chunk at a time (in which case the function returns a chunk)
- Try coming up with a reasonable equivalent of
image-compute-pixels!. (Yours will probably take only one parameter, the time in the sound, but others are possible.)
Higher Order Scripting: Notes
- Consider a representation of a sound as a list of tracks
- Each track is an instrument and a list of notes (and, perhaps, some other information)
- Each note contains the note (standard western scale), the octave, the duration, the volume, and any other characteristics you think are appropriate
- Again, consider effects that you might get with the basic list-based higher-order procedures (and perhaps even non-higher-order list procedures)
- For example, if we have a theme, we might map a change in octave onto the theme, and then concatenate it with the original theme
- This should require you to design a library of procedures to work with notes, such as (note-in-octave note octave) and (note-change-octave note delta-octave), each of which creates a new version of anote
Higher Order Scripting: MIDI
- Once again, consider effects you might get with the basic list-based higher-order procedures
- And once again, you'll want to design a library of useful procedures
Higher Order Scripting: Sequences of Sounds
We can consider a long sound simply as a sequence of shorter sounds (buzzes, tweets, bird calls, a piano playing middle C, whatever)
- You'll need to pick a representation for a short sound
- Once again, consider effects you might get with the basic list-based higher-order procedures
- And once again, you'll want to design a library of useful procedures
Audacity
- See what you can find out about internal representations of sounds
- See if you can convert any of the representations above to/from Audacity's internal representation
The Paper
Notes
- Since it's not likely that we'll have a lot implemented, this is likely to have to end up being more of a philosophy of audioscripting paper. (Think "Visual Modeling", with the examples, but without them actually working.)
- It can focus on constructionist ideas (hey, we can submit multiple papers to Constructionism 2010)
- It should include a significant section on HOP
Tasks
- Make an outline
- Write an introduction
- Identify resources
| Glimmer | Agendas | Links | References | Tasks |

