AMPLINEX 004

image
AMPLINEX issue 004 was published in March 1988. Each AMPLINEX magazine is stored as a 200K single-sided 80-track disk image file (.ssd file type). The image can be used to create disks for a BBC Micro or can be loaded into a BBC emulator. For the disks to run, the BBC (real or emulated) must have an AMPLE Nucleus ROM installed and be running the Hybrid Music System.

Music 5000 waveform designer

Kevin Doyle
As anticipated in the previous issue of AMPLINEX, the Music 5000 waveform designer software is now available. The Wave Designer (written by Mr Jonty Stockdale and sold under the name 'Soundsculptures') is a package consisting of a ROM, a floppy disc and a 140-page manual.
The software was originally written to work with AMPLE BCE but has been altered to integrate with the Studio 5000 software.
The Wave Designer is a collection of waveform design utilities linked to a mode 0 editing screen and with access to 13 waveforms in memory in addition to the one in the editor. Single waveforms or sets of 13 ('presets') can be saved to disc and additional software allows the waveforms to be loading into the Studio 5000 environment in place of the default waveforms supplied.

Installation

After following the ROM installation instructions the first activity is to revise the Studio 5000 system disc. This adds an extra line to the !BOOT file and copies four files to the Studio 5000 system disc.
It is worth warning those who have altered their !BOOT files that this process writes a completely new one - so you may wish to copy your existing file first in order to reconstruct it later.
You should also ensure that you have space for the four additional files on your Studio 5000 disc since the installation routine will simply start again if it encounters a 'disc full' error.
The Wave Designer normally operates using two discs: the System disc which, when !BOOTed, loads and runs the Wave Designer software and a Waveform disc which holds the finished waveforms and linking software for using the waveforms in the Studio 5000 environment.
A program is provided to create empty Waveform discs (for your own work) and a number of sample waveforms are stored on the disc supplied.

The manual

The manual begins with an excellent 12 page introduction to the principles of sound synthesis, explaining terms such as waveform, frequency and timbre and how the Music 500/0 synthesiser generates sound from waveform data. It also outlines the principles of waveform design, a subject which is expanded on in a later, lengthier appendix. The manual then explains each of the functions in turn with many sample screens illustrated.
With no waveforms loaded, reading the manual is rather an academic exercise and I would advise anyone beginning to use the product to turn to the chapter on loading waveforms and to load in one of the presets provided to use whilst reading the manual.

The editing screen

The Wave Designer operates via a mode 0 editing screen which consists of a display area allowing 128 individual points on a waveform to be moved on a scale from -127 to +127. Below the graphics area is a grid showing the 20 different functions associated with the f0-f9 keys.
The 128 points are manipulated with the cursor keys and a small arrow indicates which of the points is being edited. Information about the point number and its value is also displayed at the the top of the screen as it is being edited.

Sine waves and additive synthesis

An alternative method of waveform creation is provided using sine wave addition. Up to 64 harmonics can be assigned a strength (0-100%) and a phase (0-100%) and the program will then calculate the resulting waveform. Another means of creating waveforms is provided through the 'Pre-Vu+' feature which allows two waveforms to be combined.

The function keys

The function keys (f0-f9) are used to invoke the various utilities available. As well as performing the waveform and 'preset' filing functions - transferring between memory and screen or memory and disc - these allow the current waveform to be displayed in a continuous line (oscilloscope) format or as a filled solid about the horizontal zero axis. The current waveform or any of those in memory can be also be shown as a table of values.
Other functions allow the current waveform to be inverted (+ to -) or reversed (left to right). A utility is also provided to print out of any of the screens within the Wave Designer.
For those with a joystick there is the additional facility to create a waveform using this device.

Playing the current waveform

The Wave Designer provides a gateway into the Studio 5000 environment which allows the current waveform to be played through the Music 500(0) synthesiser. After selecting 'Play' from within the Wave Designer and inserting the Studio 5000 System disc, Studio 5000 is installed and a test program called 'Panel' is loaded and run.
The program provides a sample instrument definition in Notepad which plays using the Wave Designer's current waveform. The current waveform from the Wave Designer replaces the 'Hollow' waveform.
However, the transfer between the Wave Designer and the Studio 5000 only works for the current waveform - the waveforms stored in memory are lost. Waveforms in memory must be saved to disc before control is transferred to the Studio 5000.

Playing waveforms from disc

