Notes from the MetalevelThe Metalevel?A few basic concepts from Rick Taube's book of the same name...
A score is a level of abstraction above a recording of sound coming from a performance of that score. Is there a level of abstraction above a score? Yes, it is what Rick Taube calls the metalevel. If the score represents the composition, then the metalevel represents the composition of the composition. It deals with the process of musical composition as opposed to its artifact, the score. Computer CompositionComputer assisted compositionThe computer facilitates compositional tasks Automatic compositionThe computer system independently composes music Computer based compositionUse the computer to express ideas at a higher level than the traditional score WHY?
LispCommon Lisp vs. Scheme We will be using several packages that augment the basic lisp language with additional constructs suited for score generation and sound rendering. Our basic lisp is going to be SBCL, the main packages on top of that will be Common Music (composing in the metalevel) and Common Lisp Music (sound rendering). Common Music can work both in Common Lisp and in Scheme, and it includes some code that enables us to run most of its examples (which are written in Scheme) in Common Lisp. If you have used Scheme before (as in the Guile interpreter included in Snd) you will be familiar with, for example "define". Lisp Data types
...some examples. Lisp evaluation
Blocking evaluation: "quote" Blocking evaluation: "backquote" Functions, core functions you will need to know... Iteration and the "loop" macroExample: transpositionLoop is a macro that implements an English-like syntax for describin interactive tasks. Loop breaks the evaluation rules we just outlined! It does not follow the "lisp" rules of evaluation, it is its own little language for describing iteration. ...loop macro examples (text file available at: /usr/ccrma/web/html/courses/220b/nm/08/loop.cm). Musical parameters...musical parameter examples. Common Music and PortmidiWhat is portmidi? (the lisp interface as defined in Common Music) Looking at what's available: (pm:getdeviceinfo) Connect to the default input and output (portmidi-open :output (pm:GetDefaultOutputDeviceID) :input (pm:GetDefaultInputDeviceID)) so now we can start an external MIDI controlled synthesizer so that we can send MIDI notes to it. For example start Jack using Qjackctl, then start Qsynth and load a soundfont into it (the FluidR3 soundfont can be found on all machines at /usr/share/soundfonts/FluidR3_GM.SF2). ...score generation examples (strums function). ...a text file of scores.cm, save if somewhere and start evaluating parts of it in the interpreter!. See example with fm-violin in addition to example with MIDI note class. Algorithms and Processes...algorithms and processes examples. ...a text file of processes.cm as modified in class.
|