Draw Function Window

This window allows for the creation of control functions. It actually creates a function of 400 entries (one per pixel) which is then interpolated on during processing. The function controls either binaural position, mutation index, degree of time stretching, amount of pitch shifting, or degree of varispeed depending on which process you are using.

To create a control function, you can simply draw in the function window (your mouse position is continually tracked and translated into relevant units) or click on one of the preset waveform buttons. The waveform buttons will fill the function with as many cycles as are set in the Cycles: box. If you click a waveform after there is something already in the function window, the waveform will modulate the function, rather than replace it. The Set button will allow you to set all of the points to the same value. The Reverse button will time-reverse the function. The Invert button will flip it. It Shift button will rotate the function by up to 399 positions. The Smooth button will average adjacent entries in the function, this smoothing wraps around the beginning and end of the function, so watch out. The Normalize function will increase/decrease the magnitude of the function to fit the range of the window. The Set Mean button will scale the function so that the value you enter becomes the mean, or average value.
 

The boxes in the upper right and lower right corners allow a very primitive type of zooming. There is no facility for selecting, copy, paste or cut. One can read or write control functions as soundfiles by clicking the Read and Write buttons. The Time: legend refers to the time in the input soundfile and the other legend (Scaling:) is updated depending on how the control function is applied.

SOUNDFILE MENU

This simply allows you to select between the open soundfiles. The first ten soundfiles open are given command key equivalents (Command - 1 to Command - 0).

CONTROL MENU

Show Signal
 
This will bring up a window to show the sound whenever SoundHack reads or writes sound (except during file copying and normalization). There are separate windows available for all active soundfiles.
 
 Show Spectrum
 
This will bring up a window to show the spectral data in all spectral operations (most everything but varispeed, which I do in the time domain) There are separate windows available for all active soundfiles
Show Sonogram
 
This will also show spectral information but over time. Intensity is represented by different colors where purple-red is the lowest intensity, green is mid intensity and bright red is the highest intensity. This display will slow down any Macintosh dramatically.  
 
Pause Process

This allows you to pause during a long process. This is especially useful if you would like to here the sound you have processed so far. If you are running a convolution, it sometimes takes a while to pause (up to 3 minutes on a slow Mac II).

Continue Process

This will resume processing where you left off.

Stop Process

This will kill your process and close the output soundfile.
 

Load Settings...

This loads a previously created settings file. This is also done automatically on startup to the "SoundHack Preferences" file in the ":System Folder:Preferences" folder.

Save Settings...

This will create a settings file which contains the current settings from the binaural, convolution, spectral analysis, spectral dynamics, mutation, phase vocoder, varispeed, gain and preferences dialog panels. This is done automatically when you quit SoundHack to the "SoundHack Preferences" file in the ":System Folder:Preferences" folder.

Default Settings

This will reset all internal settings to a default set. Recommended if you suspect your "SoundHack Preferences" file is corrupt.

Preferences...
 
This allows you to set a few things. You can set SoundHack to automatically play a soundfile when it is opened. This is a very nice way to set things if you are using SoundHack as your web browser helper application. If you set an editor, then you can use the Close & Edit command (described earlier). The Default File Type, when set, will give you the selected file type and format whenever you create a new soundfile. Play After Processing will play the output file as soon as the current Hack process is done with it. 
 FUTURE PLANS
 
1.0  SoundHack is finished. Tom and Betsy take a holiday. 
.90 Last major release, only bug-fixes and minor updates from now on. Make a suggestion for final features. Time is running out! 
Port to IRIX, Linux? Solaris, Rhapsody, Wintel. AppleEvents and scriptablity. MPEG. Spectral plugins?
.89 Mark Dolson phase vocoder enhancements. Simple graphic filtering. SDS, SDI, TX16W, OMF, Sonic, ProTools, AIFF resource soundfile formats. QT coder: log frequency sonograms, new color encodings. Buffered read and write routines. 
BUG FIXES AND REVISIONS
 
