Supported Platforms

The MusicKit currently runs on the platforms described in Table 1:

Table 1. MusicKit Supported Platforms

OpenStep 4.2/m68k (NeXT)YYY
OpenStep 4.2/Intel (with ISA 56k card)YYY
Windows XP (using GNUstep)PartialYN
MacOS X-Server V1.0-1.2YYN
Linux/Unix (Using GNUstep, portaudio/portmusic)PartialYN


All the platform specific stuff is located in the MKPerformSndMIDI framework. The MusicKit and SndKit interface to MKPerformSndMIDI using a C API which was originally modelled after some NeXT API (although that is now history, particularly for streaming audio). There are several versions of MKPerformSndMIDI underneath MusicKit/Frameworks/PlatformSpecific. You only compile one, all the versions are intended to produce one framework named MKPerformSndMIDI.framework which the MusicKit and SndKit link to.

The two versions under most active development are MKPerformSndMIDI_MacOSX and MKPerformSndMIDI_portaudio. The latter uses the multiplatform portaudio and portmidi library to map to the platform specific API and this is the means to interface with Linux and Windows platforms.

MacOS X support

While there is now MacOS X support in portaudio, historically MKPerformSndMIDI_MacOSX existed before it and I've personally continued to use it to ensure MacOS X support is first class. All MIDI access is done using CoreMIDI API calls and all sound I/O is done using CoreAudio.

AudioUnits are supported. SndAudioUnitProcessor allows loading and using existing AudioUnits as a SndAudioProcessor, so you will be able to plug other developers AudioUnits into your SndKit sound processing stream. The source for AudioUnit processing is located in MusicKit/Frameworks/PlatformSpecific/AudioUnits.

One AudioUnit issue is whether a SndKit program can function as an AudioUnit. In theory this should be possible once Cocoa apps can draw their own AudioUnit GUI, however this depends on Apple.

Linux support

Linux/Unix support using the GNUstep library is partially completed and looking for more volunteers. A performance framework (MKPerformSndMIDI_portaudio.framework) using the portaudio library has been completed, porting the MusicKit to Intel Linux. Streaming sound I/O and MIDI output works, but MIDI input needs further work, please help! Potentially other Unix platforms will work (SGI, Solaris, FreeBSD, AIX etc) if they are supported in the portaudio library and GNUstep.

Installing GNUStep

Install GNUStep on your system in the usual fashion, according to the build guide. You may find binary packages are available on some Linux distributions such as Debian. The following versions of GNUStep packages are known to work:


Install the library using:

tar xzvf gnustep-make-2.2.0.tar.gz
cd gnustep-make-2.2.0
sh ./configure --enable-import
sudo make install


We continue to use #import since it has been reinstated according to this email exchange. Older gcc versions may produce spurious warnings.


Install the library using:

tar xzvf gnustep-base-1.18.0.tar.gz
cd gnustep-base-1.18.0
sh ./configure
sudo make install


Install the library using:

tar xzvf gnustep-gui-0.16.0.tar.gz
cd gnustep-gui-0.16.0
sh ./configure --disable-gsnd
sudo make install

Windows support

While other means of using the MusicKit on Windows is possible, the current recommended approach is using MinGW, the “Minimal Gnu for Windows”, together with GNUstep and the MKPerformSndMIDI_portaudio framework.

Currently the GNUstep AppKit support on Windows is incomplete, so your success running GUI applications will vary. However the MusicKit and SndKit run fine.

These instructions document the success I have had in getting MinGW, GNUstep, SndKit and MusicKit and all the supporting libraries compiled and running on a Windows XP system. Instead of repeating instructions for installation of each package that is better described by the package's documentation, I have listed the order and version number of each package that needs installing and the location of the documentation file. Please report problems you may encounter in getting things to build.

Install MinGW and friends

  • Install the minimal command line GNU system by running MSYS-1.0.10.exe.

  • Install complier, libraries and headers by running MinGW-3.2.0-rc-3.exe. Install into the C:/msys/mingw location.

    When installing MSYS, ensure that the user name or at least the home directory is a single name without a space, as this tends to break configure. This is further described in GNUstep's gnustep/core/make/Documentation/README.MinGW

  • Install the Subversion version control system and other development tools with the MSYS developer tool kit msysDTK-1.0.1.exe.

Install libraries supporting GNUstep

Install GNUstep

Read the instructions in gnustep/core/make/Documentation/README.MinGW. I installed GNUstep from the head of the Subversion tree. If you are working from the head of the Subversion tree also use:

. /usr/GNUstep/System/Library/Makefiles/

instead of

. /usr/GNUstep/System/Makefiles/

Configure gnustep-base

./configure CPPFLAGS=-I/usr/local/include LDFLAGS=-L/usr/local/lib

Configure the gnustep-gui (until libtiff can install into the GNUstep tree):

./configure --with-tiff-library=/usr/local/lib --with-tiff-include=/usr/local/include

Installation of Libraries Supporting SndKit

In addition to installing the common support libraries, the following steps need to be performed:

  • The Microsoft DirectX 9.0b SDK (free) needs to be installed for DirectSound operation.

  • The lame project needs patches to compile under MinGW. These patches may soon be incorporated into a lame distribution newer than 3.98.2.

  • The libshout project needs patches to compile under MinGW. These patches may soon be incorporated into a libshout distribution newer than 2.3.2.

MIDI on Windows

The MKPerformSndMIDI_portaudio framework supports MIDI. The downloadable sound (DLS) capability of DirectMusic (providing a MIDI oriented sample playback API to PC soundcards) is also supported when playing to a DirectMusic software synthesiser. There is minimal but usable support for downloading new DLS instruments to the software synthesiser. Eventually this functionality will be managed by portmusic cross platform in MKPerformSndMIDI_portaudio.framework