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

# Appendix L: MP4-SA Items for COR2 (March 2002)

## Item 1

In subclause 5.7.3.3.5.2 (Determination of instrument output width and bus width), replace the second sentence of the first paragraph with:

the width of each bus is either provided by a send statement (subclause 5.8.5.5) or is determined by the sum of the output widths (subclause 5.8.6.6.8) of the instruments routed to that bus in a single route statement (subclause 5.8.5.4).

## Item 2

In subclause 5.7.3.3.5.2 (Determination of instrument output width and bus width), remove the beginning of the third sentence:

Only for the purpose of calculating bus widths

## Item 3

In subclause 5.7.3.3.5.2 (Determination of instrument output width and bus width), add the following note at the end of the first paragraph, before EXAMPLE 1:

NOTE: if the output width of an instrument depends on outchannels, and the bus width of the bus where that instrument is routed is not specified by means of other send and route statements, the orchestra may be indeterministic. Programmers should pay special attention in checking the deterministic behavior of the orchestra or make use of determined bus widths (subclause 5.8.5.5).

## Item 4

In subclause 5.7.3.3.5.2 (Determination of instrument output width and bus width), in EXAMPLE 1 replace the second route with:

route(bus2, i2, i1);

## Item 5

In subclause 5.7.3.3.5.2 (Determination of instrument output width and bus width) remove instr i3 from the pseudo-code. Replace the paragraph following the pseudo-code with:

In this orchestra, the global sequencing rules (subclause 5.8.5.6) specify that instrument i1 precedes instrument i2, and instrument i1 and i2 precede instrument i4. Instrument i1 has two channels, so bus bus1 has two channels. Instrument i2 has two channels, since it gets input from bus1. The bus bus2 has four channels, two each from i2 and i1. The instrument i4 has four channels, since it gets input from bus2.

## Item 6

In subclause 5.8.5.3.2 (Signal variables), replace the second part of the paragraph following <array length> specification with:

If the latter, the array length shall be the same as the number of input channels or output channels of the orchestra, respectively. It is illegal to use the token inchannels if the number of input channels to the orchestra is 0.

## Item 7

In subclause 5.8.5.5 (Send statement), change the definition of <send statement> to be:

send(<ident>;<exprlist>;<namelist>)

## Item 8

In subclause 5.8.5.5 (Send statement), in the paragraph beginning with "Any bus may be routed to more than one effect instrument" replace the first sentence with:

Any bus, except for the special bus output_bus, may be sent to more than one effect instrument and/or instantiations; in this case, when the simple identifier is not used, it is illegal to refer to a bus with more than one length.

## Item 9

In subclause 5.8.6.5.1 (Syntactic form), replace the line following the <tablemap declaration> with:

<array length> and <namelist> as defined in subclause 5.8.5.3.2, except that in the instrument scope the tokens inchannels and outchannels refer to the input channels and output channels of the instrument, respectively.

## Item 10

In subclause 5.8.6.8.5 (outchan), replace standard name description with:

The standard name outchan, in each scope, shall contain the number of channels ofoutput provided by the instrument instantiation with which that scope is associated, in the sense described in subclause 5.8.6.8.4.

## Item 11

In subclause 5.8.7.4.1 (Syntactic form), replace the last sentence of the first paragraph to:

If the array width is the special token outchannels, then the array width shall be the same as the number of output channels to the associated instrument instantiation (in the sense described in subclause 5.8.6.8.4).

## Item 12

In subclause 5.8.7.5.1, (Syntactic form) after the <opcode var declaration> lines, replace the first two lines as follows:

<namelist> and <instr variable declaration> as defined in subclause 5.8.5.3.2 and subclause 5.8.6.5.1. In the opcode scope, the tokens inchannels and outchannels refer to the input channels and output channels of the associated instrument,respectively (in the sense described in subclause 5.8.6.8.4).

## Item 13

In subclause 5.8.6.6.2 (Assignment), add at the end of the third paragraph (If the lvalue denotes an entire array...):

In the case that lvalue depends on the ordering of computation of the right-hand-side expression (e.g. if an entire array is multiplied with one of its elements), lvalue is undefined.

## Item 14

In subclause 5.8.6.6.11 (Extend), in the third paragraph replace the following text:

or the rate of the guarding expression containing the statement, or the rate of the opcode containing the statement, whichever is fastest.

with the text

or the control rate if the rate of the guarding expression containing the statement, or the rate of the opcode containing the statement, is faster than the rate of the expression parameter.

(MP4-SA Book Author Note: The purpose of this text is to make a-rate extend statements illegal.)

## Item 15

In subclause 5.8.6.6.11 (Extend), before the NOTE add:

The extend statement shall not be executed in an instrument instance that is created asthe result of a send statement referencing the special bus output_bus.

## Item 16

In subclause 5.8.7.5.1 (Syntactic form), at the end of the second paragraph add the following paragraph:

A variable shall not have a rate faster than the rate of the opcode. Standard names faster than the rate of the opcode are not defined in the opcode. The imports tag shall not be used for local k-rate signals when there is no global variable of the same name.

## Item 17

In subclause 5.8.7.7.3 (Shared variables and statements slower than the rate of the opcode),at the end of the third paragraph add:

Statements that contain expressions of type specialop (subclause 5.9.2) are executed both at the k-rate and a-rate, and those expressions return values as specified in subclause 5.8.6.7.6 and 5.9.2.

## Item 18

In subclause 5.9.2 (Specialop type), add at the end of the third paragraph:

Calls to specialop type opcodes are not allowed in iopcodes, kopcodes and opcodes. If a call to a specialop type opcode is present in an aopcode, the specialop opcode is executed both at k-rate and a-rate according to rules specified in subclause 5.8.7.7.3.

## Item 19

In subclause 5.9.11.1 (rms), replace the sentence:

It is a run-time error if length is provided and is negative.

with

It is a run-time error if length is provided and is not strictly positive.

## Item 20

In subclause 5.9.12.3 (downsamp), in the fourth paragraph replace:

0<i<SR*KR

with

0<i<SR/KR

## Item 21

In subclause 5.C.3 (Syntactic grammar for SAOL in yacc), in senddef replace

identlist

with

namelist

Return to:

Appendix Cover Page