Glimmer: Audio Scripting with Audacity

From CSWiki

Jump to: navigation, search

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
Personal tools