Computer Audio: Musical Applications of Digital Signal Processing
Music 147 / ICS 180 / ECE 195 / Music 215 / ACE 277

University of California, Irvine
Winter Quarter 2005

Assignments for upcoming class sessions are posted on this page.

For Wednesday, March 23:

Make a concise presentation of no more than five minutes to describe your project to the class. Your presentation may include demos in PowerPoint or Max/MSP or other software that you have written. However, in order to minimize setup time, do not plan to download any software from the Web. Any software you hope to demonstrate must be on CD or flash drive or FireWire drive, or on your own laptop (ready to be plugged into the projector). If you will present on the classroom computer (a Macintosh dual G4 with OS X 10.3.8, PowerPoint v.x, and Max/MSP 4.5.3), please test your software on a similar computer before the presentation. You should actually rehearse your presentation to ensure that you can do it in five minutes.

For Monday, March 21:

Your final project -- complete article and complete software implementation and complete instructions for readers/evaluators of your work -- must be posted on your class web page by 12:00 noon.

For Wednesday, March 16:

Prepare for a final review session; come to class with at least one question or topic you would like to discuss for greater clarity.

For Monday, March 14:

Read Strategies for Continuous Pitch and Amplitude Tracking in Realtime Interactive Improvisation Software (.pdf format) by Dobrian.

Listen to the two pieces by Dobrian that will be the primary topic of Monday's lecture: Trans for electric guitar and computer, and Mannam (Encounter) for daegeum (Korean bamboo flute) and computer.

For Wednesday, March 9:

Read "Granular Synthesis", in chapter 5 part 2 of the textbook, pp. 168-184.

Read Programming New Realtime DSP Possibilities with MSP by Dobrian.

For Monday, March 7:

Catch up on all back work! Complete all unread readings, move forward in your studies of Max/MSP, work on research, writing, and programming for your final project.

For Wednesday, March 2:

Read "Fourier Analysis", Appendix of the textbook, pp. 1073-1112.

Read the first part of "Spectrum Analysis" Part IV, chapter 13 in the textbook, pp. 533-577.

Read the online document (in PDF format) "Fourier Notes (.pdf)" by Peter Elsea.

Study MSP Tutorials 25 (Using the FFT) and 26 (Frequency Domain Signal Processing with pfft~).

For Monday, February 28:

Post your research project in progress on your web site as completely as possible: abstract, bibliography of reference sources, text article, and design (program) demonstrating or exploring the topic researched. Post it as much in advance of the class session as possible, so that others can read it before class. In class, be prepared to give a very brief (two-or-three-minute) presentation of your topic and the work you have done so far.

For Wednesday, February 23:

Read the "OctiMax Compression Tutorial" by Peter Elsea. You can find it in the Documentation folder of Max 4.5 (OctiMaxCompressionTutorial.pdf) or download it directly from the web.

For Wednesday, February 16:

Read "Subtractive Synthesis", a section of part II chapter 5 of the textbook, pp. 184-197.

Read "Sampling Synthesis", a section of part II chapter 4 of the textbook, pp. 117-133.

For Monday, February 14:

Read "Basic Concepts of Signal Processing", part III chapter 10 of the textbook, pp. 387-448.

In Max/MSP, design a program that 1) synthesizes a sound (or plays a sound from a buffer~) and 2) locates that sound in different precise locations in a virtual (stereophonic) space. For example, you could generate a recurring tone (say, with FM synthesis or any of the other synthesis techniques discussed so far in class or presented in the MSP tutorials or the textbook), then simulate the sound moving away from the listener from a distance of 1 meter to a distance of 100 meters in discrete leaps of 3 meters between each repetition. Or, you could play the sound of a car engine, and simulate it moving from 100 meters to your left to 100 meters to your right at a constant rate of 40 km per hour. Or do some other combination of sound generation and sound spatialization. For the spatialization effect, you can use any combination of intensity, delay, and balance between direct and reflected sound. Post your patch on your website as a plain text file, and put a link to it on your research page. Also, put as many comments as possible in the patch itself, and write an explanatory paragraph or two on your website telling what you were trying to accomplish and detailing your reasons and methods for doing what you did.

For Wednesday, February 9:

Read "Sound Spatialization and Reverberation", part III chapter 11 of the textbook, pp. 449-492. Come to class prepared to discuss (or with questions about) such topics as speaker configurations, azimuth angle auditory cues, linear vs. "constant power" intensity panning, head-related transfer functions, distance cues, Doppler effect, impulse response of a space, reverberation time, pre-delay, early reflections, Schroeder algorithms, etc.

Read (and examine the example Max/MSP programs for) MSP Tutorial chapters 18, 19, and 22: "Mapping MIDI to MSP", "MIDI synthesizer", and "MIDI panning".

For Monday, February 7:

Read "MIDI", part VI chapter 21 of the textbook. If you find this chapter to be too technical, and you need a simpler explanation of the practical uses of MIDI, you can find many documents on the web describing MIDI in layperson's terms. For example, you can find some MIDI tutorials online, various books at the UCI library, and some books in the reference section of the Arts Media Center. There is also some discussion of MIDI in the Max manuals Max45TutorialsAndTopics.pdf and Max45GettingStarted.pdf.

For Wednesday, February 2:

Post on your website your proposal, in as much detail as possible, for your final research/design/implementation project. Your proposal should describe your topic (what you intend to research and learn), your idea of what software you could develop to demonstrate what you have learned, and any initial background research you have done to explore what has already been done in your chosen area.

For Monday, January 31:

To get a good overview of many of the main issues in software sound synthesis, read "Sampling and Additive Synthesis", part II chapter 4 of the textbook.