To use the saved waveforms in the Studio 5000 the 'Panel' program is used. When loaded the program provides a menu which allows individual waveforms (or complete 'presets') to be loaded in place of the default waveforms.
To play a loaded waveform you need to know which of the preset waveforms it replaced. Then the name of the preset waveform ('Bright', Broad' etc.) is used in the instrument definition to play the new waveform.
Another menu option in the 'Panel' program keeps track of the waveforms currently in use but a list of the defaults names and their corresponding 'bank' number provided in the manual soon becomes necessary if more than a couple of waveforms are loaded.
If the current waveform was transferred from the Wave Designer to the Studio 5000 for testing it is possible to transfer back into the Wave Designer to continue the design process. In this way the waveform design can be amended until the desired sound is achieved.

Conclusion

The Wave Designer is an intelligent and well-presented piece of software. The screen displays are clear and uncluttered and its many options allow a degree of control and flexibility beyond anything offered by AMPLE BCE. The manual provides a good deal of advice on the use of the product and my only criticism is its failure to give working examples of the functions as they are described.
My few minor criticisms of the software are mainly due to its 'closed' design. For example, the inability to access any other drive but 0 caused a lot of unnecessary disc swapping and I am sure most other users will have dual-sided if not dual disc drives. There was also no access to the operating system from within the Wave Designer which could be rather restricting.
Similarly, it would have seemed more logical (if only one option was to be included) to make the freehand design facility work via the cursor keys rather than only via a joystick. I also found that the print routine wouldn't work with my Star printer due to its not-quite-Epson compatibility - but there was no apparent means of altering the print routine.
The main disappointment with the package is in its level of integration with the Studio 5000 software. The switching between discs (Wave Designer System disc, Studio 5000 System disc, Waveform disc) to play waveforms became irritating - especially since hearing the waveform is the only real test of a new design.
I am sure that a higher level of integration is possible but I suspect that this would require the opening of some of the secrets of the Studio 5000 system, and that Hybrid Technology were unwilling to go that far.
The other effect of this low level of integration is, of course, that any waveforms created are only usable by others with the Wave Designer software.
The 'Advanced Sound Studio' software (which was to include waveform and envelope design) which Hybrid announced in July 1987 has yet to be given a delivery date or price.
I would, therefore, recommend this software to anyone who has an interest in extending their use of the Studio 5000 system and who is willing to invest a small amount of time in getting to know its features.
It corrects a glaring deficiency in the Studio 5000 system and is educative as well as effective in filling this gap.

The Wave Designer is available from:
Mr J Stockdale, 7 Newhey Road, Cheadle, Cheshire SK8 2AQ
priced £29.00 including postage and packing. Cheques should be made payable to 'J Stockdale'.
Please note this is a new address, different from that given in AMPLINEX 002.

Published in AMPLINEX 004, March 1988

You're on the Telephone Again

by P Chase

From the album 'Inside Stories'

Courtesy of Hybrid Technology

A song dedicated to a member of my family, one of an increasing number of 'phone-junkies'.

I see she's on the telephone
It's not that she is all alone
And although I have my own
I still hate the rotten 'phone.

Hear the sorry tale I tell:
The number of times I hear the bell
If time on-line is what they sell,
I'm not surprised BT do well!
 

Source: AMPLINEX 004 disk, file $.TELEPHO


Published in AMPLINEX 004, March 1988

Ocean

by Philip Wormall

 

Source: AMPLINEX 004 disk, file $.OCEAN


Published in AMPLINEX 004, March 1988

Adagio in G minor

by G H Richardson

Composed by: Albinoni

There are some beautiful chords and counter melodies in this piece and in order to obtain maximum control over their interpretation I used 7 VOICES which may be a little tedious but I think is worth it.

The organ at the beginning (section a) and in the middle (section e) is the untouched pre-set organ and has impressed most listeners with its realistic quality. The flute solo over the sustained lower strings in sections c and e is, I am sure, capable of improvement but is pleasant enough and is a modification of "Simpleins".

The strings (merely a renamed "stringsyn") sound quite acceptable in the lower range, but tend to become somewhat artificial in the upper register, although again the sound is not unpleasant. I was, however, restricted to 1 VOICE for "strings" because in most of it they already occupied 7 VOICES (one VOICE per part). There is probably some room for further experimentation here and possibly the ACTdemo (AMPLINEX issue 003) might prove helpful.

G H Richardson
 

Source: AMPLINEX 004 disk, file $.ADAGIO


Published in AMPLINEX 004, March 1988

China

by Mark A J Mulders

This is the first piece of music I composed using my Music 4000 Keyboard. It's really a very sloppy program, with unedited music parts and use of the M5TUNE command to obtain pitch changes in the music (aargh!), but I think it does sound right. I have found that using the Music 4000 makes it easier and faster to develop musical ideas. Actually, I couldn't do without it anymore!

(c) 1988 Mark A.J. Mulders
van Rooylaan 55
4871 SE Etten-Leur
The Netherlands
 

Source: AMPLINEX 004 disk, file $.CHINA


Published in AMPLINEX 004, March 1988

Andante

by Robin Johnson

Composed by: Beethoven

"Andante" is based on a Beethoven piece and uses 1 player which has (initially) 4, 4-channel voices being my approximation to a grand piano.

At the touch of a key it cycles between other instruments and I think it makes an interesting comparison.

Robin Johnson
 

Source: AMPLINEX 004 disk, file $.ANDANTE


Published in AMPLINEX 004, March 1988

Velos

by Michael Mellor

 

Source: AMPLINEX 004 disk, file $.VELOS


Published in AMPLINEX 004, March 1988

Gymnopedie Number 1

by Richard Bettis

Composed by: Eric Satie

This is a straight transcription of a piano score into AMPLE, converted to three parts, which are inherent in the music itself - a simple bass line, a chordal backing and the single line melody. I have used a couple of techniques which may be of use elsewhere.

The bass part is "double voiced", with an "Upright" and a new voice, "lowend" to add a bit of "buzz" to the bass notes. I could have written this into a single 4 CHANS voice, but have used a very short Echo to thicken up the voice. This makes up for the lower level of the "lowend" voice, and adds body.

The melody line moves much faster than the other parts - though the whole piece is hardly "up-tempo"!! - and it would cut off the end of the "Upright" envelope if a single voice was used. Consequently, I used two voices and alternated the voice which sounded. The slight overlap between notes does seem to add to the atmosphere created.

I did all this by hand once the melody part had been transcribed - by adding "/( )" around every second note and being very grateful for the fact that a "non-mention" of a chord VOICE is interpreted as a hold. I have since discovered a much better method using the ACT command. (Editor's note - a feature on this will appear in the next issue of AMPLINEX.)

<"|"> A Yoftunes Project
-

Implementation & Text: (C) Richard Bettis, Dec. 1987

 

Source: AMPLINEX 004 disk, file $.GYMNO1


Published in AMPLINEX 004, March 1988

Harzat!

by Jim Redfarn

I hope you like my cricket calypso. However, there's a problem which I hope you can help me with. This music generally runs okay, except in the Mixing Desk, when things go haywire. What's the solution? Does it run okay on a Master?

(See also Questions and Answers section in this issue of AMPLINEX)
 

Source: AMPLINEX 004 disk, file $.HARZAT


Published in AMPLINEX 004, March 1988

Stack Monitor

David Westbrook
For instructions see Stack Window and Stack Monitor article.
"stk" [7MODE
31#OUT11#OUT0#OUT 131#OUT "STACK MONITOR"$OUT
FRAME
FRAME? 2 #/ #2 #11 FOR(
COUNT #11 #11
31#OUT12#OUT 1#+#OUT 131#OUT $STR 2$PAD $OUT
FVAR #? $STR 6$PAD 130#OUT $OUT
)FOR
16 #12 #- FOR(
31#OUT15#OUT 18 INDEX #-#OUT 146#OUT
6 FOR(172#OUT)FOR
)FOR
31#OUT7#OUT19#OUT 134#OUT
"<SPACE> to continue..."$OUT
REP(#IN 32 #=)UNTIL(IDLE)REP
NL
]

Published in AMPLINEX 004, March 1988

Stack Window and Stack Monitor

David Westbrook
These programs are designed to help in understanding the operation of AMPLE words which change the number stack (such as #2, #*, #11). I always find these operations confusing to follow and so I wrote the programs to help me see what's going on.
All number operations in AMPLE depend on a data structure called the 'stack'. This is quite literally a pile of numbers, so that any number entered goes on the top of the stack and any operation which needs a number takes it from the top of the stack. Some AMPLE commands, such as FRAME, let you get at numbers below the top.

Stack Window

LOAD and RUN "U.STKWIN". The program displays the contents of the stack and allows you to directly enter commands (basically, any of the '#' commands are the main focus) and see their effect.
The screen shows the stack as it was before your command on the left, and the state after your command on the right.
Enter some numbers first (separated by spaces) and press RETURN. Your command is displayed under 'Last command:' and the right-hand display shows the numbers on the stack.
Now try any stack-altering command (e.g. #11, # 213, #2 or #/). The left-hand display alters to show the previous stack whilst the right shows the result. Entering 'Q' will quit the program.

Stack Monitor

The word 'showstack' is the guts of the Window program and this can easily be modified so that you can *EXEC it into any other program and then call it up at any point to monitor the stack.
The file "U.STKMON" should be *EXECed into the program you want to monitor. Insert the word 'stk' at any point in your program where you want to see the state of the stack (I'm afraid I haven't bothered to write a routine to preserve the screen, so any display will be destroyed).

Related files on this disc:
U.stkwin - Stack window program
U.stkmon - Stack monitor *EXEC file

Published in AMPLINEX 004, March 1988 

Instruments

To make the best use of disc space we have combined several instrument definitions into one file. These can be saved individually if required either by loading/saving via a word processor or from within AMPLE using the commands:
*SPOOL insfile
"insname" TYPE
*SPOOL
where 'insfile' is the file on which the individual instrument definition is to be held and 'insname' is the word containing the instrument definition.
"oboe" [2 CHANS
1 CHAN
 Metal       Flat        Tailed
 -251 SHIFT   ON SYNC
2 CHAN
 Syncer      Vibrato     Puff
EVERY CHAN
% Oboe sound by G H Richardson
% See Questions and Answers
]
"jarre-4" [4 CHANS
ODD CHAN
 Hollow     Sweep         Verylong
 128 AMP    ON SYNC
EVEN CHAN
 Syncer      Delvib      Spike
4 CHAN  200 OFFSET
EVERY CHAN
% Like the sound used by Jarre on
% Rendezvous.
% Play slow notes with sustain.
% by Mark A J Mulders
]
"sax" [2 CHANS
1 CHAN
  ON SYNC
 Metal     Delvib     Soft
2 CHAN
 Hollow    Delvib     Soft
  100 OFFSET          128 AMP
EVERY CHAN
% Here is a passable saxophone sound.
% It sounds best at octaves -1: & -2:
% You could beef it up a bit by using
% the Echo command to add some reverb
% e.g. READY 8 VOICES sax 1 8 Echo
% by Mike Dobson
]
"cello-t" [2 CHANS
 1 CHAN
   10 OFFSET 128 AMP
 Reedy    Delvib     Tailed
 2 CHAN
  -192 SHIFT   125 AMP
 Hollow   Flat       Tailed
% From an idea by G H Richardson
% I have tried to make his sound
% deeper and sonorous.
% by R Follett
]

Published in AMPLINEX 004, March 1988

Hints and tips

Using double-sided discs

Ken Hughes
I have a single 80-track double-sided disc drive with a Solidisc DFS. I have altered my AMPLE !BOOT file so that it loads the modules from side 0 and the programs from side 2. This gives room for more programs on side 2 and avoids having to use a separate disc for programs and modules.
If you wish to make this change, first read the article on !BOOT files in the Features section of AMPLINEX 003 and the section headed 'keeping system files separately' on page 88 of the Music 5000 User Guide. Then make the following changes to your !BOOT file:
·         Change the line which reads "M."MPREFIX to ":0.M."MPREFIX
·         on the next line put *DRIVE 2

Avoiding ROM conflicts

Robin Johnson
I am dreadfully afflicted with 'ROM conflict' disease. It shows itself in a crash when I change disc drives, usually. I have a BBC Model B (issue 3 board) with a full-up ATPL board containing lots of curious ROMs.
I get over it with a program called "Frugal" which I downloaded (free) from the educational area of PRESTEL. I think it's still there.
My !BOOT file CHAINs 'Frugal', which disables unwanted ROMs (leaving Nucleus and DFS of course) and then *EXEC's a second file (I call it !SHOE) which starts the AMPLE sequence as usual. It's quick and goes (with all the modules) on side 0 of every disc with jukebox and the tunes on side 2.

The OFFSET command

Tim Sketchley
OFFSET is used as part of an instrument definition. It affects the frequency of the channels used and is related to, but very different from, SHIFT.
Let's start with a simple instrument definition:
"offsetins" [2 CHANS
2 CHAN
 0 OFFSET      128 AMP
EVERY CHAN
 Pure          Flat          Onoff
 ON PHSET]
This plays the Pure waveform through both channels. The OFFSET value on channel 2 can now be adjusted to produce a variety of effects. For example:
1) Try making a very fine adjustment to a channel - take the instrument definition given above and change 0 OFFSET to 60 OFFSET. Then make the instrument play a continuous note.
You will find that 60 OFFSET causes an unusual effect every 3 seconds; the sound fizzles out but only momentarily. Try increasing the OFFSET number and you will hear that the above effect becomes faster. The pulses you hear are called beats.
The effect becomes more complicated when using waveforms other than Pure. Here the sound won't have well-marked beats - instead it will have a continuously changing tone. This "phasing" effect is used very well in movements 1 and 2 of the Mexico Suite. (N.B. ON PHSET is omitted from the instrument in this case.)
2) You can use larger settings of OFFSET to produce a different sort of effect. For example, with waveforms other than Pure, 100 OFFSET will create an ensemble effect and 200 OFFSET will sound slightly out of tune - an effect which is used in Upright. An even larger setting (say 400) will make it more out of tune, like an old piano!
3) Very large settings of OFFSET can be used to mis-tune the low notes, leaving the high notes virtually unaffected. This can be done by having 2000 OFFSET on all channels of an instrument to make the notes sharp (i.e. higher in pitch) or -2000 OFFSET to make them flat (lower in pitch). Try setting up instruments such as these and then playing 1:Cgecgecgec^.
Above all, keep experimenting!

Watford Shadow RAM with AMPLE

Graham F Firth
I'm sure that there must be quite a few members who want to use Shadow RAM with AMPLE so that they can use the Staff Editor and not run into the dreaded '!No room' error.
I did, and I bought, second hand, a Watford Shadow RAM board, only to find that it was not as compatible as I thought it would be.
The problem is that, unlike the Aries board, the Watford board requires a page of user RAM and will locate this at &1900 thus moving the normal setting of PAGE to &1A00. AMPLE however, normally runs with a page setting of &1300 (see Music 5000 User Guide page 89) and there is no spare memory below there.
The answer is to run AMPLE at &1400 - you lose a page of user RAM, but you get back 4 pages at the top of RAM as the Mode 7 screen is now in Shadow RAM. In the Staff Editor, however, savings are much greater. The procedure to do this may seem slightly clumsy, but it works well.
Firstly, rename the existing !BOOT file (on your System disc) to BOOT1:
*RENAME "!BOOT" "BOOT1"
Secondly, make a new !BOOT file (using *BUILD) containing the following:
*BASIC CHAIN"BOOT"
Thirdly, enter the following BASIC program:
10 *FX21,0
20 RESTORE 80
30 FOR I%=0 TO 15:READ Q
40 OSCLI"FX138,0 "+STR$(Q):NEXT
50 *FX118
60 *FX202,48
70 *KEY10 *EXEC BOOT1|M
80 DATA 42,87,77,87,83,32,49,51,13
90 DATA 42,82,65,77,79,78,13
and SAVE it as "BOOT".
Finally, the hard part. One byte in the C.PREPARE file needs changing. This is the first occurrence in the file of &A2 &13 (LDX#&13). The &13 need changing to &14 to make AMPLE run at &1400. How you do this will depend on the toolkit program you have available. The actual location of the byte in the versions of AMPLE I have are:
M5000 issue 2 - &203E
M5000 issue 6 - &203E
M4000 issue 2 - &2052
When you have changed the byte, resave the file under its old name.
And that's it!
When you boot up your System disc now, you will see the message 'Press Break' & when you do that, AMPLE will load as normal.

Transferring words between programs

Roger Sapolsky
When using *EXEC to include a word in your current program (previously *SPOOLed from another), first make sure the word does not already exist. If it does, and you don't want it to be overwritten by the *EXECed definition, RENAME it to something else first.
Also, if the word being *EXECed in contains other words not in the current program you will get a '! Bad context' error. To overcome this, create the missing word(s) in the current program before using *EXEC again.

1 voice chords

Ken Hughes
The usual way to program chords in AMPLE is to use one voice for each note of the chord. For 4 note chords this requires the use of 4 voices and 8 channels. Page 48 of the Music 500 User Guide (for AMPLE BCE) shows how to make up a chord using 1 voice with 4 channels, but does not show how to make use of this in a program.
The program '1voiceC' (included on this disc) shows how this can be done. It plays a simple arrangement using one 3 note chord ('cch') and one 4 note chord ('g7ch').
Using this method it is quite easy to define the chords that you require as user words and then program them in the manner shown. This is most useful when entering music from 'Easy Play' or 'Busking' music books which do not show the bass stave.

Related files on this disc:
H.1voiceC - demonstration program of one voice chords
H.WWconv - Wordwise Plus segment program omitted in error from AMPLINEX 003. See that issue's Hints and Tips section under the heading 'AMPLINEX to Wordwise Plus conversion'


Published in AMPLINEX 004, March 1988

An index for the AMPLE Nucleus Programmer Guide

Compiled by Roy Follett

A

a to g                           121
A to G                           119
ACT                           32,121
ACT(                             124
additional interfaces             56
ALIGN                         55,127
AMPLE                            128
AMPLE commands                    13
AND                        45,59,128
arithmetic expressions            39
ARRAY                         45,129
ASC                              130
asc                               49

B

BAR                              132

C

calling routines                  61
characters and strings            55
Characters and Strings            49
CLEAR                         27,133
CODE                       61,62,134
communications with user routines 65
Command mode                      10
command utility                   21
commands                          56
COMPACT                       20,134
concurrency                       59
condition expressions             58
conditionals and loops            58
constants                         40
Contents                           3
COUNT                         58,135

D

DELETE                           136
Dictionary of words               81
DIM                           45,137
Direct text                       19
DISPLAY                          140
DURATION                      31,140

E

Edit mode                         10
editor data                       27
Editor non-text                   19
Editor text                       19
editor types                      26
editors                           26
ERRORS                            67
EVERY                            143
examining modules                 22
example programs                  11
execution control                 57
extension                         21

F

F                                 25
FAST                          34,143
FCOPY                         44,143
FIND                             144
fixed modules                     25
flag operators                    45
flags                             44
FOR(                             144
FRAME                         44,145
FRAME!                        44,146
FRAME?                        44,146
function and status               82
FVAR                       32,44,146

G

GATE                          31, 36
GO                               147
GVAR                          45,148

H

HALT                          35,149

I

IF(                              152
IF(..)ELSE(..)IF                  57
IF(..)IF                          57
IF8..FOR(..)FOR..)IF              58
in-fix                            39
#IN                           53, 55
INDEX                         58,153
index of words                    84
Input and output                  55
input and output items            82
INSTALL                  9,23,25,153
Introduction                       5

J

jukebox                           11

K

K(                               154
KEY9                              11

L

LEN                           49,155
Length                            29
LOAD                       23,24,155
loading modules                   23
locating user routines            65

M

M                                159
M/C programming                   61
MAX                              158
MCAT                       22,25,159
MDELETE                       24,160
MEM                           20,160
Memory usage                      20
MIN                              161
MLOAD                      23,25,161
MODE                       20,55,162
module deletion                   24
module functions                  21
module load on startup            23
module loading by program         24
module loading by user            24
module memory usage               25
module names                      22
Module words                      18
modules                            9
Modules and Editors               21
movable modules                   25
MPREFIX                       22,162
MSHOW                         22,163
music actions                     32
Music and sound                   29
music environment words           29
music event words                 30
music interpretation              31
Music words                       29
music and sound event input       56
MVAL!                            163
MVAL?                            163

N

NEW                           24,165
NL                            55,165
NOT                        45,59,166
NOUT                       41,55,166
Nucleus                            9
Nucleus words                     18
number stack                      41
numbers                           55
Numbers and flags                 39

O

O.S. commands                     12
OFF                              167
ON                               167
ON VOICE!                         32
OR                         45,59,168
OSCLI                         63,168
OSHWM                             63
#OUT                              55

P

P                                159
P(                               170
Part 1 General                     7
Part 2 Reference                  79
passing numbers                   42
PAUSE                         34,172
PITCH                         31, 36
Pitch                             29
player control instructions       60
PNUM                          60,173
post-fix                          39
program                            9
Programs and words                17

Q

QKEY                          55,174
QTIME                      34,63,175
queue control sound word          34
QUIT                             177

R

routines in language RAM          63
routines in operating RAM         63
routines in ROM                   64
RAND                          47,177
RAND!                         47,178
RANDL                         47,179
random numbers                    47
reading module word definitions   25
READY                         63,180
RENAME                           181
REP                               58
REP(                             182
RUN                               54
RVOICES                       35,183

S

SAVE                             184
SCORE                            184
Screen display                    12
SHARE                         35,185
SHOW                             186
SIGN                       45,59,187
signed integers (16 bit)          39
SIMPLEACT                     32,187
sound events                      32
sound queue                       33
SP                               187
stack operators                   43
Starting a new session            15
Starting the system                9
STOP                          60,188
stopping execution                60
string operators                  49
string stack capacity             54
string stack usage                50
synchronisation                   56
system effects                    56
System words                      18

T

T                                159
time control                      34
time server                       21
TYPE                             193
type-global voice event           37

U

U                                159
UNTIL                             58
UNUSED                        36,194
user routine applications         61
User word formatting              19
User words                        18
Using AMPLE                        9
using strings (command)           51
using strings (players)           53
Using the computer keyboard       10
using the input line              51

V

VAL                              194
VAL/&VAL                          55
variables and storage             45
VEL                           31, 36
VOICE                         35,196
voice assignment                  36
voice selection                   35
voice server                      21
voice servers                     37
VOICE!                     32,44,197
VOICES                        35,198

W

W                                159
WIND                          34,199
Word manipulation                 19
Words                             18
WRITE                            200

X

X                                200
XOR                        45,59,202

Z

zero page workspace                6

Other

<cr>                              90
<space>                           90
!                                 91
"                                 92
#!                                93
#*                                93
#+                                93
#-                                94
#/                                94
#11                               95
#12                               96
#2                                96
#212                              96
#2121                             97
#<                                97
#=                                98
#>                                98
#?                                99
#B!                              131
#B12                             131
#B?                              132
#IN                              150
#OUT                             169
$+                            49, 99
$-                            49, 99
$12                              100
$2                               100
$CHR                          49,133
$IN                        53,55,150
$OUT                          55,169
$PAD                          49,170
$REV                          49,183
$STR                             188
$STRIP                     49,52,189
%                                101
&                                101
&$STR                            189
&NOUT                         55,167
&VAL                             195
'                                101
'L                               156
(                                102
)                                105
)ACT                             127
)ELSE(                           143
)FOR                             145
)IF                              152
)K                               155
)P                               172
)REP                             183
)UNTIL(                          193
*                                105
+                                106
+L                               157
+T                               191
,                                107
-                                108
-L                               158
-T                               192
/                                109
:                                110
;                                111
0 to 9                           117
=                                112
=L                               156
=T                               190
@                                112
[                                113
\                                115
]                                116
^                                117
^;                               118
|                                119
~                                116

Published in AMPLINEX 004, March 1988

Composing with AMPLE

This feature is a collection of comments on the subject of AMPLE composition. Some of them were prompted by Richard Nevill's comments which were mentioned in the previous issue's Update section.
A fuller version of Richard Nevill's comments begins the discussion:
The music files on the issue 002 disc reinforce a suspicion I have long had that the Music 500/0 demands to have music especially composed for it, rather than to have pale conversions of popular and classical 'standards'. If the standard set by "Terra Cotta Army" and virtually all the other contributions is maintained, I for one will be well pleased!
Richard Nevill

I refer to Richard Nevill's comment regarding a possible need for the Music 500(0) to have specially composed music rather than to have 'pale conversions of standards'.
Whilst I think we all must be aware that this synthesiser has its limitations, this should not stop us from attempting to produce 'authentic' types of sound. After all, so many sounds in 'popular' music these days have been produced by other synthesisers. True orchestral sounds are another matter, of course, but why shouldn't we try to emulate the Berlin Philharmonic if we want to?
Conversely, we do not HAVE to try to produce the same sounds as particular groups or bands. Instead, we can produce unique performances and arrangements for our own enjoyment if no one else's. It doesn't matter for whom or for what the original music was composed.
Having said the above tongue in cheek, I must admit that, because of the limitations of the actual synthesiser (and Richard does say 'Music 500(0)'), he has a point. This is why I have high hopes for the MIDI interface which should enable much better (and VERY much more expensive!) synthesisers to be driven by AMPLE Nucleus, a programming/software combination it would be hard to beat at any price, including, for example, the Atari ST/Steinberg Pro24 set-up. This applies especially to non-musicians such as me who rely on step-time entry.
Ted Royffe

Re Richard Nevill's comment on composing for AMPLE, I couldn't agree more. Sometimes I think I'll scream if I hear yet another tedious version of Bach or Scott Joplin. I like Bach (I'm not so sure about Joplin!) and I've transcribed one or two pieces myself, but I don't think other people are likely to find them very exciting. Pieces like 'Terra-cotta Army' show off the capabilities of the Music 500/0 much better. I'd like to see AMPLINEX supporting this kind of work, which is trying to explore the new musical medium of AMPLE in its own terms, not imitating other media.
David Westbrook

