Course Overview
People
220 Course Sequence (a,b,c,d,d,d,...)
220a Calendar (tutorial
sections)
Prerequisites (time
to do class work, mostly)
Assignments / Grading Policy
(how to turn in work)
Logistics (accounts, CCRMA
security and facilities)
Workstations (Linux,
locations, disk space)
CCRMA Documentation
optional background text
Software Platforms, Documentation
Snd / Xemacs
/ Scheme
Lisp / CLM
SMS
PD
C++ / STK
Gimp
People
Chris Chafe cc@ccrma
Stefania Serafin serafin@ccrma [tutorials, assignments, web, PD]
Chris Jones cjones@ccrma [tutorials, music composition examples]
220 Course Sequence (a,b,c,d,d,d,...)
220a -- nature of sound, sound tools and programming, research topics
in music and sound synthesis
220b -- CLM unit generators, composing
220c -- research / composition seminar
220d -- independent research / composition (continuing series)
Tues. Lect. 10am | Assignment Due | Tutorials | |
Oct | 3 course, Snd intro | ||
10 generators / modif. | #1 complex wave | ||
17 iteratives | #2 speed of snd | ||
24 instrument classes | #3 air column | ||
31 SMS intro, music | #4 unholy flute | ||
Nov | 7 Texas, STK, listen--> | #5 transformations | |
14 PD intro, music | (collect | ||
21 sound surround | sources) | ||
28 illusions, mixing | #6 impulse responses | ||
Dec | 5 listen to -----> | #7 mixed music |
Prerequisite (ability to schedule sufficient time at CCRMA)
There are no prerequisite courses. An ability to get around in Linux needs to be acquired quickly. Most work will be done at CCRMA, on Linux machines, which are available on a 24-hour basis. Students should expect to spend several hours a week on site. All assignments are hands-on.
Assignments / Grading Policy (how to turn in work)
Work is turned in electronically as explained in class. Received assignments will be posted to the class web site (public read access), any comments will be returned by private email. Assignments are due as advertised and course completion depends on 100% of the work appearing on the web site. Not there = not done. Assignments received after due date may not get linked (late turn ins should be arranged by contacting the instructor). Lecture attendance is required, tutorials are optional. All evaluation is by homework, there are no exams. If there is difficulty with a particular bit, we encourage one-on-one work with the course staff.
Logistics (accounts, CCRMA security and facilities)
Accounts are created at the beginning of the course. Pre-existing CCRMA users should check to make sure they have up-to-date .emacs, .xemacs, .cshrc and .snd files in their home directory. See the CCRMA info pages for facilities info. Security is everyone's concern and will be a topic of the first class.
Workstations (Linux, locations, disk space)
A roster of Linux boxes and their various audio capabilities will be provided.A Linux introduction is available online. Each user has a home directory available across all CCRMA machines. Disk allocation on the central server will be automatically managed and backed up. Use /zap for all scratch files (erased automatically on logout).
Linux is free and available for lots of machines, a possibility for those interested in working outside CCRMA. Check first for specific combinations, especially audio devices. CCRMA is running Red Hat Linux with the ALSA sound drivers.
www-ccrma.stanford.edu provides software documentation and source downloads. Paperless is better, please don't print manuals at CCRMA.
Pierce, John R. The Science of Musical Sound, 2nd edition
Software, brief descriptions
Snd
audio editing environment
(acquire, display, manipulate sounds), user programmable
Xemacs
editor, communicates with
Snd for programming purposes
Scheme
interpreted programming
language, Snd, Gimp, Guile are Scheme interpreters (very lisp-like)
CLM
Common Lisp Music, a lisp
package for sound synthesis and processing, also available in Scheme
SMS
Spectral Modeling Synthesis,
an application for Fourier-based sound analysis / resynthesis
PD
Pure Data, a graphical programming
language for real-time synthesis and processing
STK
Synthesis Tool Kit, C++
classes for programming real-time synthesis and processing
Gimp
graphics editing environment
(acquire, display, manipulate images), user programmable
File types:
sounds -- .snd, .wav, .aiff, etc.
programs -- (scheme = .scm) (lisp = .lisp, .cl) (clm = .clm) (C++/STK
= .cpp)
images -- .jpeg, .gif, .ps, .tiff, etc.
Assignment (due Oct-10) %in further work over the quarter
Complex wave -- turn in a .jpeg screen shot of Snd with a synthesized tone.
The window should show your code, the time domain signal (several periods worth) and frequency domainSnd synthesis
graph (more than two partials). Use only two sinusoids. The solution is to use some form of modulation.
Here's the Scheme code to generate a single sine tone.
[sines.scm]
(define sine
(lambda (beg dur freq amp)
(let* ((start (floor (* beg (srate))))
(len (floor (* dur (srate))))
(phase-inc (hz->radians freq))
(out-data (make-vct len)))
(do ((i 0 (1+ i)))
((= i len))
(vct-set! out-data i (* amp (sin (* i phase-inc)))
))
(vct->samples start len out-data))))
(sine 0 1 1000 1)
...and the same thing explained line-by-line
Define a new procedure "sine"
(define sine
Bind it with 4 arguments
(lambda (beg dur freq amp)
Declare 4 internal variables
(let* ((start (floor (* beg (srate))))
(len (floor (* dur (srate))))
(phase-inc (hz->radians freq))
(out-data (make-vct len)))
Loop over the desired number
of samples, with a counter initially set to 0
(do ((i 0 (1+ i)))
((= i len))
In the loop, set each sample
in the vector as a result of the sin funtion, incrementing its phase
(vct-set! out-data i (* amp (sin (* i phase-inc)))
))
Lastly, after the loop is done,
transfer the vector to the current Snd window
(vct->samples start len out-data))))
Call the new procedure
(sine 0 1 1000 1) ; time 0 to 1 sec., 1000 Hz., amplitude
= 1.0
Also in sines.scm is a procedure, 2sines, that adds two sines with
independent frequencies and amplitudes.
Note that all frequencies and amplitudes are constant through the
entire tone.
A 2sines screen shot captured by Gimp
shows the code in the listener window, a few periods of the signal, and
its
spectra.
Modulation is the control of one signal by another. For the homework,
make a version of 2sines which
outputs only one sine, but distorts its frequency or amplitude
with the second sine. Study the effect
in the graphs.
Turn in a screen shot like the one shown above.
And finally