From The sfront Reference Manual by John Lazzaro and John Wawrzynek.

Part II/1: Installing Sfront



In this chapter, we describe how set up sfront to work on your machine, and how to test sfront to make sure it works properly.


Supported Platforms

Sfront is written in ANSI C and uses only ANSI C libraries. When executed, sfront creates ANSI C files that only use ANSI C libraries.

These attributes make sfront portable over a wide number of platforms, with ancillary files (makefiles, project files, etc.) and real-time support being the primary portability issues.

The right panel shows the platforms sfront is currently known to work. A checkbox in the R column indicates basic file rendering functionality.

The S, M, and P columns indicate support for audio output and input to soundcards, MIDI control input from an external controller, and plug-in support.

We currently provide a generic source distribution, suitable for use on most UNIX variants (including Linux and Mac OS X) as well as Microsoft Windows.

We develop sfront under Mac OS X; the sfront user community is instrumental in porting and testing to other platforms.

Thanks to Ross Bencina, Richard Dobson, Michael Gogins, Peter Maas, Kees van Prooijen, and Tim Thompson for Microsoft support. Thanks to Bertrand Petit for FreeBSD support. Thanks to the coreaudio-api and darwin list members, and Manfred Brockhaus, BUYO-BUYO-IGOR, Phil Burk, Richard Dobson, Dominic Mazzoni, and Juno for Mac OS support. Thanks to Michael Pruett for IRIX support. Thanks to Jeremy Voorhis and Christian Haines for testing AudioUnit plug-in support.

Platform Status

OS Type          | R | S | M | P |
OS X 10.7 -m32   | x | x | x | x |
Linux 2.4 -m32   | x | x | x |   |
Linux 2.6 -m64   | x | ? | ? |   |
MS Windows       | x | x | ? |   |
IRIX 6.5         | x | x |   |   |
Solaris 2.6      | x |   |   |   |
FreeBSD 3.4      | x | x | ? |   |
BeOS 4.5         | x |   |   |   |
HPUX 9.x         | x | x |   |   |

  R: sfront can create a C file, 
that when compiled and executed,
generates a WAV file containing
the performance.

  S: C files that can handle 
real-time audio output and input
from attached soundcards.

  M: Real-time MIDI control input
from an attached MIDI controller.

  P: Plug-in support.

x --> known to work
? --> untested drivers, please 
      report test results.

Compiler Support

Sfront, and the C code sfront
generates, compiles under gcc
on all platforms.

Under Windows, compiles using 
Microsoft Visual C++ compiler 
and Borland C++.

Under Mac OS X, compiles with 

Under Mac OS 9, sfront compiles,
but the C code sfront creates is
not completely stable (the sample
wavetable generator and MIDI 
file input are the major issues).

Downloading Sfront

Sfront is free software, distributed under the terms of the BSD license (without advertising clause). See the right panel to learn how to download the source distribution.

Unpacking wxyz.tar.gz files

The source distributions intended for Mac OS X, Linux, and generic UNIX systems are in the form of a UNIX tar file, compressed with the gzip utility (i.e. wxyz.tar.gz, or perhaps wxyz.tar if your browser automatically uncompresses files). The commands:

gunzip sfront.tar.gz
tar -xf sfront.tar

should unpack this file and create the directory sfront. If the download generates the file sfront.tar, only execute the second command.

Unpacking files

The distributions intended for Windows systems are in the form of a ZIP archive. Use a tool such as Pkunzip or WINzip to unpack this file and create the directory sfront.

The sfront directory tree

If you downloaded a tar.gz or zip file, unpacking the file will create a set of subdirectories under the sfront directory:

% cd sfront
% ls
examples/  sfman/   src/   bin/   lib/

The examples directories holds set of MP4-SA files to test sfront.

The src directory holds the source code to sfront.

After compilation, the bin directory holds sfront binaries.

The lib directory holds SAOL programming libraries, including the Slib library of low-level utilities.

The sfman directory holds a copy of the HTML manual you're reading right now, which starts at


Other files and directories may also be present.

Download sfront 0.99, 8/31/11

A source distribution is
available, which works well 
on Mac OS X, Linux, MS Windows,
and generic UNIX platforms.

To read about changes since the
last distribution, read this
change log.

Click on

[sfront.tar.gz : 4.73 MB]


[ : 4.92 MB]

to download the full source 
distribution for sfront, which
includes a large set of examples. 

Click on

[sfrontlite.tar.gz : 1.03 MB]