In the nicest possible way I should like to take issue with Kevin Doyle when, in his review of Music City by Ian Guinan, he says "AMPLE versions are not meant to be soundalike versions of the original" and "The value of creating AMPLE copies of well-known music is questionable".
As a frustrated composer and conductor with equally frustrated ambitions to become a decent pianist and violinist, I am at last, through the medium of AMPLE, beginning to realise some of these forlorn hopes. I can now interpret and conduct light orchestral pieces to my own liking.
I can play piano and violin pieces with almost virtuoso accuracy including those of a difficulty which put them way beyond my own amateur technique. I can play virtually the whole range of instruments in an orchestra. I can arrange and hear performed with differing instruments the small number of simple compositions I wrote in my heyday over forty years ago. I might even start writing music again and be able to hear it played in various forms.
How else could I do this except through AMPLE?
I think AMPLE has tremendous possibilities and if the progress and improvement of the last ten years is continued over the next ten, as I am sure it will be, I can see electronic music becoming indistinguishable from authentic musical sounds. What a boon AMPLE would have been to the Beethovens and Mozarts of the past.
If we accept that all sound is music of one sort or another, it is equally clear that different sounds appeal to different people and at different ages. For some years now the popular teenage trend has been the reproduction of weirdo electronic sounds against a background of heavy rhythmic thumping played at about 140 decibels.
If that appeals to them - OK; but don't let us forget the more gentle type of melodious music of which there is a vast repertoire.
AMPLE can accommodate both, and the fact that AMPLE can produce an electronic representation of a well-known piece should not, in my humble opinion, be frowned on. In fact, if the representation and interpretation is good enough, it might even be greeted with raised eyebrows by the 'highbrows' as I am sure will be the case in years to come. In the meantime some of us continue to strive for that elusive perfection.
G H Richardson