Look through the textbook, and through the links on the web site, to get ideas for your final research project. Find a topic that particularly interests you and begin to do background research on what work has been done in that field so far, so that you can develop a realistic research/design/implementation project of your own.

Continue teaching yourself Max/MSP by working through the Tutorials. Once you have gone through Max Tutorials 1-13 or so, you should probably focus more on the MSP Tutorials, especially chapters 1-12.

For Wednesday, January 26:

Read "Modulation Synthesis", part II chapter 6 of the textbook.

For Monday, January 24:

Read "Introduction to Digital Sound Synthesis", part II chapter 3 of the textbook. Give particular attention to understanding the discussion of "fixed-waveform table-lookup" (a.k.a. wavetable) synthesis--which was also explained in class on 1/19--and to understanding the many uses of "envelopes" (a.k.a control functions).

Teach yourself as much as possible about Max/MSP. Max/MSP is available for use at the Arts Media Center , and/or you can download it for use on your own computer. (You may well want to license the full use of MaxMSP using the 9-month one-time student license.) You can find all the documentation for Max in the Documentation folder inside the MaxMSP folder. You should read at least the following items: 1) pp. 9-31 of Max45GettingStarted.pdf, 2) pp. 6-39 of Max45TutorialsAndTopics.pdf, and 3) pp. 22-81 of MSP45TutorialsAndTopics.pdf. (You can probably do without reading pp. 28-44 of this document, unless you are having problems getting sound out of MSP.) As you read the tutorials, open and try the example program for each chapter, located in the Tutorial Patches folder. By all means, read further than assigned if you'd like. There is much more information about Max/MSP on the web, too. At this stage, you might find Peter Elsea's additional tutorials most useful.

There exists a large collection of additional Max objects for data visualization, video processing, and 3D animation. That collection is called Jitter, and it's likewise available for download. Like Max/MSP, Jitter works for 30 days without authorization, and it's also included in the 9-month student license. Therefore, it's advised that after you have installed Max/MSP, you also download and install Jitter.

For Wednesday, January 19:

Read "Sound Mixing", part III chapter 9 of the textbook.

Using C or Java, write at least one program (more if you're ambitious and/or inspired) that performs some useful (even if very simple) operation on audio data. If you're a good programmer, make it as elaborate as you'd like in terms of user interface, and as robust as possible. If you're a mediocre program, your program can be extremely simple in terms of user interface. (A simple commandline program is fine.) In either case, the focus should be on handling the audio data accurately and sensibly.

As a guideline, use the four classifications discussed in class on 1/12 (and listed in the lecture notes from that day's class): Record, Play, Process, or Hack. For ideas, you might want to consult the list of ideas of things to do with audio presented in class on 1/10.

To get started technically, you're welcome to consult the examples in C on the professor's page. (Caveat emptor. You get what you pay for.) These are very simple examples of different tasks, which you could use as a starting point for your own work. Also, feel free to post questions, problems, ideas, and discoveries on the NoteBoard.

Post your work on your own class web site. You don't need to post your entire project from Xcode or CodeWarrior or Visual Studio. Just post a link to the source code file (which you should include on your site in the form of a .txt or .c file), and if possible a link to the runnable program (included on your site in the form of a .app or .app.sit file for Mac OS X or a .exe or file for Windows XP). Your source code should include LOTS of comments explaining everything you did, to help others understand it. Your web page should also describe in detail what you intended your program to do (and why you intended to do such a thing, if that's not obvious), and how you went about doing it.

Feel free to exchange information (and even small code snippets when necessary) with your classmates. If you're worried about other people taking credit for source code that you post on your web page, feel free to post a message on the NoteBoard announcing the availability of your code on your web page at the same time that you actually post your code on your web page. That way, there will be a documentation of when you posted your code, claiming to be the original author. This will serve as an in-class copyright for that code. (Make sure, however, that you give due credit to anyone from whose code you yourself borrowed.)

For Wednesday, January 12:

Familiarize yourself with the PortAudio libraries for C programming of audio I/O. These libraries are already installed in the lab at 3151 Engineering Gateway, for use with the Visual Studio programming environment. You can download these libraries to your own computer from the PortAudio download page. Included with the PortAudio package are documentation, tutorials, and examples that will help you understand how to use PortAudio.

If you can't program in C, and can program in Java, you should familiarize yourself with the Java Sound API, which you can read about at the sound API page of Sun's Java web site. I will not cover the Java Sound API specifically in class, but I will cover general issues of file and stream I/O for audio, and there are many examples on the web that can help you. Some of you may have some trepidation about the programming requirements of this course if you have only a rudimentary knowledge of the C and Java programming languages. For purposes of this class, there is really just the first assignment that will require C or Java ability. The rest of the assignments will be in Max/MSP, which everyone in the class will be learning from square one.

For the "design" component of the final project, one could program an interesting application in Max/MSP, or program an MSP object using C, or use Java within Max/MSP (using the mxj and mxj~ objects), or program an actual standalone application written in C or Java.

In short, for purposes of the class, I'd suggest just deepening your knowledge of C or Java -- whichever you already know best -- enough to get the idea of how to program file I/O and stream I/O. For C, you'll want to use the PortAudio libraries (which are already installed in 3151 Engineering Gateway, and which you can also download yourself from the PortAudio download page for use on your own computer). For Java, you'll probably want to use the Java Sound objects that are probably already a part of your Java development environment, available using "import javax.sound.sampled.*" and "import javax.sound.midi.*".

For Monday, January 10:

Note: This class session and all future sessions will meet in Music and Media Building, Room 216.

Purchase the textbook for the class.

Read "Digital Audio Concepts", part I chapter 1 of the textbook.

Read the article "Digital Audio" by Christopher Dobrian.

Establish your web page for the course, and send the URL to the professor.

This page was last modified on March 15, 2005.
Christopher Dobrian