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 ChaseFrom 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
Adagio in G minor
by G H RichardsonComposed by: AlbinoniThere 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 MuldersThis 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 JohnsonComposed 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
Gymnopedie Number 1
by Richard BettisComposed by: Eric SatieThis 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 RedfarnI 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
]
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
"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
]
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
]
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
]
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
]
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]
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
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
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
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
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
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
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
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
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
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
KEY9 11
L
LEN 49,155
Length 29
LOAD 23,24,155
loading modules 23
locating user routines 65
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
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
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
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
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
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
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
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
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
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
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
WIND 34,199
Word manipulation 19
Words 18
WRITE 200
X
X
200
XOR 45,59,202
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
<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
Subscribe to:
Posts (Atom)