Published in AMPLINEX 004, March 1988

How to save memory in AMPLE

Kevin Doyle
Users of the Studio 5000 software on a BBC Model B may find themselves coming up against the dreaded '!No room' error message. In most cases some simple changes to the program can free enough space to allow programming to continue.
To work out how best to tackle memory saving, it helps to understand the way in which an AMPLE program is stored.
As with BASIC on the BBC micro, AMPLE is stored in a tokenised form - each AMPLE Nucleus word being stored as a single byte. This means that the actual length of the AMPLE words is unrelated to the memory usage; the AMPLE Nucleus words C, !, #OUT, EVERY, and SIMPLEACT all take up one byte of memory.
User words and module words take up two bytes of memory.
All this means that memory saving depends on reducing the number of words used rather than on the length of the displayed definition. For example, replacing all occurrences of the AMPLE Nucleus word #OUT with a single letter word, say,
"x" [#OUT]
may reduce the length of the displayed words in Notepad but would actually take up more memory.
To reduce the number of words in AMPLE definitions you have three options:
1) Remove redundant words;
2) Replace recurring word groups;
3) Change to more efficient syntax.
These options are arranged in a rough order of difficulty and I will now discuss each option giving examples.

1) Remove redundant words

The most obvious way to reduce redundant words is to eliminate any which are no longer in use. In more complex programs, words may have been created which are no longer used. There is no easy way to discover these except by knowing how the program was built. To get rid of a redundant word use:
"word" DELETE
If the word is still part of another word's definition the message "!In use" will be returned.
If no words are completely redundant then you must look for redundancy within the word definitions themselves.
The easiest things to remove are comments and spaces. Any words following the comment word '%' on the same line can be removed without affecting the operation of the program. The only exception to this is where the '%' is the first word on the line and it follows a DISPLAY or MENUDISP word earlier in the definition.
Each single space in an AMPLE program takes up one byte of memory. Multiple spaces only take up two bytes regardless of the number. For clarity most people will write AMPLE with spaces between each word. When memory is short, however, clarity may have to be sacrificed to save memory. Removing spaces between words can have a significant effect on memory usage and many spaces can normally be removed from a program without sacrificing readability altogether.
Care must be taken, however, where ambiguities could occur. For example, words such as CHAN and VOICE can be changed inadvertently to CHANS and VOICES if the next word starts with an 'S'. Similarly, a hex value can be confused by a following word starting with the letters A-F. So &FFF4CODE will generate an error as it will be interpreted as &FFF4C ODE by AMPLE.