[ : 1.23 MB]

to download a minimal source 
distribution for sfront, which
includes a smaller set of examples.

An ANSI C compiler is needed to
create the sfront binary and to
compile sfront's output, and a
version of make is needed to 
try the examples. If you are a
DOS/Windows user and don't
have these tools, click on

[ : 1.8 MB]

to download a Windows port of 
the GNU gcc and make. Thanks to
Ross Bencina for this package.

Compiling sfront

To compile sfront under UNIX, begin by cd'ing to the sfront/src directory. Edit the Makefile in this directory, making the changes suggested on the right panel.

Once these changes are made, simply type

make install

If all goes well, this command will trigger the compilation of all the C source files that make up sfront, then link the object files to create the sfront binary, and finally copy the binary to the bin directory specified by the Makefile.

If all doesn't go well, please let us know so we can do our best to fix the problem. See these instructions for sending a bug report.

Makefile options

Before starting compilation, 
edit the Makefile and read 
the comments for suggestions
on how to customize sfront for
your environment. In particular:

BINDIR = ../bin/

BINDIR is where the binary of
sfront is copied. BINDIR defaults
to the sfront/bin directory, but
you may wish to put the binary
somewhere else. The complete path
for BINDIR must be in your shell 
path in order to use sfront on
the command line.

CC = gcc 

CC specifies the the C compiler.
On early versions of Mac OS X, the 
Developer Tools installs gcc as cc, 
and so  "gcc" must be changed to "cc".


In some systems, LINKLIB will need
extra options -- if you find that
compilation works but linking fails,
change this line.

If you use Windows ...

If you own the Microsoft Visual C++ or Borland C++ compiler, you can use it to compile sfront and the C files it creates, by following the directions above. Microsoft users will need to use the project files locating in the win/ directory to make sfront. These files were supplied by Richard Dobson.

If you don't own a C compiler, you can download the Windows port of the GNU development tools, using the link on the right panel. Thanks to Ross Bencina for putting this download together.

To fully use real-time audio support under Windows, you should download and install the latest version of Developer Microsoft DirectSound.

GNU Tools for Windows

Click here to download a
ZIP file (1.8 MB) that contains
the Windows version of the GNU
C compiler and GNU make. 

If you own a Mac ...

We recommend Mac OS X for Macintosh users; sfront compiles and has been well tested on 10.7 (Lion) and 10.4 (Tiger). We do not have access to 10.5/10.6 machines, and so compatability reports would be appreciated. For stand-alone programs, sfront supports low-latency audio I/O under OS X using the CoreAudio framework. Sfront also supports the AudioUnit plug-in format.

Sfront also compiles on Mac OS 9, using the the free MPW system to compile sfront and the C files it creates. Build sfront as an MPW tool and add it to your path, so that it can be used as a command-line tool in the MPW shell. Also build sa.c files as MPW-tools.

MIDI file and sample file reading is unstable under MPW, and so several of the examples shipped with sfront will not work under OS 9.

Developer Tools for Mac OS X

For 10.7/10.6 users, the Xcode developer 
tools are available as a free download 
via the Mac App Store application.  

Otherwise, the boxed Mac OS X set 
includes a developer CD, that 
contains the Apple cc compiler and 
many other development tools. Some 
Macs have these developer tools 
installed at the factory. Pre 10.6
userscan also obtain these tools
for free, by becoming an ADC Online 
member, and downloading the tools
from the ADC website.

MPW for the Mac (Mac OS 9 only)

Click here to download a 
free compiler and development
environment for the Macintosh. 

Testing sfront

The sfront distribution includes a set of example files, to test different aspects of the program. The example files are located in subdirectories that are in sfront/examples. If you installed a packaged version of sfront, copy /usr/doc/sfront/examples to your home directory). Not all sfront distributions contain the same examples, due to file size and legal issues.

Each of the example directories share a common structure. The directories include a Makefile, a SAOL file, and any other files needed in the example. See the right panel for a description of the examples.

Entering any of these directories and typing make results in the generation of an output.wav audio performance (an exception is the example in, which cannot be made until example beat is made). Mac OS X users may need to change the CC in each Makefile, from "gcc" to "cc".

The simplest example is examples/min, which should exist in all sfront distributions. Enter this directory, type make, and the command should finish a few seconds later, after running

  • sfront, which produces the file sa.c.
  • The C compiler, which compiles sa.c to produce sa.
  • The object file sa, which creates the file output.wav.

