Fall 2012 Syllabus
MPATE-GE 2618: C Programming for Music Technology is an intensive, graduate-level introductory course in programming concepts and computer science with a focus on software design, algorithms, and data representation for digital signal processing and other audio applications. Assignments consist of extensive programming in C.Topics include:
- C programming: syntax, primitive types, iteration, conditional expressions, functions, arrays, pointers, dynamic memory allocation, standard libraries.
- Software development: problem decomposition, abstraction, data structures, implementation, debugging, testing.
- Algorithms: design, specification, and analysis.
- Data representations for signal processing and audio applications.
- Introduction to audio APIs
No prior programming experience is required. NOTE: All students must register for the lab, MPATE-GE 2617, in addition to the lecture class, MPATE-GE 2618.
The following is the course schedule, subject to change:
Tuesday, September 4
Thursday, September 6
Monday, September 10 - First lab meets
Tuesday, September 11
Thursday, September 13
Tuesday, September 18
Tuesday, September 18: Problem Set 1 due at 8pm
Thursday, September 20
Tuesday, September 25
Thursday, September 27
Thursday, September 27: Problem Set 2 due at 8pm
Tuesday, October 2
Thursday, October 4
Thursday, October 4: Problem Set 3 Part I due at 8pm
Tuesday, October 9
Thursday, October 11
Thursday, October 11: Problem Set 3 Part II due at 8pm
Monday, October 15
Tuesday, October 16
Thursday, October 18
Monday, October 22: Problem Set 4 Part I due at 8pm
Tuesday, October 23
Thursday, October 25
Thursday, October 25: Problem Set 4 Part II due at 8pm
Tuesday, October 30
Thursday, November 1
Tuesday, November 6
Thursdsay, November 8
Friday, November 9: Problem Set 5 Part I due at 8pm
Monday, November 12: Problem Set 5 design.txt due at 8pm
Tuesday, November 13
Thursday, November 15
Thursday, November 15: Problem Set 5 Part II due at 8pm
Tuesday, November 20
Tuesday, November 22
Monday, November 26: Problem Set 6 due at 8pm
Tuesday, November 27
Tuesday, November 27: Final project idea due at 8pm
Thursday, November 29
Thursday, November 29: Problem Set 7 design.txt due at 8pm
Monday, December 3: Final project full proposal due at 8pm
Tuesday, December 4
Thursday, December 6
Thursday, December 6: Problem Set 7 due at 8pm
Sunday, December 9: Final project design and framework due at 8pm
Tuesday, December 11
Thursday, December 13
Wednesday, December 19
Thursday, December 20
Lectures take place in the Education building (35 W. 4th St), 6th Floor Conference Room, on Tuesday and Thursday 1-2:15 and the lab portion of the class meets Monday 1-2:15.
Seven problem sets will be distributed during the semester. Each will be due via electronic submission on Blackboard. You have seven "late days" that you may use during the semester, each of which provides you with an extension of 24 hours. The extensions can be distributed in any way you like--e.g. you can use all seven days on one problem set or one day on each problem set, etc. No reason needs to be given; whether you are ill, too busy with other things, or just don't feel like turning it in, it doesn't matter--how you use them is up to you. Lateness of electronic submissions will be determined down to the minute by the submission timestamps on Blackboard. If the problem set is due at 2pm and you submit it at 2:01pm, you will lose a late day. If you've run out of late days, your assignment will be accepted with a 25% grade reduction per day late except in the case of an emergency. "Technical difficulties" do not constitute emergencies. Also note that some of the problem sets have mutliple parts that are due on different dates. Each day an individual part is late counts as a late day. You may not use any late days on the course's final project. When computing your final grade, your lowest score on these problem sets will be dropped and your six highest scores will be weighted equally.
The course will have three hour-long quizzes. These quizzes will be "closed-book." However, you may utilize during each quiz one two-sided page (8.5" x 11") of notes, typed or written, and a pen or pencil, but nothing else. You should expect the second and third quizzes to be cumulative, but their content will be based mostly on lectures subsequent to those covered by the first and second quizzes, respectively. When computing your final grade, your lowest score on these quizzes will be dropped and your two highest scores will be weighted equally.
The final project will be your opportunity to put your programming skills to use and implement your own software application. As long as your project is written (mostly) in C, the nature of your project is entirely up to you, albeit subject to the instructor's approval. You are welcome to utilize external libraries and hardware provided that the instructor has access to all of these things and you are able to present it in class at the end of the semester.
Students in the music technology program are encouraged to choose a project topics such as writing MAX/MSP externals, developing plug-ins, or using audio/MIDI APIs.
You may work together with up to two other students, however work is expected to be distributed equally among project partners and the project itself must be commensurate in scope. Each student is expected to contribute approximately 2000 lines of code to a project, whether working alone or with a group. If multiple students are working on a project, the code must be thoroughly documented to indicate which student wrote or contributed to each part.
Extensions on the final project will not be granted, except in cases of emergency. Work submitted late without extension will be penalized as follows: projects submitted up to one hour late will incur a penalty of 5%; projects submitted up to two hours late will incur a penalty of 10%; projects submitted up to three hours late will incur a penalty of 25%; projects submitted up to four hours late will incur a penalty of 50%; projects submitted more than four hours late will incur a penalty of 100%. Lateness of submissions will be determined down to the minute by timestamps.
This course does not have a final exam.
Programming in C, Third Edition by Stephen Kochan
Optional text for students less comfortable with programming
Absolute Beginner's Guide to C, Second Edition by Greg Perry
Optional recommended audio programming text:
The Audio Programming Book, R. Boulanger and V. Lazzarini (Eds.)
|Problem Sets (best 6 out of 7):||65%|
|Quizzes (best 2 out of 3):||20%|
Final grades for the lab will be determined using the following weights:
|Problem Sets (best 6 out of 7):||70%|
Assignments are designed to be implemented on a UNIX-based system such as Mac OS X or Linux, however it possible to use Windows. In the case of Windows, UNIX tools such as the Cygwin library would have to be installed.
All work you do for the class is expected to be your own. Collaborating with others unless explicitly allowed as well as copying material in any form from an individual, book, website, or any other source is strictly prohibited, as is allowing another student to copy or use your own work in any way. You are welcome to discuss the course's material with others in order to better understand it. You may even discuss problem sets with classmates, but you may not share or write code together. The only possible exceptions to this is the final project, if you are working together with other students or utilizing an outside library or API. If you have any questions about what kinds of communication/sharing/recycling of code are acceptable, contact the instructor.
This class owes much of its structure and content to Harvard's Computer Science 50, a course that the instructor took as an undergraduate (many) years ago.