2) Replace recurring word groups

As mentioned earlier, any reference to a user word in a word definition takes up two bytes. Therefore any phrase you wish to replace with a user word must contain more than two bytes to save memory. Although it was stated earlier that AMPLE Nucleus words take up one byte, this is a slight simplification. There are some AMPLE Nucleus words which use more than one byte of memory.
Numbers, strings and comments are stored with preceding bytes to indicate which type of data follows. So, one byte numbers (0-255) take up two bytes and two byte numbers take up three bytes.
Strings and comments take two bytes more than the length of the string (ignore surrounding inverted commas or the '%' sign).
AMPLE structures such as IF(...)IF, REP(...)REP and FOR(...)FOR take extra bytes to provide control information. Each IF(...)IF or REP(...)REP structure takes up a total of 4 bytes with an additional 3 if an )ELSE( or an )UNTIL( is used. Each FOR(...)FOR loop takes up 8 bytes (not including the preceding number). The ACT(...)ACT control structure takes up 5 bytes.
To search for repeating word groups amongst, rather than within, word definitions, try printing out your program. Seeing the program as a whole should make the spotting of repeating phrases easier.
Any new word takes up a minimum of 8 bytes of memory plus the number of characters in the word name. So, even an empty word such as
"test" []
will take up 12 bytes.
Because the actual word name is only stored once (in the definition) and all references to it are tokenised (as two bytes) there is often little point, in memory terms, in choosing very short words (such as 'x' or 'z') to replace repeating phases.
Shortening the word name only saves on memory once and may make the program a lot less readable.

3) Change to more efficient syntax

