220a oct-3-00 Oct-3

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 / XemacsScheme
    Lisp / CLM
    SMS
    PD
    C++ / STK
    Gimp

Assignment #1 (due Oct-10)

  •     Complex wave formula (expressed in Scheme) and displayed in Snd
  • Course Overview

    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)

    Calendar (tutorial sections)
     
    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.

    CCRMA Documentation

    www-ccrma.stanford.edu provides software documentation and source downloads. Paperless is better, please don't print manuals at CCRMA.

    optional background text

    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 domain
    graph (more than two partials). Use only two sinusoids. The solution is to use some form of modulation.
    Snd synthesis

    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

    HERE

    is the sample code from which starting the assignment.