The MPEG-4 Structured Audio Book

By John Lazzaro and John Wawrzynek, CS Division, UC Berkeley.


MPEG-4 Structured Audio (MP4-SA) is an ISO/IEC standard (edited by Eric Scheirer) that specifies sound not as audio data, but as a computer program that generates audio when run.

One implication of this design is that encoding content in MP4-SA is a creative act, not an automatic one. Or more specifically, two creative acts:

  • Sound modeling. In MP4-SA, sound happens because a program written in the SAOL (pronounced "sail") computer language outputs audio samples. The algorithms coded in SAOL may model how musical instruments (like a piano or the human voice) create sound, or may process sounds (tasks like adding reverberation or mixing instrument sounds together).
  • Sound sequencing. Performance is sound moving in time: notes play in sequence to make a melody, faders sweep across a mixing console to blend a performance, etc. In MP4-SA, the score language SASL (pronounced "sassil"), the MIDI standard, and the SAOL language itself are all available to support sound sequencing.

The goal of this book is to show how to use SAOL, SASL, and the other MP4-SA tools to create these two types of content. We assume some familiarity with computer programming and algorithms, audio signal processing, and music and sound.

Next:A Tutorial Introduction.

Table of Contents

Part I. A Tutorial Introduction.

Part II. The SAOL Language

  1. Numbers and Variables
  2. Expressions and Statements
  3. Simple Core Opcodes
  4. Wavetables
  5. Buses and Execution Order

Part III. Instrument Control

  1. The SASL Score Language
  2. MIDI Instrument Control
  3. SAOL Instrument Control

Part IV. Advanced Opcodes

  1. Sound Synthesis Core Opcodes
  2. Filter Core Opcodes
  3. Signal Processing Core Opcodes
  4. User-Defined Opcodes

Part V. Special Topics

  1. Debugging SAOL Programs
  2. Templates
  3. The Slib Library
  4. AudioUnit Plug-Ins

Appendices (click for full list)

  1. Core Opcode Sorted Alphabetically
  2. Core Opcode Sorted by Opcode Type
  3. Core Wavetable Generators
  4. Standard Names
  5. Language Elements
  6. Language Rules
Acknowledgements and Bibliography

Copyright 1999 John Lazzaro and John Wawrzynek.