- ...
have1.1
- If you followed the naming convention above, you can use
something like 1.3, this is sizeof(my_params) /
sizeof(param_spec)
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ...
functions.1.2
- They must have C linkage.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ... pkg->alloc()1.3
- See 1.7 for more information on these functions.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ...
buffers1.4
- If your machine only accepts a mono input, they'll
both point to the same buffer.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ....''1.5
- This can be used for optimization; if
your machine is not currently playing any notes, it can free up
processor time by doing nothing during ox_work() and returning ox_quiet.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ... scale1.6
- Scaling macros will probably be
added to octal.h to simplify this process.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ...
changes1.7
- This might seem unnecessary, but the point of doing
it this way is to keep the musician's interface to the data more
consistent, and ensure that hex numbers will interoperate with most
data types by allowing each machine type to choose how they will be
interpreted. Some have argued for the ability to sequence with
arbitrary data types, but imagine the analogous situation with
traditional music notation: would we really want a different-looking
set of note symbols for each instrument?
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ... ox_desc()1.8
- Note that this function is not called in
reference to any particular machine instance. It is ``library-wide.''
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ... lists.2.1
- Since ``initialize'' and ``describe'' are
global functions that don't have to be associated with any particular
machine, they're declared static.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ... constructor2.2
- The right constructor
takes a struct machine* as an argument; don't use the default
no-arg constructor at all.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.