.88 QT coder - changes soundfiles into QuickTimeô movies into soundfiles. 24&32 bit SDII files, IMA4, MACE3, MACE6, aLaw and µLaw AIFC files, aLaw Sun files. 32-bit float AIFC files compatible with Mills' Csound. Peak sample saved in all 32-bit float files. 32-bit float playback. QuickTime/AIFF files fixed. Increased sample rate conversion quality. Motorola's libmoto library integrated into app. Looping playback. WAVE loops and markers. Enhanced Draw Function dialog. Functions work much more predictably with varispeed (no more fast high pitch - slow low pitch). Tiny soundfile playback fixed. 3rd octave band grouping added to spectral dynamics and irregular mutation. 
.87 Spectral files are now treated as soundfiles. Simple spectral analysis/resynthesis added. Quick normalization added. Many cosmetic/GUI changes. New binaural filters added. Spectral dynamics will trigger on an averaged amplitude value (good for hiss removal). Draw function debugged for the umpteenth time. Preferences are now savable.
.86 The shareware version now is just the 68k version. Multiple soundfiles supported. Another sample rate conversion bug (errant pointer deallocation) squashed. CD Audio import added. Channel splitting added. 
.85 Soundfile playback now works for all soundfiles which are 8-bit (twos, raw or µLaw) or 16-bit linear (twos). The apple events for open and quit application added. Spectral dynamics fixed again.
.84 Separate display windows for most signals added. Sonogram window added. Off screen drawing keeps windows updated. Most all dialogs now modeless. 
.83 Popup bugs fixed, convolution brightening added. 
.82 Soundfile recording has been added. 
.815 24 and 32 bit AIFF and AIFC supported. 
.81 Spectral extraction added. Spectral dynamics now allows threshold to be set relative to the peak amplitude in a block of sound. 
.803-6 Various bug fixes. A full disk now stops any process. Samples which are too loud now clip instead of going out of range. Greater post convolution gain is now possible. Normalization no longer clips. The packmode no longer changes when a new soundfile type is selected. Mixed stereo/mono mutation no longer crashes! 
.80 Split into shareware (0.74) and commercial (0.80) versions. Added Mutation functions. Ported to the Power Macintosh. 
.74 Fixed early ending sample rate conversion problem. Fixed the spectral display. Added attack/decay time to spectral dynamics. A moving binaural effect is added. Allow raw data files to have text packmode and text files to have raw packmodes. Fixed various GUI complaints (0.743) Double-clicked soundfiles now open correctly in all versions. 
.73 Fixed varispeed clicking for the third time. Fixed the output soundfile dialog. Ported the code from Think C to Codewarrior. Spectral display is now broken and needs to be redone (disabled for the present). 
.72 Fixed 16 bit Microsoft RIFF/WAVE file bug. 
.71 Fixed a minor bug which caused spectral dynamics crashing. Also fixed a typo (thank you Phil Burk). 
.70 Added spectral dynamics process. Added AIFC and Microsoft WAVE file support. Added 4-bit ADPCM. Opens double-clicked documents. More types show up in "Open" menu item. Fixed stupid error about number of bands in the phase vocoder and the spectral dynamics processor. It used to refer to the number of FFT points used, it now correctly refers to the number of filter bands used. 
.68 Added import and export of SND resources. Limited soundfile playback to AIFF and AIFC until Apple comes up with a stable sound manager. Sound Manager 3.0 is required for playback of 16-bit files. Added a limited spectral gate to the phase vocoder. Fixed old bug in pitch shifting. 
.67 Added soundfile playback. 
.66 Added windowing selection for both convolution and the phase vocoder. Added "Vary by Pitch" /"Vary by Scale" selection in varispeed.
.65 Fixed crashing at the end of long varispeed calculations, cleaned up memory allocation (especially for convolution), added ring modulation (spectral convolution), cleaned up dialog annoyances. Made output window resizable, and made it white on black (like a scope). Added bibliography screen. 
.64 Added varispeed processing, added many things to the function dialog. 
.63 Added TEXT soundfile format. Added interpolation, sinc and number of cycles to function dialog. Added ramp enveloping of impulse to convolution. Added popup menus.
.62 Added function window for multirate phase vocoder. 
.61 Sped up pitch transposition significantly, allowed pitch transposition by semitone and time warping by desired length.
.60 Added the phase vocoder, phase vocoder Csound analysis and show output. Fixed problem with normalization after moving convolution. 
.59 Added moving convolution. 
.58 Fixed problems with 8-bit AIFF files. 
.57 AIFF files used to read everything from SSND chunk to EOF, now only SSND chunk is read. The Binaural processor often destroyed AIFF headers, I think I have this fixed. DSP Designer files are now written as well as read (though I have no way of checking, please DSP Designer users, give me feedback). 
.56  Filter files are now closed properly after convolution. 
.55 Normalization feature disabled Binaural filtering, now fixed. Filter sensitivity added to Convolve. 
.54 Normalize after processing feature added. Dialogs adjusted for small monitors.
.5 Gain change added, 8-bit linear, 8-bit mulaw and 32-bit float added. (Jan 1992)
.4 Binaural filtering and process control added.
.3 Convolution and NeXT/Sun file formats added.
.2 Sound Designer II files and Header change added. 
.1 First release of SoundHack, converts AIFF files to IRCAM and back. (Fall 1991?) 
BIBLIOGRAPHY

