Skip to main content

PROFESSIONAL SOUND PROGRAMMING ON THE ST by Holger Gehrmann

The  fashion  of  programming complex pieces  of  music  on  home 
computers   started  already  at  the  very  beginning  of   home 
computing,  when  the VIC 20 from Commodore hit the  market.  The 
soundchip  has one noise-and three tone  generators,  that  could 
only  produce  a  pulse  waveform.   The  volume  could  only  be 
controlled  for  all  tone  generators  at  once.   The  idea  of 
programming  complex  musical compositions didn't even  find  its 
origin  then,  because the musical capabilities were  simply  too 
limited.

All changed when the Commodore 64 appeared. And already two years 
after  its launch,  very complex songs were finding their way  to 
the users which were packed with sound effects.  No  wonder:  The 
sound capabilities of this computer could easily match those of a 
small and cheap synthesizer system.

One would think that a new computer like the Atari ST should even 
outdo the sound possibilities of the 64, but the ST unfortunately 
contains  a  regular  Yamaha chip.  It offers  three  pulse  tone 
generators,  to which noise can be mixed individually. The volume 
can  be defined for every voice independently (that is  quite  an 
advantage).  Except  for  these,  a  kind  of  waveform  also  is 
implemented, that can not be used properly.

The musical qualities of the ST are thus significantly less  than 
those of the Commodore 64.  The tone  reproduction,  however,  is 
better:  The  SID of the 64 works analogue (so there'll  be  more 
ground  noise),  whereas the Yamaha chip of the ST works  digital 
(which takes care that a clearer note appears).

After programming many songs on the VIC 20 and Commodore 64, I of 
course  wanted to expand my sound programming experience  to  the 
ST.  Since  I had already programmed small  test-compositions  on 
the  Amstrad  (which  has the same  soundchip),  it  wasn't  that 
difficult to re-program my soundtool for the ST.  But I did  want 
to  build in a few extra options into my soundtool (which  I,  by 
the way, called SOund PROgramming Language) that would allow some 
extra sound effect possibilities.
The following sound effects can be established:

 The GLIDE effect:
The current note is continually increased and decreased.

 The MODULATION effect:
The  current  note is increased and than decreased all the  time. 
This produces a kind of VIBRATO, which makes the very 'flat' note 
of the ST sound a bit 'weaker'.

 The DOUBLE-TONE mode:
This  takes care that two different notes are toggled using  only 
one  tone generator.  This creates the impression that one  sound 
generator becomes two sound generators. The use of chords is much 
easier this way, and doesn't use that much sound generators.

 The BEND effect:
The next note is not directly played, but the program starts from 
the last played note and then increases/decreases to the  current 
note  (a  bit like the GLIDE effect).  This is  often  used  with 
electrical guitars.

 Volume modulation:
This is much alike the MODULATION effect,  but here the volume is 
continually increased or decreased.

 The TWO-VOLUMES mode:
Much  like the DOUBLE-TONE mode,  but here the volume is  toggled 
between two values continually.

 The NOISE-GLIDE effect:
This  sound effect is just like the GLIDE effect,  but this  time 
the  noise  genarators  that  can be mixed  into  the  sound  are 
increased and decreased all the time.  This effect can very  well 
be used to imitate drumming sounds.

Even  with all these features,  a proper tone quality  cannot  be 
reached.  That's  why I simulate the on the Commodore 64 so  well 
known waveform generator (ADSR). With SOPROL, this functions much 
like that on the 64,  but I included an additional  option:   The 
Attack-,  Decay-,  Sustain-and  Release  TIME  is  not  the  only 
variable thing,  but it's also possible to specify the step  size 
of  those.  This  feature  makes it easy  to  program  alienating 
effects.
The last problem is the use of the sound data in the source code. 
Since I only work with the K-Seka assembler from Kuma, this whole 
business became a bit tough, also because Seka doesn't offer that 
much user-service.
SOPROL controls every byte that it reads, to check if it's larger 
or equal to $F0.   If it is, that means that is has encountered a 
command.

The commands are:

$F0  JUMP      Jump to another position of the song
$F1  CALL      Call a sound-subroutine (e.g. if a part of a song
                has to be used several times)
$F2  RECALL    Jump back from a sound-subroutine
$F3  CHANGE    Change the sound effect settings
$F4  NOP       No operation

When the byte that was read comprised no  command,  SOPROL checks 
if  the  byte is larger than $C0.  If so,  that  means  that  the 
current tone-length has to be changed. The new tone-length can be 
calculated by: Length=Byte-$C0.

Whenever the byte that was just read is smaller than $C0,  SOPROL 
knows  that  an  actual  note  is  meant  here.  The  high-nibble 
comprises the octave and the low nibble the tone you wish.

Since  SOPROL  works  on  Interrupt  (using the  Vertical   Blank 
Interrupt queue,  ED.),  the main program has to write a  certain 
value on a certain memory location (I call this SONGFLAG most  of 
the time). The song corresponding with that number will be played 
until the value 0 is stored on SONGFLAG.

The first time I used SOPROL on the ST,  I used it in my  program 
called "Extensor",  which features five different songs. The next 
program I used it for was "Hollywood Poker".  Both programs  were 
published  through  Golden Games,  which I owned  for  50%  until 
recently.  Since I retreat from this company and will be  running 
my own software company called "ReLINE Software",  only  programs 
from "ReLINE" will feature SOPROL songs in the future.

I hope to have stimulated you to program sound on the ST by means 
of this article. Professional music is not only possibile through 
MIDI,  but  can  also be used if one works good enough  with  the 
generators of a sound tool or so.
Editorial Note:
Holger  Gehrmann  is a guy that programs  software  for  Amstrad, 
Commodore  64,  Commodore Amiga,  Atari ST and no  doubt  several 
other computers. It is amazing that he does things like this with 
the means he has (remember? He only uses K-Seka!). I hope he will 
continue  this  article  in the future,  in which  he  will  then 
explain the specific routines,  etc. But that's not sure. Anyway, 
he  will  soon supply us with some pieces of music  that  can  be 
included into our Synth Sample V...

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.