The NeXT computer offered a complete system for manipulating sound and music divided in two ``kits'' [Jaffe and Boynton, 1991]. The Sound Kit provided object-oriented access to the basic sound capabilities of the NeXT computer, allowing sound recording, playback, display and editing. The Music Kit provided classes for composing, storing, performing and synthesizing music. It allowed the communication with external synthesizers or the creation of internal software synthesizers.
Both kits were implemented in objective-C. They were mostly independent but could also be used together. The Sound Kit, for instance, could be used to record sound that could then be used in a Music Kit performance.
Although NeXT computers were discontinued after the company was bought by Apple the current Macintosh operating system, OsX, borrows many ideas from NeXTStep and it includes some toolkits such as Core Audio that can be considered as successors of NeXT's initiatives. On the other hand, the Music Kit is still maintained. We will now explain the Sound Kit and leave the Music Kit for the next section on music-oriented environments (see 2.4).
The most important class in the Sound Kit is the Sound class. It offers an Objective-C wrapper around the data structure that contains raw sound data. Sound objects can be instantiated from a sound file, or from the pasteboard, or can be created empty for recording.
The Sound Kit makes extensive use of the virtual memory and interprocess message passing provided by the Mach operating system allowing for efficient manipulation of large sounds. Sound data is rarely moved, is rather mapped into virtual memory. Copying operations employ ``copy on write''. Reading from a sound file is instantaneous, the data is not brought in from disk until they are required by the application. For storing a sound the Sound Kit uses a file format provided by NeXT. This format lets applications share data.
Playback and recording are performed asynchronously by background threads. The Sound class can contain DSP code to be synthesized instead of data, its use is transparent.
Finally, the SoundView class provides a mechanism for displaying data in a single Sound object.