Menu:

Instructor:
Morwaread Farbood

Announcements

August 30, 2012

All students much register for the lab, MPATE-GE 2617, in addition to the lecture class.

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:

Prerequisites

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.

Schedule

The following is the course schedule, subject to change:

Unit 1

Tuesday, September 4
Bits and binary; ASCII encoding; UNIX; programming; source code; compilers; object code; structure of a standard C program.

Thursday, September 6
Statements, variables; types; casting; format strings for output; relational operators; precedence; boolean expressions; conditional statements; logical operators; note on style.

Monday, September 10 - First lab meets

Tuesday, September 11
Loops; for, while, do-while; overflow.

Unit 2

Thursday, September 13
Switch statements; constants; arrays.

Tuesday, September 18
Arrays continued; strings; standard libraries; ASCII revisited; input.

Tuesday, September 18: Problem Set 1 due at 8pm

Thursday, September 20
Functions; scope; command-line arguments; ciphers.

Unit 3

Tuesday, September 25
Typdefs and enums; const; structs; file I/O.

Thursday, September 27
Random number generation; Monte Carlo simulations; recursion.

Thursday, September 27: Problem Set 2 due at 8pm

Tuesday, October 2
Quiz 1 on Units 1-2.

Unit 4

Thursday, October 4
Stack; automatic vs. static variables; preprocessor macros for .h files; linking revisited; multi-file projects; make; gdb; arrays in memory; pointers; pointer arithmetic; sizeof.

Thursday, October 4: Problem Set 3 Part I due at 8pm

Tuesday, October 9
Computational complexity; Big-O notation; searching; sorting.

Thursday, October 11
Sorting continued; binary file I/O; IFF chunks and AIFF.

Thursday, October 11: Problem Set 3 Part II due at 8pm

Monday, October 15
NO LAB (Fall Recess)

Tuesday, October 16
NO CLASS (Fall Recess)

Thursday, October 18
Greedy algorithms; exhaustive searches; dynamic programming; memoization.

Monday, October 22: Problem Set 4 Part I due at 8pm

Unit 5

Tuesday, October 23
Dynamic memory allocation and deallocation.

Thursday, October 25
Structs revisited; break and continue; single-linked lists.

Thursday, October 25: Problem Set 4 Part II due at 8pm

Tuesday, October 30
Linked lists continued; hash tables.

Thursday, November 1
Binary search trees; tries; assembly; volatile; extern; unions.

Tuesday, November 6
Quiz 2 on material through Unit 4.

Unit 6

Thursdsay, November 8
Intro to audio programming library; PortAudio.

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
Audio programming continued; libsndfile.

Unit 7

Thursday, November 15
Twos complement; floating-point representation; bitwise operators.

Thursday, November 15: Problem Set 5 Part II due at 8pm

Tuesday, November 20
Huffman encoding and decoding; tree traversal.

Tuesday, November 22
NO CLASS (Thanksgiving holiday)

Monday, November 26: Problem Set 6 due at 8pm

Tuesday, November 27
Spell-checker competition.

Tuesday, November 27: Final project idea due at 8pm

Thursday, November 29
Review; additional topics TBA.

Thursday, November 29: Problem Set 7 design.txt due at 8pm

Monday, December 3: Final project full proposal due at 8pm

Tuesday, December 4
Review; additional topics TBA.

Thursday, December 6
Review; additional topics TBA.

Thursday, December 6: Problem Set 7 due at 8pm

Sunday, December 9: Final project design and framework due at 8pm

Tuesday, December 11
Quiz 3

Thursday, December 13
Review; additional topics TBA.

Final Project

Wednesday, December 19
Final project implementation and documentation due at midnight

Thursday, December 20
Final project presentation, 12-3pm

Class Times

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.

Problem Sets

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.

Quizzes

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.

Final Project

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.

Final Exam

This course does not have a final exam.

Books

Required text

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.)

Grades

Final grades for the lecture class will be determined using the following weights:

Problem Sets (best 6 out of 7):65%
Quizzes (best 2 out of 3):20%
Final Project: 15%

Final grades for the lab will be determined using the following weights:

Problem Sets (best 6 out of 7):70%
Attendance: 30%

Platforms

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.

Academic Honesty

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.

Acknowledgements

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.