Some AMPLE expressions can be rephrased in a more memory-efficient way without altering their effect. For example, I mentioned earlier that single byte numbers are stored as two bytes. If you have a program containing lots of zeros then it is more efficient to replace these with the AMPLE word OFF which takes only one byte.
Displaying a string with only one character (such as "x"$OUT) takes up 4 bytes. Replacing this with the ASCII number for the character and the word #OUT takes only three bytes.
Strings containing more than 13 consecutive repeating characters could be more effectively replaced by a FOR(n#OUT)FOR construction (where n is the ASCII code for the character).
Because each FOR(...)FOR construction takes 10 bytes (including a single byte loop number) it may be more memory efficient to repeat the contents of such a structure if it being repeated a small number of times. For example,
4FOR(riff1)FOR
(taking 12 bytes) where riff1 is a another user word, would be more memory efficient as
riff1riff1riff1riff1
which takes only 8 bytes.
There is a special AMPLE word which represents three consecutive rests thereby reducing memory usage with multiple rests. Therefore, grouping rests into threes is a way of saving of a few bytes of memory.
Each end of line in an AMPLE program is indicated by a one-byte token, so the fewer the number of lines the less the memory required for the program.
As you can see, there are only limited savings to be made by rephrasing AMPLE expressions and more intimate knowledge of AMPLE is needed to find the opportunities. For all but the most desperate situation the first two techniques should be all that is necessary.

Published in AMPLINEX 004, March 1988