NOTE - A project is required for the course and a project should be approved before you sink too much time into it. Any of the following are acceptable, but you are free to go any other direction within the realm of digital audio processing.
If you have an ambitious goal, group projects are ok, but you must propose a project in which each group member has a well-defined task.
I'm obviously biased toward Nyquist because that's where I do my research and it's a way to package small projects so that other users (especially composers) can use them. However, you are not required to use Nyquist at all. -RBD
|Reverberation - We will talk in general about reverberation. Nyquist has no reverberation functions, and because of the use of feedback in reverb implementation, it is difficult to build interesting reverb effects in Nyquist at the Lisp level. What I had in mind here is you might find a public-domain reverb implemented in C and add it to Nyquist. Skills required: advanced C programming.|
|Convolution - Nyquist does not have a convolution operation. Convolution can be used to create interesting musical effects, and I think I have some source code for fast convolution. Because fast convolution is computed in blocks, the interface between Nyquist and convolution operations isn't trivial. Skills required: advanced C programming.|
|Physical Models - My colleague Perry Cook has some C code that implements various interesting physical models. I'm not sure exactly what the control functions would look like in Nyquist, but this would be an interesting addition to Nyquist. Skills required: advanced C programming.|
|Noise gate, compressor, limiter - I implemented some primitives for computing windowed RMS amplitude and envelope following, and Nyquist already has functions scaling and mapping. These could be assembled into a set of useful tools for compressing, expanding, limiting, etc. We'll talk about these functions later in the course. Skills required: programming in XLisp/Nyquist, figuring out the functions to be implemented.|
|Enhancing Nyquist on the Mac - It would be really nice to have a direct interface to sound on the Mac (Nyquist can do a lot in real time), a nice lisp editing environment using an external editor (Nyquist already supports Apple events), better plotting functions, etc. Skills required: some or all of: knowledge of Mac programming, Apple Events, C.|
|Instrument Development - We haven't implemented many off-the-shelf instruments in Nyquist. It would be nice to have at least a small orchestra for beginners and to serve as examples. (A project could be just one or two good instruments, not a whole orchestra.) These could use FM, Sampling, or whatever. Skills required: some musical ability, Nyquist programming.|
|Porting Nyquist to Win32 - This could be relatively easy if you go for a simple command-line interface, or relatively hard if you go for an editing environment, graphical display, and interfaces into the Windows audio system. Skills required: C programming, Windows programming.|
|Analysis of Resampling Error - Rossum (see the reading for Feb. 3) says that linear interpolation of non-sinusoidal wavetable data gives poor quality, but in fact, linear interpolation is very common these days. How bad is it, and are there ways to make it better? To answer the first question, you could obtain some instrument tones, store them in a table and measure the RMS error (noise) generated as a result of linear sample interpolation. This error should go down as the table is made larger. It would be interesting to see error plotted as a function of table size. Also, it would be nice to make some listening tests to see how this really sounds in practice. Skills required: Nyquist, good understanding of resampling issues. [Note: the results are of practical interest to me since I'm working on some synthesis techniques that rely on table-lookup. -RBD]|
|"3D Sound" - Implement (SPACIALIZE sound x y) where x is a time varying X-coordinate, y is a time-varying Y-coordinate, and sound is the sound of a moving source. Use panning, doppler shift, and reverb to create the effect of a moving sound source. The function returns a stereo signal. Many variations are possible. Skills required: Nyquist programming.|
|FFT - Nyquist really needs an FFT function. This is tricky because you really want FFT to return a sequence of short-term FFTs on successive windows of an audio stream. The FFTs would probably be requested by sending a message to an XLisp object. There should be an inverse FFT function that you pass an object to and get back an audio stream. Skills required: advanced C programming.|
|Sound Editing Extensions - I've created a little sound editing system with Nyquist, but it's very crude. If someone created a better interface for Nyquist on the Mac or Win32, then it might be possible to build some tools that would help you to cut and splice digital audio, e.g. by setting splice points while listening to sounds. The advantage over commercial editors would be the fact that you could extend and automate editing operations by programming Nyquist. Skills required: Mac or Win32 programming.|
|Other Synthesis Techniques - There are lots of techniques described in journals and conference proceedings. We'll read about some of them. Extending Nyquist with a new technique would be a good project. Skills required: advanced C programming.|