From The MPEG-4 Structured Audio Book by John Lazzaro and John Wawrzynek.

Change Log for John Wawrzynek Markup July 1999

Sections

Introduction to Change Log

Preamble

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

Appendices

  1. Aspects of MP4-SA Not Covered in This Book
  2. Core Opcode Sorted Alphabetically
  3. Core Opcode Sorted by Opcode Type
  4. Core Wavetable Generators
  5. Standard Names
  6. Language Elements
  7. Language Rules
  8. MP4-SA Language Standard (pdf file)

Acknowledgements

Bibliography

Introduction to Change Log

The left side describes comments John Wawrzynek made on a printed version of the first draft. The title links to a place in the document close to the reference.

The right side describes the document changes made in response to the comment. A purple color implies action still pending; a red color implies action taken.

 

Preamble Comment

Modeling examples?

K&R uses as examples useful little programs, such as gettline, hash functions, ... the book therefore doubles as a recipe source. We would do well to emulate it.

Also, because the sample little programs are substantial, the book serves as a style guide.

Response

Yes, I agree. This should be part of the expansion into a real book.

Part I: Tutorial

 

The Execution Model

[1] Didn't like phrasing in first paragraph -- "when we decide a sound is interesting -- since the act is unconscious.

[2] Didn't like "simulation" to describe running a program, preferred "execution".

[3] Didn't like "WAV file" as shorthand for audio file.

[4] Didn't like terse explanation/introduction to passes.

Response

All fixed.

A Simple Example

[1] SASL pass description uses i-pass in a confusing way.

[2] Execution replaces simulation as word describing running the program.

[3] Replace "The asig type indicates ... it runs at the a-rate" with "at the audio rate".

[4] Missing "the", un-TT's a, bad usage of specifically and D/A convertor.

Response

[1], [2], [4] fixed.

[3] uses a-cycle, since the new pass description clarifies its meaning.

Playing a Melody

[1] wondered how many bits of pi were needed for the sine oscillator to be perceptually indistiguishable

[2] uses phrase "system code" without explanation

Response

[1] 3.0 to 3.1 can be heard; 3.1 to 3.14 cannot. Still, I left it full precision to that it said "pi!" to the reader ...

Fixed [2]

In Reverberant Stereo

[1] Didn't like "buses are created at the start of the simulation"

[2] Explain instrument execution ordering rules for simple case

[3] Block diagram for example.

[4] Differentiate the two uses of imports (global variables and SASL control statements).

[5] Add "be" in "The a-pass section shows how unindexed arrays ..." sentence.

[6] Stereo signals or array signals, but not stereo arrays.

[7] Rephrasing label description.

Response

All fixed.

Part II/1: The SAOL Language: Numbers and Variables

 

Introduction

[1] Break out "instr signal variable"

Response

[1] Made it part of a bulleted list.

Numbers

[1] Numbers are stored or represented, not defined.

[2] IEEE-754 explanation.

[3] Typo on right panel

Response

[1], [2], [3] Fixed.

Declarations

[1] add "definition" after instr

[2] change [legal] to Legal in right-hand side titles throughout.

Response

[1],[2] Fixed.

Instr Variables

[1] clarify when an i-rate imports variable is set to the value of its global variable

[2] rewrite "imports for SASL" subsection

Response

[1], [2] fixed.

Global Variables

[1] clarify when startup runs

Response

[1] fixed, although your suggestion wouldn't work (start-up runs at i-rate long before simulated time even starts ticking away, so that i-rate variables can be used to do things like initialize global wavetables, ect).

Standard Names

[1] The book -> this book

Response

[1] done.

Part II/2: The SAOL Language: Expressions and Statements

 

Arithmetic Expressions

[1] Redoing columns where lineup is a problem [2] Noting 4-function precedence the same as C

Response

[1], [2] done.

Arrays and Expressions

[1] Rounding rules

[2] Redo comments

Response

[1], [2] done.

Assignment Statement

[1] Rephrase rule, and put into summary.

Response

[1]. Done.

Part II/3: The SAOL Language: Simple Core Opcodes

Starting with this chapter, only changes that are pending will be in this log -- doing the log was taking more time than doing the changes!

 

Pseudorandom Numbers

[1] Add illustrations to right panel.

Response

Part II/4: The SAOL Language: Wavetables

Examples requested in the following sections:

  • Periodic Waveforms.
  • Table Playback.

Response

Part II/5: The SAOL Language: Buses and Execution Order

Requests an example using outbus.

Response

Part III/1: The SASL Score Language

[1] Are SASL commands allowed to be put in an MP4 file with the timestamps out of order?

[2] Streaming and SASL section choppy.

Response

[1] Yes, time order of SASL lines can be totally random.

[2] Tried to improve it, could still use more work.

Part III/2: MIDI Instrument Control

Questioning "a MIDI File command executes when the trigger time is less that the current clock time".

Response

The "that" is wrong, but the content is correct here -- the standard explicitly says less than, not less than or equal to, for all trigger-related items. This issue comes up several more times in the comments ...

Part III/3: SAOL Instrument Control

Several "less than" comments on trigger times.

Response

See III.2.

Part IV/1: Sound Synthesis Core Opcodes

No pending comments.

Response

Part IV/2: Filter Core Opcodes

Suggests using hash-defines for oparray example, once it they are added to sfront

Response

Part IV/3: Signal Processing Core Opcodes

Noted that filters are also signal processing core opcodes.

Response

Can't think of a better title, since this is really the miscellaneous core opcode section, any suggestions?

Part IV/4: User-Defined Opcodes

Response

Next section: Back to Book

 

lazzaro [at] cs [dot] berkeley [dot] edu

UC Berkeley/CS Division/413 Soda Hall/Berkeley CA 94720

(510) 643 4005