If these commands execute, and if the output.wav file sounds like a short synthetic melody, then sfront works on your system.

Sfront Examples

The number of examples in
your sfront distribution 
depends on the type of 
distribution you have.

Listed below are examples 
which may included in your
version of sfront. ES 
indicates the example was
written by Eric Scheirer.

name       test coverage
bach       MIDI files
beat       SASL table lines (ES).
claps      AIF soundfile (ES).
elpelele   MIDI files (ES)
gliss      sfront control port.
in         input_bus
min        general-purpose
pc         general-purpose (ES)
perc       spatialize, reverb.
scr1       MIDI files (ES)
speedt     WAV soundfile,
           speedt core opcodes.
torvalds   input_bus, soundfiles
vowels     parametric filters (ES)

For your convenience, the top-level examples directory contains a Makefile that generates the output.wav file for all of the examples at once. Typing make at this level runs all of the examples in order. Depending on your machine, this may take a good fraction of an hour to run.

SAOL development using sfront is easiest to do using make. You may wish to copy the Makefile from one of the examples for your own development work. The right panel shows the list of commands recognized by each Makefile.

Makefile Usage

invocation      function
make          create output.wav 
make clean    delete all created
              files, including ~'s.
make mp4test  tests binary encoding
make safe     cp output.wav safe
make compare  cmp safe and output.wav
make timing   times ./sa execution

The rtime directory contains several examples of audio playback, real-time interactive, and AudioUnit plug-in uses of sfront. These examples generate real-time low-latency audio output, in response to MIDI and audio input.

The right panel describes these examples. All of the examples run under Mac OS X, and all non-plug-in examples will run under Linux. Some of the examples should run in other environments with real-time sfront support, including SGI Irix and Microsoft Windows.

We have tested these examples on an x86 Linux (32-bit, gcc -m32) machine using the standard Linux OSS drivers and a PCI 128 soundcard, and on an Apple Powerbook G4 550 Mhz with an Edirol UM-1S USB MIDI interface.

To run an example under Linux, cd into its directory and type make. To run a (non-plugin) example under Mac OS X, copy Makefile.osx to Makefile and type make. Examine the README file in each directory to learn how to modify the example for other environments.

To build an AudioUnit example under Mac OS X, cd into its directory and type make install (for the plug-in examples, the default Makefile in the directory is the OS X Makefile).

Interactivity and Plug-Ins

Examples in the examples/rtime/
directory are real-time applications,
that generate audio output in response
to audio and MIDI input signals.

name       test coverage
aatest     the simplest audio
           test -- streams a 
           MIDI file to audio out.
ascii      monophonic sine-wave
           instrument, played via
           the ASCII keyboard.
linain     simple reverb unit, that
           processes audio input
           and generates audio out.
linmidi    polyphonic sine-wave 
           instrument, triggered by
           signals on the MIDI In
           port on the soundcard.
linbuzz    a real-time instrument
           like linmidi, that uses
           Slib to add pitch wheel,
           mod wheel, and channel
           volume controls.
linvoc     envelope follower patch,
           that uses MIDI In and 
           audio in signals together
           and generates audio out.
au/hiss    an AudioUnit Effect plug-in
           that adds random noise to
           the audio input.
au/sin     an AudioUnit MusicDevice 
           plug-in that is a simple
           sine-wave virtual instrument.
au/lpf     an AudioUnit Effect plug-in
           that is a low-pass filter.
           Lpf includes a Cocoa UI 
           view, and is based on the 
           FilterDemo example in Apple's
           AudioUnit Programming Guide.


If you use sfront extensively, or if you try to use sfront on a new platform, you will probably uncover bugs in the program.

By sending a bug report along to us, you can help make sfront a better program.

The right panel explains what makes a good bug report, and where to send the bug report.

Next section: Part I/2: File Rendering

Bug Reports

Send bug reports to:

Ideally, include:

-- ASCII versions of the SAOL
   and SASL files.

-- The C file sfront produced,
   or the error message sfront

-- If the C file sfront produced
   didn't compile, the compiler
   error messages.

-- If the file produced by sfront
   crashed while running, any ASCII
   messages printed by sfront or the

-- Information on the platform 
   you're running on, including
   type of OS (including version
   number) and type of compiler 
   (including version number).

-- The version number of sfront.

-- A short note explaining the problem,
   including what you heard.

-- DON'T send any binary files (.mp4,
   output.wav, ect) at first -- I'll
   let you know if I need them later.

Copyright 1999 John Lazzaro and John Wawrzynek.