Apple Computer, Inc., Inside Macintosh, Volume 1-6, Addison Wesley, Reading, Mass., 1985-91.
Begault, Durand R., Control of Auditory Distance, Ph.D.. dissertation, University of California, San Diego, 1987.
Begault, Durand R., 3-D sound for virtual reality and multimedia, Academic Press Professional, Cambridge, MA, 1994.
Blauert, J., Spatial Hearing, MIT Press, Cambridge, Mass., 1983.
Dolson, Mark, "The Phase Vocoder: A Tutorial", Computer Music Journal 10:4, 1986.
Ellis, Dan, "pvanal.c", part of the Csound distribution, MIT, 1991.
Gordon, J. W. and Strawn, J., "An Introduction to the Phase Vocoder", Digital Audio Signal Processing: An Anthology, editor J. Strawn, Kaufmann, Los Altos, Calif., 1985.
Mark, David and Reed, Cartwright, Macintosh C Programming PRIMER, Volume I, Addison Wesley, Reading, Mass., 1989.
Moore, F. Richard Elements of Computer Music, Prentice Hall, Englewood Cliffs, NJ, 1990.
Polansky, L. "More on Morphological Mutations: Recent Techniques and Developments, "Proceedings of the ICMC., San Jose, 1992.
Polansky, L. and McKinney, M. "Morphological Mutation Functions: Applications to Motivic Transformations and to a New Class of Cross-Synthesis Techniques." Proceedings of the ICMC. Montreal, 1991.
Reed, C. E. and Passin, T. B., Signal Processing in C, John Wiley, New York, NY, 1992.
Settel, Z. and Lippe, C. "Real-time Musical Applications using FFT-based Resynthesis", Proceedings of the 1994 International Computer Music Conference. Diem Aarhus, Denmark 1994.
Vaseghi, S. and Frayling-Cork, R., "Restoration of Old Gramophone Recordings", Journal of the AES, 40:10, 1992.

ACKNOWLEDGMENTS

Betsy Edwards for unending support, for teaching me how to write and for editing this long winded and technical document.

Larry Polansky for his mutation functions, for helping me edit this document. and for his unending encouragement, criticism and support.

Dr. Durand Begault of NASA-Ames for letting me use his binaural filter
coefficients.

F. Richard Moore, D. Gareth Loy and Mark Dolson for my initial exposure to the wonders of computer music.

Dan Ellis of MIT's Media Lab for helping me with the Csound analysis feature.

Zack Settel for relating his work on spectral extraction to me.

Scott Morgan and Geoff Hufford for all their Macintosh toolbox help.

Tim Walters, Jeanne Parson, Kent Clelland, Vincent Carte, George Taylor, Zach Belica, Phil Burk, Curtis Roads, Richard Boulanger, douglas repetto and many others for their many comments, bug reports and encouragement.

The Bregman Electro-Acoustic Music Studio at Dartmouth College for sponsoring my initial Power Macintosh development.

The Center for Contemporary Music at Mills College and the CalArts School of Music for sponsoring all of the rest of my activities.

All the wonderful people who sent me their music including:
 
=cw4t7abs 
Murray Anderson 
Michael Angell 
Marc Battier 
Eve Beglarian 
Eric Belgum 
Dan Bertolet 
Philippe Blanchard 
Greg Boddy 
Gregory G Booth 
Chris Brown 
Richard Brown 
Ray Brunelle 
Kim Cascone 
Damian Castaldi 
Rudolfo Caesar 
Jim Croson 
Matthew Davidson 
Xopher Davidson 
Bruno Degazio 
Rohan De Livera 
Paul DeMarinus 
Denis Dion 
Paul Doornbusch 
John Duesenberry 
David Eagle 
Ambrose Field 
Devin Fleenor 
Ryan Francesconi 
Howard Fredrics 
Sérgio Freire 
Joshua Fried 
Christopher Frye 
Alex Garvin 
Raviv Gazit 
Mark Geller 
Robert Gibson 
Chris Grigg 
Ray Guillette 
Bernard Günter 
Jose Halac 
Geln Hall 
Jeff Hass 
Patrick Heilman 
Peter Heijens 
Robert Henke 
Brian Hill 
Steev Hise 
Naut Humon 
John Hudak 
Joseph Hyde 
Øivind Idso 
Katchy 
Utah Kawasaki 
Leif Keane 
Jim Keiser 
Mendel Kleiner
Richard Lerman 
Gregory Lenczycki 
Daniel Lenz 
Polar Levine 
Eric Lyon 
Alistair MacDonald 
A. M. McKenzie 
Chris Meyer 
Steve Miller 
Diego Minciacchi 
Eric Moe 
Gary Lee Nelson 
Loren Nerell 
Yuko Nexus6 
NORSCQ 
João Oliveira 
Jim O'Rourke 
Bob Ostertag 
John Oswald 
Bernard Parmegiani 
Nye Parry 
Michel Pascal 
Maggi Payne 
Heather Perkins 
Richard Pinhas 
John Pospisil 
Richard Power 
Christopher Preissing 
Trent Reznor 
Robert Rich 
Jeremy Roberts 
Jøran Rudi 
Dirk Specht 
Bruno Spoerri 
Carl Stone 
Hans Timmermans 
Mark Tinley 
Felix Tod 
Barry Truax 
Hans Vallden 
Chris Vrenna 
Tim Walters 
Jeremy Wells 
Micheal White 
Beth Wiemann 
Bob Willey 
Michael Winnerholt 
Justin Winokur 
Stephan Wittwer 
Erling Wold 
James Wood