This class is "about" several things all at once.
First and foremost, the goal is to create some interesting pieces of music and musical programs.
Second and almost as foremost, the goal is to learn the fundamentals of programming.
The hidden agenda of the class is to make you fall in love with
the ability to translate thoughts into reality—
Students entering this class are expected to understand algebra, trigonometry, and some very basic physics ("what is sound?") and calculus ("what is a derivative?").
Students in this class are not expected to know how to program. Students that have programming experience are also welcome and important; you will be a great asset to your teams.
John Clements, aoeuclements @ brinckerhoff.org
Lecture: 10:00-11:00, MWF, room 14-232B
Lab: 11:00-12:00, MWF, room 14-232A
Lecture: 15:00-16:00, MWF, room 14-303
Lab: 16:00-17:00, MWF, room 14-232A
See my Contact Info page for my calendar. You can add it to your calendar, if that makes your life easier.
This is the course web page, its link is http://www.brinckerhoff.org/clements/csc123-fa12.
Much of the class will be organized around a single large project. You will work on this project as part of a team of 3-5 classmates. We will organize these teams in the fourth week.
Each of you will also have an individual "portfolio" web page, that will spotlight your team’s accomplishments, along with your own personal contributions.
You will be required to complete the assignments in this class using DrRacket, version 5.3 It is available for all major platforms, including Mac OS, Windows, and UNIX. It is pre-installed on the lab machines, which are all Macintoshes.
I’ve made a small number of YouTube videos, illustrating some basic DrRacket skills. These are online at
Every student will be required to maintain an online "portfolio" page, highlighting his or her work on the projects that each team carries out.
The recommended (a.k.a. simplest) way to get such a portfolio page is to use Google Sites, at http://sites.google.com. This will require you to have a google login, which should be free if you don’t already have one.
You’re welcome to build your portfolio page in some other way, if you like.
Your portfolio pages must be public, and you should add yourself to the "Portfolio List" document (see the link in the google group).
In addition to this, you’ll want some way to share the music that you make with others in class and to include it on your web page. I recommend signing up for an account with http://www.soundcloud.com, which is free for up to 2 hours of music and has a nice embeddable HTML widget that you can plant on your web page.
This class does have a required textbook, but you will read it online, so no purchase is required. The book is called The class does not have a required textbook, but there will be required reading. Much of the required reading for the first few weeks will come from the How To Design Programs books, online at
In addition to this book, there are a number of good books on sound manipulation. The Computer Music Tutorial, by Curtis Roads, has a nice high-level introduction to most of the advances of the last fifty years in digital music and sound processing.
There are also lots of books about digital signal processing out there. For sentimental reasons, I’m going to recommend one written by my undergraduate advisor, Kenneth Steiglitz:
A DSP Primer, with Applications to Digital Audio & Computer Music, Ken Steiglitz
This class will use Piazza. This will be the principal means that I’ll use to notify you of deadlines, organizational updates, and changes to assignments. If you’re not keeping up with the group, you’re going to be missing important information.
It’s also the best way for you to direct questions to me and/or the class. Feel free to e-mail me with personal questions, but use the Piazza group as your main means of communications. It’s possible to post anonymously, if you like.
You should already have received an invitation to the Piazza group; let me know if you need an invite.
Don’t post your code or test cases to the group; anything else is fair game.
Also, please keep in mind that I (and everyone else) judge you based in part on your written communication. Spelling, complete sentences, and evidence of forethought are important in all of your posts & e-mails. One easy rule of thumb: just read over what you’ve written before clicking post or send, and imagine others in the class reading it.
In this class, cheating will be largely nonexistent; each team will be working on a project of its own design, and sharing of code is encouraged, with this caveat: when you get code from another team, make sure to indicate its source. A one line comment will suffice, e.g. "This function adapted from one written by the Bilious Lions".
Labs in this course take the form of simple exercises to be completed in one to three lab periods, designed to help you understand the lecture material and to lead you toward solutions for the larger assignments.
In labs, you are heartily encouraged to collaborate like crazy. Look at everyone else’s code, copy and paste, type on your neighbor’s keyboard, whatever. Labs need not be entirely your work, but you do need to understand what you’ve written; I’ll often ask you questions to make sure of this.
Most labs will be "graded", in the sense that I will verify at the end of the lab period or at the beginning of the next one that you’ve completed the work. These will generally be simple credit/no-credit marks. Typically, I will give you a "completion number" when you finish the lab. Hold on to this number: it proves that you finished the lab. If you didn’t get a number from me, you won’t get full credit for the lab.
There will be a midterm and a final exam in the course. The midterm will be during the lecture period on Wednesday, October 24th, in the sixth week of class. The quizzes and exams will be closed-note. No electronic devices, including cell phones or mp3 players, will be permitted during the quizzes and exams.
There will also be two ten-minute quizzes in the class. These will be given on Wednesday in weeks 2 and 4.
Before the final project, there will be two smaller projects with more constrained parameters. Unless otherwise specified, these projects will be due at 11 pm on the day specified in the schedule.
Your final, quarter-long project in this class is to design and implement a music tool that you can use to mix and/or perform music.
You will work in teams. The team size will be around 5, but will depend on the number of students in the class."
- There are four milestones associated with your project (see below). The last milestone consists of a 5 page paper and demo.
You will demonstrate your project in class and lab during the last week of the quarter (we’ll signup for times). Your project must be working by this point or everyone in the group will receive 0 points for the entire project.
Each member of the group will be questioned, in person, about various aspects of the project and will be assigned individual grades based on their answers.
Each member of the group will provide an assessment of every other member in the group.
Each member of the group must submit weekly progress reports (due every Friday). Students may also use this report to inform me of any group related issues. Progress reports will affect each member’s final project grade.
Milestone #1: Oct 22nd, 3% of final grade
Milestone #2: Nov 5th, 3% of final grade
Milestone #3: Nov 16th, 3% of final grade
Milestone #4: Nov 30th, 21% of final grade
Grades will be determined by performance on programming projects, the exams, and class interaction. The breakdown of the grade is as follows:
Midterm Exam: 10%
Final Exam: 15%
Late Policy: Except for exceptional circumstances, late assignments will be given 0 points.
Schedule & Assignments appear here. (There’s also a link at the top of the page.)