world of sound Spectrum - Chapter 5: The operator PLAY for music coprocessor AY- 3-8910 (AY-3-8912).

ZX Forum #04
             5. Operator PLAY


   With this chapter begins the book,
dedicated music coprocessor AY3-8910 (or AY-3-8912), built-in 
ZXSpectrum 128, as well as in all its variations. 

   When you turn on ZX-Spectrum 128 on-screen menu appears, 
offering a choice of a few points. They are all well described 
in [2], in our case, select 128 BASIC. In this mode, you become

available operator PLAY, music service co-processor.

   In general, the format statement PLAY looks like this:


   PLAY A $ [, B $, C $, D $, E $, F $, G $, H $]

where A $ ... H $ - character string specifying
music program. Coprocessor itself uses to manage its three 
channels (A, B and C) only A $, B $ and C $. If you three 
channels a lot, you can only use two or even one, setting the 
appropriate number of strings (Empty string also indicates that

channel is not used).

   The remaining lines (D $ ... H $) are designed to control 
musical instruments, which can be connected to the ZX-Spectrum 
128 via MIDI-interface. 

   All defined Thong performed simultaneously, which allows you 
to create complex and beautiful melodies.


   In Thong uses special commands. Dwell on them in detail.

   Notes do, re, MI, FA, SOL, LA, and SR denote the current 
octave lower case Latin letters, respectively, c, d, e, f, g, a 
and b (international standard). Notes of the next octave 
indicated by capital Latin letters C, D, E, F, G, A and B. For 
example, the operator 


   PLAY "cdefgabC"

lose range of C major.

  Halftones are given marks # (sharp) and $
(Flat) facing the note. For example,
C sharp is written as # c, and B-flat -
$ B. To play a scale in C minor, enter


   PLAY "cd $ efg $ a $ bC".


   Permissible to use a few sharps or flats in a row. For 
example, note d can be written as # # c.


   Length is determined by a number from 1
to 9, standing in front of the note (Table 3). Installed length 
applies to all subsequent notes and rests (see command

&). By default duration is 5 (one quarter).

   In addition to traditional music, you may ask
triplets. For this purpose, the number of 10
12. Notes triplets follow directly after the number. For 
example: 


   PLAY "3fed & 11fed & fed"


   Triplets do not alter the established duration of notes. 
Besides the standard duration of notes you can use arbitrary. 
To do this in front of the note by the underscore character 
("_") put several parameters defining the desired length. For 
example, a note to a duration of 3 / 8 (1 / 8 +1 / 4) can be 
written as follows: "3_5c". The duration of follow-up notes and 
rests specifies the last option in the bundle.


   Quite strange effects are obtained
when connecting to the usual duration of notes and
triplets (eg: "3_12cde"). Experiment with it.

   Pro recording music, like, everything. Now on
commands:

   O - changed octave. Number of octaves must be a number from 
0 to 8 following the team (default octave 5).


   Relevance command option O musical octave is given in Table. 
4. Notice that the notes an octave below b 1 without a 
MIDI-interface will be played correctly. It is also important 
that although the maximum number is eight octaves, you are free 
to use the following - the ninth, denoting notes in capital 
letters. 

   N - delimiter options. Used to separate the two numerical 
parameters from each other. For example, when you have to ask

duration of the note immediately after the installation of an 
octave: "O4N5d". In essence, this team is overkill, because 
instead You can use the blank: "O4 5d".


   & - A pause. Pause time is set as well as the duration of 
notes (See above). For example: "6c & de3 & de".


   V - set the volume. Volume is given a number from 0 (minimum 
- off) to 15 (maximum). For example: "V10". The default volume 
is 15. 

   W - programming effects. Sheet music can be played not only 
with a fixed volume, but also with all sorts of effects: decay, 
wavelets, etc. Nature of the effect given by the number from 0 
to 7 in accordance with the Table. 5. Default

set the effect of 0.

   X - time parameter is the sound effect. For the effects of 0 
... 3 parameter sets duration of action for 4 and 5 - a period

6 and 7 - halftime (see Table 5). Value
parameter is chosen from a range of 0 ...
65535. The default setting is 65535.

   Effects are disabled at the end of thongs or when the volume 
(command V).


   The following program will demonstrate
action of all the effects:


   10 FOR A = 0 TO 7

   20 PLAY "UX1000W" + STR $ A + "cdef &"

   30 NEXT A


   Unfortunately, the music co-processor is only one envelope 
generator, so you will not be able to configure multiple 
channels for different effects simultaneously. Although the 
same effects you can use in multiple channels, with parameters 
of the envelope must be set only one of them, and the rest is 
enough to specify a command U (see above). 

   T - the pace of execution. Given by the number of
60 to 240. By default
pace, the team T120. You can only set the pace for the whole 
tune in Overall, therefore, it is defined only in

string of channel A (in other channels of T team is ignored.)

   (.) - Repeat (reprise). Music
phrase, bracketed, repeated twice. Permissible to use brackets 
in brackets (up to 4 attachments). Closing bracket without a 
corresponding opening will make a musical phrase repeated 
endlessly from the beginning of string. Use it For example, a 
bass and drum parts. 

   H - Stop operator PLAY. Met
this command in a string of any channel operator PLAY finished. 
Team used, for example, to exit the "looped" bass line, the end 
of the main melody. 

   !. " - A comment. Used to
insert explanatory. For example:


   PLAY "! SCALE:! CdefgabC".


   If after a string of comments in any commands not, then 
closing mark "!" set is optional.


   M - sets the mode channels.
Each channel can play not only a pure tone, but also the 
so-called white noise. The distribution of modes is given a 
number from 1 to 63, determined by the sum of the codes 
appropriate mode for each channel (Table 6). As well as an 
envelope generator, noise generator in the music co-processor 
only one, so you will not be able to configure multiple 
channels simultaneously noise with different frequency. By 
default, all three channels are set to tone (command M7).


   In the following example, channel A is set to the tone, and 
the channel B - the noise: 


   PLAY "M17cegbdfaCH", "O3cC)".


   If you tell M0, then all channels will be silent and you 
hear the crackling. 

   Y - install channel MIDI-interface.
A number from 1 to 16 following the team
specifies the number of channel interface, which
need to output music
data.

   Z - transfer control codes MIDI-interface. Code MIDI (a 
number from 0 to 255) must be located directly behind the team.

Permissible to pass just two bytes. In
this case, their values ​​must be separated
from each other by a space or a team of N.

   Note that all commands of the operator PLAY should be typed 
in capital letters! 

   Finally, we give a brief summary of the commands of the 
operator PLAY (Table 7) and messages errors that may occur 
during execution time (Table 8).