SOUND AND MUSIC PROGRAMMING ON THE ST by Richard Karsmakers
Originally published in ST NEWS Volume 1 Issue 3, launched on
August 16th 1986.
Most people think that the ST's sound chip isn't really much, but
it's not that bad at all; you'd better listen to the music in
Epyx' "Winter Games" and you'll know that a lot more can be done
with the ST's YM 2149 sound chip. All right, it's not as good as
the Amiga soundchip, but that one works through a complete
different principle; it "knows" a lot of sounds, which are kind
of "digitized" inside its memory. When the programmer asks for it,
it just spits it out with variable pitch, tone height, etc. People
should also know that many Yamaha keyboards actually use the YM
2149 soundchip, like ICG's Yamaha PSR 40. The sound coming from
that keyboard isn't bad at all!
Some of us might remember the intro from Psygnosis' "Brataccas";
it uses nice sound effects, as well as something that might be
described as "ring-modulation". It just shows that more can be
done than most people think on the field of music.
Back on the Commodore 64, some professional musicians started
programming music on it, like Rob Hubbard. They knew how to make
good music and they also knew the principles of programming the
built-in SID soundchip. Other music programmers, like Martin
Galway and Ben Dalglish, also knew what they had to do to make
good music and sound effects on it. I am sure that good
programmers might get almost as much out of the ST's sound chip as
that they did on the SID. The Atari 800 XL is also said to have
used the YM 2149 and I have heard of quite stunning music on those
machines!
Some of us already know that the ST system was originally designed
around another sound chip, the "AMY". Instead of the AMY, Atari
decided to build in the YM 2149 and the MIDI interface. Antiware's
digital preprogrammed synthesizer sounds really great when using
MIDI! But more about the AMY; here you will read a part of an
interview with Atari's vice president of research and development,
Shiraz Shivji. It is taken from a brochure of "Personal Computer
World". When you want to get it, together with a software list of
ST programs and lots more, please write to: SILICA Shop Ltd., 1-4
The Mews, Hatherley Road, Sidcup, Kent DA14 4DX, England. This
part of the interview was made by BYTE's Phil Robinson, in
December of last year....
BYTE: What about the sound capabilities?
Shivji: We had a project here started during Alan Kay's tenure - a
chip called AMY. And the ST was designed to have the AMY. But the
AMY did not happen. We had silicon, the first pass, in October or
November, and we had severe problems with it. It was kind of an
orphan project. There were a lot of people that had worked on it.
And if you have a chip that takes six or eight people who have
worked on it at different times, the chances of the chip working
are slim. But it's a good design.
BYTE: What does it do? What's so special about it?
Shivji: The approach of others is that during horizontal refresh
you go out to some place and put some memory out automatically,
and that goes through a DAC (digital to analog converter, RED)and
you have sound. Essentially, you're sampling at 15.75 kHz, which
is the typical frequency. So it's like a digital tape recorder.
You have a digitized sound and you're just putting it out. And it
needs enormous amounts of memory. The key is: how do you encode
sound? Form an information-theoretic point of view, there are two
problems with this approach. One is it's an enormous waste of
memory. Because you could encode whatever sound you're going to
play, as far as data is concerned in a sound piece, the data rate
is extremely low. And doing it in the digital tape recorder way,
you're wasting an awful lot of bandwidth and a lot of memory. The
second problem with other implementations is that you have only 8
bits and it's not really that good. Especially with CD's coming
out.
Amy was a chip that had 16 bits of information coming out. So
you could have 96 decibels of range. What you could hear! Amy was
a complete digital sound chip. It's called an additive-digital
synthesizer. It had an adder and 64 independent oscillators. It
has a model for sound and you feed it the parameters. But if you
do that you have to do an awful lot of preprocessing. We had hired
a lot of people. We had a VAX 780 devoted to it. We had equipment,
fast floating point array processors, and so on, to analyze notes.
We would get a tape of piano playing and then the VAX would
analyze it and would take the Amy model and give the parameters.
To play anything you needed to have parameters tables and feed it
to the chip.
BYTE: Is it still a possibility, then?
Shivji: It is still a possibility. We were going to have the Amy,
and then it didn't happen. Then we said, look, we have a base
machine that's a good machine. Every really doesn't care about
great sound, right? (The ACC thinks Mr. Shivji went terribly
wrong here! RED) So let's not penalize people that don't really
care. Let's put something that will allow people who really care
about sound to be able to play things . That's how the MIDI came
in. And so if you get Amy, we would even have it out as a MIDI-
chip. It's a great chip. Essentially all you do is load it up. Off
line you're doing an analysis of all the different things, and
then you have it in table form. And you can play it any time you
want. And you're not using up the bus that much.
BYTE: If it has that kind of processing capability, it probably
could build models for voice, too.
Shivji: Exactly. We actually could reproduce opera sound. As a
matter of fact, we had a sound lab. The type of sound that you
could hear from that chip was just incredible. Again, 16 bit.
Actually, the chip could even give you 17 bits if you wanted it
to. The problems are it uses too much memory and it hogs the
bandwidth. The bandwidth you could probably get around. However,
that's not the whole thing. You still have to move all that data
around. Of course you don't get the right data at the right place
for free. For example, you have to move it somehow from a disk
drive.
BYTE: So the Yamaha chip is there just to give it the basic sound?
Shivji: Yes. Just the basic sounds you need. Though, of course,
the ports are very usefull (the YM 2149 in the ST has two 8 bit
wide data ports, RED).
Mr. Shivji didn't give all the reasons for not using the Amy in
the ST; another reason was the manufacturer of the chip; he simply
couldn't produce it in large enough volume.
According to Data Becker's "ST Intern" (ISBN 3-89011-119-X; Data
Becker GmbH, Merowingerstraße 30, 4000 Düsseldorf, West Germany),
the YM 2149 sound chip is a "soundchip der spitzenklasse", so a
very good soundchip. It is compatible with General Instruments' IC
AY-3-8910, and it's called a PSG, which stands for Programmable
Sound Generator. It has 40 pins. The qualifications of the YM 2149
are (in short) are written on the next page.
- Three independent programmable tone-oscillators
- A programmable noise-genarator
- Complete software-controlled Analog output ports
- Programmable mixer for tones and noises
- Programmable waveforms
- two bi-directional 8 bit dataports
- TTL-Compatible
- Simple 5 volts operating conditions
The YM 2149 has 16 registers, whose functions are explained here:
Registers 0 and 1:
These registers determine the frequency of the tone signals
coming from ANALOG A. Not all 16 bits are used; only all 8 bits
of register 0 and the low 4 bits of register 1 are used. With
the bits of register 1 one can determine the note roughly, while
register 0 enables fine tuning. The total 12-bit value of these
registers determines the height of the tone; the lower the
value, the higher the tone.
Registers 2 and 3:
The functions of these registers are the same as those of
registers 0 and 1, but now for channel B.
Registers 3 and 4:
The functions of these registers are the same as those of
registers 0 and 1, but now for channel C.
Register 6:
This registers manipulates the noise generator with its lower 5
bits. Also here: the lower the value, the higher the noise fre-
quency.
Register 7:
In this multi-function register, the individual bits determine
different functions:
Bit 0: Tone from channel A on (0) or off (1)
Bit 1: Tone from channel B on (0) or off (1)
Bit 2: Tone from channel C on (0) or off (1)
Bit 3: Noise for channel A on (0) or off (1)
Bit 4: Noise for channel B on (0) or off (1)
Bit 5: Noise for channel C on (0) or off (1)
Bit 6: Port A is an output (1) or input (0) port
Bit 7: Port B is an output (1) or input (0) port
Register 8:
The lower 4 bits determine the volume of the signal coming from
channel A. Bit 4 has a special meaning. When it set (also, when
it is 1), the volume is determined by the waveform register.
Bits 0 to 3 (also the lower 4 bits) are then ignored.
Register 9:
Just like Register 8, but now for channel B
Register 10:
Just like Register 8, but now for channel C
Registers 11 and 12:
All 16 bits of these registers determine the length of the
waveform. The contents of register 11 are treated as a low
byte, that of register 12 as the high byte.
Register 13:
Bits 0 to 3 (agains the lower 4 bits) of this register are used
to determine the waveform of the waveform-generator as follows:
B3 B2 B1 B0 Waveform:
0 0 - - \__________________
0 1 - - /__________________
1 0 0 0 \\\\\\\\\\\\\\\\\\\
1 0 0 1 \__________________
1 0 1 0 \/\/\/\/\/\/\/\/\/\
1 0 1 1 \------------------
1 1 0 0 ///////////////////
1 1 0 1 /------------------
1 1 1 0 /\/\/\/\/\/\/\/\/\/
1 1 1 1 /__________________
Registers 14 and 15:
These registers belong to the two 8-bit ports. Port A has
register 14, whereas port B has register 15. Is a port
programmed for output (see bits 6 and 7 of register 7), then
the value to be put out can be determined by these registers.
This is the same as they are programmed for input.
So....now we know everything there is to know about the YM 2149
sound chip in the ST systems. But how can the soundchip be
controlled from BASIC (the language most people regularly use)? To
achieve sound in BASIC, it has two commands: SOUND and WAVE. SOUND
isn't really difficult to understand: it needs five parameters to
go with it, seperated by a comma:
SOUND register, volume, note, octave, length
The register can be 1,2 of 3, for channel A,B and C respectively.
The volume is determined by 4 bits, so this value can be between 0
and 15 (15 is the maximal volume). The value for the note can be
between 1 and 12 (I suppose there are 12 notes in each octave),
whereas the value for the octave can be between 1 and 8 (because
the YM 2149 has 8 octaves). The length of the note can be between
0 and 255. "1" stands for 1/50 of a second.
Now the WAVE command....that's more difficult, but not too
difficult if you've read the register-part of this article.
The WAVE command also needs five parameters, seperated by a comma:
WAVE channel, determine, waveform, period length, length
Through the "channel" parameter you can determine which channels
should be on, and to which channels noise should be added. You
must look at this parameter binary; it sets or clears bits 0-5 in
register 7. An example: value 37 (that is binary %100101) does the
following: you have to know that when a bit is cleared in register
7, the actual channel is activated. In the WAVE command, you have
to set the bits to set the channels (and to clear register 7). You
see that bits 0,2 and 5 are set with the value 37. This means that
channels A and C are activated, while noise is added as well to
the latter channel (channel C). Get it? Now, let's go on with the
second parameter. That determines whether the volume is set by
the volume parameter in the SOUND command, or by the waveform in
the WAVE command (that way, the volume differs during the whole
note). So it sets or clears bits 4 of registers 8 to 10. This
parameter also has to be treated as a binary value of three bits -
so the range would be between 0 and 5. Bit 0 of this value is for
channel A, bit 1 for channel B and - of course - bit 2 is for
channel C. If a bit is cleared, the volume of the corresponding
channel is determined by the SOUND command for that channel. When
a bit is set, however, the waveform determines the volume. So a
value of 0 lets all volumes be determined by the SOUND commands.
The third parameter affects register 15 (see the above), to enable
the programmer the choose from 16 waveforms (so the value of this
parameter will be between 0 and 15). Look at these waveforms above
and you will have to experiment a little, too. The fourth
parameter determines the length of a period (vibration) of a
musical note. It can be between 0 and 65535, where you might get
additional frequencies of the value choosen turns out to be
smaller than about 1000. Remember: the shorter the period, the
higher the frequency! The fifth parameter, to close this part of
this article, determines - like the SOUND command - the total
length of the note. I suppose this value can also be between 0 and
255.
We hope to have told you all you need to know for programming
sound on the Atari ST's sound chip. If you think you have made a
terrific piece of music (better than "Temple Trilogy",
"Brataccas", etc.), please let us know. If it's not too big, we
might even publish the source code (or BASIC listing) in a future
issue of ST NEWS....
Disclaimer
The text of the articles is identical to the originals like they appeared
in old ST NEWS issues. Please take into consideration that the author(s)
was (were) a lot younger and less responsible back then. So bad jokes,
bad English, youthful arrogance, insults, bravura, over-crediting and
tastelessness should be taken with at least a grain of salt. Any contact
and/or payment information, as well as deadlines/release dates of any
kind should be regarded as outdated. Due to the fact that these pages are
not actually contained in an Atari executable here, references to scroll
texts, featured demo screens and hidden articles may also be irrelevant.