[up] [home]

Software

Updated 27-May-08Includes Open Sound Control

WinZip

Windows users will need a way to uncompress .zip files. Try www.winzip.com. Linux and Mac users can use zip.

PortMidi

You will need the PortMidi library to compile Serpent. You will need to compile Serpent for Linux. You do not need PortMidi if you get binaries for OS X or Windows -- PortMidi is built in.

If the PortMidi migration to SourceForge and associated documentation is not complete and you need help, please contact rbd at cs.cmu.edu.

Windows users should note that there is or was a bug in the Windows MIDI drivers such that if a MIDI input port is left open when your application exits, Windows will crash. This is an obvious security hole that allows even unpriviledged applications to bring down the system (although I suppose Windows is full of such holes). PortMidi for Windows includes a DLL, pm_dll.dll, which is the best known (to us) means, short of running a secure MIDI server, to detect when an application exits and safely shutting down. This works, for example, when the user types control-C to a command-line application. The DLL is small, so I recommend that you just copy it to the same directory as any application you build. This dll is included with the Windows version of Serpent, below.

Serpent

Serpent Runtime for Windows, 10-Jul-07 Version

Serpent Runtime for Mac OS X, 10-Jul-07 Version

Serpent Source for Linux, Win32, 27-May-08 Version, 10-Jul-07 Version

Serpent is currently released in three zip files, one each for Win32, Linux, Mac OS X systems. This may change from time to time.

Each zip file contains two versions of serpent.
The Win32 and Mac OS X zip files contain compiled executables. For Linux, download and compile the Source version.

The source files have been built on the following systems:

Serpent Documentation

See the doc folder in your source or binary installation. There is a copy of the serpent documentation online.

Important: Serpent Environment

Serpent uses the environment to figure out where to search for files.

Now, when you run Serpent (initializing its embedded PortMidi library), PortMidi will look for MIDI devices. By default it searches the IAC Bus first, and so "IAC Driver Bus 1" will be the first output device. The first device found is the default output device, so this is probably where you will send MIDI. You have configured SimpleSynth to receive from "IAC Driver Bus 1."

Make sure your audio is enabled and volume is up.

Linux

MIDI support on Linux varies. I use a Planet CCRMA Linux installation that has been configured for music work. There is support for USB MIDI devices. I can also use a software synthesizer, Timidity++. Timidity was originally designed to convert standard MIDI files to audio files, but it can also be configured to listen for MIDI in real time and synthesize audio. Since this is probably the most generic way to get MIDI output using Linux, I will provide details for this method. The "Linux Audio Users Guide - TiMidity Howto" is very useful if you have problems.
Now, see if TiMidity is working by going to portmidi/pm_test and runing ./test (user input is bold).
> ./test
Latency in ms: 1
begin portMidi test...
enter your choice...
1: test input
2: test input (fail w/assert)
3: test input (fail w/NULL assign)
4: test output
5: test both
6: stream test
4
0: ALSA, Midi Through Port-0 (output)
2: ALSA, TiMidity port 0 (output)
3: ALSA, TiMidity port 1 (output)
4: ALSA, TiMidity port 2 (output)
5: ALSA, TiMidity port 3 (output)
Type output number: 2
Midi Output opened with 1 ms latency.
ready to send program 1 change... (type RETURN):
ready to note-on... (type RETURN):
ready to note-off... (type RETURN):
At this point you should have heard a note. Continue typing RETURNs to prompts until the test program quits.

Note in this example that the portmidi output device number was 2. The default output device number is 0 (the first output), so to send MIDI to TiMidity, you will have to open device number 2 rather than the default device.