home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Frozen Fish 1: Amiga
/
FrozenFish-Apr94.iso
/
bbs
/
alib
/
d5xx
/
d579
/
octamed.lha
/
OctaMED
/
OctaMED.lzh
/
Docs
/
Synthsounds
/
Synthsounds
Wrap
Text File
|
1991-04-30
|
20KB
|
663 lines
Synthetic sound editor
======================
This is the editor, which is used to design simple pieces of waveforms
and to "program" the volume and pitch altering sequences. Synthetic sounds
don't take much memory (that's the main advantage of them). They can use the
whole 5-octave range. Although they are quite simple, they usually sound
quite "cool" (and remind me of the good old C-64).
Getting started
===============
First load MED, select the Instr-panel, click the Synth-gadget to initialize
a new synthsound. The click the Synth-display selection gadget to display the
synthsound editor. Please turn editing off. You can play the current sound
with keyboard, like ordinary samples.
Waveform editing
================
There are two waveform displays, the left one is the "master waveform display"
and the right one is for intermediate editing (it also serves as a copy buffer).
Between the waveform displays are some gadgets, that are used for transferring
waveforms between displays.
First there are two copy gadgets. If you press the left copy gadget, the
right waveform will be copied to the left one (and vice versa). Gadget "<-
EXCHANGE ->" exchanges the waveforms on the left and right. "<- MIX" mixes the
left waveform to the right waveform. It is a powerful tool that can be
needed quite often. "<-ADD" is similar to the mix, but it doesn't produce
any average between the wforms (= waveforms, from now on). The wforms are
simply added together. It's possible, that the waveforms exceed the upper
and lower limits (in that case, they are truncated). Two "<- EDIT" "EDIT->"
gadgets allow you to select either of the displayed wforms as a current
waveform, which is then used in some editing functions. Sometimes they're
automatically set (when you draw the wform with mouse, for example). "UNDO"
undoes your last editing operation. It can be quite useful. "RANGE ALL"
selects the current wform, so that any editing operations affect the whole
wform.
Freehand drawing
================
A very simple way to create wforms is to draw them from scratch. This is
easily done. Just press the left mouse button and draw... There are two
drawing modes. The default is "pixel". The other is "line". This can be used
for drawing straight lines. There's also a mix-mode, that works in both
"line" and "pixel" -mode. It mixes the drawed pixels or lines with the
already existing data. Mode-selection gadgets are located below "RANGE ALL".
Waveform length
===============
Each waveform in synthsound can be 2 - 128 bytes long (it must be even,
though). The shorter the waveform, the higher the pitch (it also depends on
the wform itself). Usually, to make the pitches compatible with other
instruments, you should use length 2, 4, 8, 16, 32, 64 or 128. The length
can be changed with "LEN:" gadgets below the left wform, by typing in a new
value or by clicking the single-step gadgets.
Multiple waveforms
==================
Each synthsound can consist of more than one wform (the maximum is actually
64). On the left, below the left wform, there's a set of gadgets:
curr. wform #
|
0 < > / 00
|/ \|
next/prev number of the last waveform
The arrow gadgets select the next/previous waveform. As this is a operation
that is needed often, there are keyboard shortcuts:
Alt-cursor left = previous
Alt-cursor right = next
There are two Add gadgets that allow you to increase the number of waveforms.
"Last" adds a new waveform after the last wform.
"Here" inserts a new wform here, and shifts the others.
Del gadgets:
"Last" deletes the last wform.
"Here" deletes the current wform.
Preset waveforms
================
There are some simple, often needed preset waveforms available at a single
click. First make sure, that the destination wform is the current wform
(selected with the EDIT <-/-> gadgets). Then just click the preset waveform
icon. The icons are located at the bottom of the editor.
The available waveforms are: sine, saw down, pulse, random, triangle, saw up.
The CLR-gadget clears the current wform.
The ALL-gadget clears the whole synthsound (so be careful..)
Range operations
================
These are some basic operations, that are applied to the selected range
(highlighted white). You can select the range by dragging the mouse over the
wform and holding the right mouse button down. You can select the whole wform
by clicking "RANGE ALL". The Range start/Range end gadgets at the lower right
corner of the synthsound editor can be used to make small corrections to the
area.
When there's no range selected, there's a single horizontal white line. This
is the cursor. Some editing operations need it. The cursor position can be
set by clicking the right mouse button on the wform area. There are also
three narrow gadgets (on the left of the preset wform gadgets) for
positioning the cursor:
cursor to cursor to end
start | |
< + >
|
cursor to the middle (of the wform)
On the middle of the screen, there's a word "RNG", followed by a strip of
gadgets:
RNG Cut Copy Paste Clr Dbl Rev < >
Cut (works only on left wform). It "cuts" the selected area, which is then
moved to the right wform display.
Copy copies the selected range to the right wform, but doesn't cut it away.
Paste copies the contents of the right wform to the position pointed by
the cursor.
Clr clears the range.
Dbl "doubles" the range, making it play one octave higher.
Rev reverses the range.
< or > shift the ranged data to left or right.
There are two other editing operations: stretch and volume change.
Stretch allows you to stretch a point of the wform towards some other point
(understand?? no?? then try this:)
For example, select a sine wave. Then position the cursor on the middle of
the waveform (there's a gadget for this purpose, see above). Now activate
the "STRETCH:"-gadget (on the left lower corner of the synthsound ed). Type
in the amount of moving, e.g. 32. This should demonstrate it... If the number
you type in is negative, the point is stretched to left.
Volume change allows you to increase/decrease the volume of selected range:
First select a range. Then activate the "VOL.CHG:"-gadget. Now you must enter
the amount of volume change (in %'s). For example, to halve the volume, you
should type 50. If you want to double the volume, type 200. The volume will
be changed when you press Return.
Transformation
==============
This is a quite powerful feature. It allows you to change a waveform to
another smoothly (by creating the waveforms between them). Demonstration:
Allocate 9 new waveforms (click Add/Last 9 times). Now you have 10 wforms.
Move to wform 00, and select a pulse waveform, for example. Then click
Transform: Start to mark the beginning of transformation range. Move to wform
09 (the last one). Put here a sine wform. Click Transform: Do, and the magic
is done. If you view the wforms 01 - 08, you'll notice that there's now a
smooth transition from the pulse wave to the sine wave.
-----------------------------------------------------------------------------
THE PROGRAMMING LANGUAGE
========================
Note: please read this section carefully before experimenting, because you
can lock up your machine with the synthsound programming language (as
with any other language)
The programming language is used for controlling the volume/pitch/vibrato/
waveforms/arpeggio/etc... of the synthsound. It consist of simple keywords
which some have an argument.
The programming is done using two lists of commands/numbers. These lists
are displayed through a small window below the right waveform display.
First there are line numbers (on the leftmost column). The middle column
contains the volume sequence, while the rightmost is the waveform/pitch
sequence.
volume ctrl seq
|
line | waveform ctrl seq
| | |
00 40 00
01 END END
These lists are both max. 127 ($7F) entries long. The list is always
terminated with "END" instruction (it's automatically there so you don't have
to do that). You can scroll the list with cursor up/down -keys. The cursor
can be moved horizontally using the cursor left/right -keys. There are six
possible cursor locations (3 for both lists). When entering commands, the
cursor should be on the leftmost position of that list. Values are entered by
pointing the cursor over the value to be changed and entering a new value.
Commands and numbers are entered with keyboard. You can insert entries to the
list with the Return-key (or clicking Ins-gadget), and delete using Del (or
clicking Del-gadget). JMP commands are renumbered when entries are inserted or
deleted.
Golden rule: ALL NUMBERS IN THE SEQUENCE LISTS ARE HEXADECIMAL.
Just remember this, and you have no problems (fingers crossed :^)
First, let's examine some example sequences:
This is a volume sequence:
00 40 <= set initial volume to 64 (hex $40, did you already forget?)
01 CHD <= command, that means "Set volume change down speed"
02 03 <= argument (speed = 3)
03 END
Here's another:
00 00 <= initial volume = 0
01 CHU <= Command: Set volume change up
02 07 <= speed = 7
03 WAI <= Command: Wait
04 10 <= wait 10 pulses
05 CHU <= Set volume change up
06 00 <= speed = 0 -> stop changing volume
07 WAI <= Wait
08 70 <= 70 pulses
09 CHD <= Cmd: Set volume change down
0A 01 <= speed = 1 (slow)
0B END
Third:
00 40 <= vol = $40
01 30 <= vol = $30 (without command, the values are volume changes)
02 20 <= vol = $20
03 END
And fourth, finally:
00 40 <= vol = $40
01 CHD <+ <= change down speed..
02 01 | <= ..= 1
03 WAI | <= Wait..
04 20 | <= ..20
05 CHU | <= change up
06 01 | <= ..1
07 WAI | <= Wait..
08 20 | <= ..20 again
09 JMP | <= Jump (= goto)
0A 01 -+ <= to line number 01
0B END
Now some wform/pitch sequences. Wform/pitch sequence is the "mastersequence"
while the volume sequence is a kind of "slave sequence".
First: (the simplest case)
00 00 <= set waveform #00
01 END
A bit more complex:
00 VBS <= set vibrato speed
01 40 <= speed = $40
02 VBD <= set vibrato depth
03 02 <= depth = 2
04 00 <= waveform #00
05 END
And very complex:
00 ARP <= start arpeggio sequence
01 00 \
02 03 arpeggio values 0, 3, 7 (minor chord)
03 07 /
04 ARE <= end arpeggio sequence
05 VBD <= vibrato depth
06 06 <= 6
07 VBS <= vibrato speed
08 40 <= $40
09 00 <= set waveform #0
0A 01 <= set waveforms 01 - 0A (one timing pulse/waveform)
0B 02 | |
0C 03 \ /
0D 04 \_/
0E 05
0F 06
10 07
11 08
12 09
13 0A and back to #01...
14 08
15 07
16 06
17 05
18 04
19 03
1A 02
1B 01
1C JMP <= jump
1D 09 <= to position 09 (restart waveform changing)
1E END
-----------------------------------------------------------------------------
You can learn a lot by examining the example synthsounds and by
experimenting.
Now, some reference...
About timing
============
For both sequence lists, most of the commands are fetched, executed, and the
next command is immediately fetched. There are also some commands that wait
for the next timing pulse, this is important because the computer would
otherwise send all its time executing the sequence lists (and would hang up).
You should take care that all loops contain a command, that waits for the
next timing pulse. These commands are WAI (Wait), vol chg (plain number in
the volume list) and set waveform (plain number in pitch/wform list).
For example, the following loops will hang up your computer:
00 JMP 00 CHU <-+ command CHU doesn't wait
01 00 01 02 |
... 02 JMP |
03 00 --+
While the following would not:
00 20 00 WAI
01 JMP 01 02
02 00 02 JMP
03 00
Executing speed
===============
The synthsound handling routine is called once every interrupt. This means
that the handling is done 6 times/note (can be changed with secondary tempo,
see main docs). Both lists have an execution speed, that is the speed of the
operation. When the speed is 1, the next command is fetched/pitch changed
etc. on every interrupt. If the speed was 2, it would happen every second
interrupt (runs two times slower). The initial execution speed can be set
with the two speed gadgets. During executing, the speed can be changed with
command SPD.
VOLUME SEQUENCE LIST COMMANDS
=============================
1. Set volume
Command: ---
Keyboard: --- (key needed to enter the command)
This is the default command (no command identifier). It sets the
absolute volume of the synthsound. It should be 00 - 40. Note that
the relative track volumes are not used in synthsounds (mostly
because of performance reasons).
Example:
00 30 ;volume = $30
01 10 ;volume = $10
...
2. End sequence
Command: END
Keyboard: ---
This command terminates the volume sequence list. It's always there
and automatically inserted. You can't insert commands past this one.
3. Set volume change down speed
Command: CHD
Keyboard: D
This command sets the speed, in which volume is decreased each timing
pulse. The volume starts changing automatically after this command.
To stop automatic volume sliding, issue this command with speed 00.
Example:
00 CHD
01 05 ;speed = 5
...
10 CHD
11 00 ;speed = 0 -> stop sliding
4. Set volume change up speed
Command: CHU
Keyboard: U
This command is like CHD, except it sets the volume change up.
5. Wait
Command: WAI
Keyboard: W
This command waits for specified amount of timing pulses (pause).
Example:
03 WAI
04 10 ;wait for 16 ($10) pulses to occur
6. Jump
Command: JMP
Keyboard: J
Causes an immediate jump to another position of the volume list.
Example:
05 JMP
06 0A ;jump forward to line 0A
7. Jump waveform sequence
Command: JWS
Keyboard: Shift-J
This command causes a jump in the waveform sequence. This can be used
for example, to trigger a pitch change at the end of the vol seq
list. Note that this DOESN'T cause a jump TO waveform sequence.
Example:
04 JWS
05 0F ;Cause jump in waveform sequence list
8. Halt
Command: HLT
Keyboard: H
This has the same effect with command END (halt execution), but it
can be inserted in the middle of the sequence list.
Example:
03 HLT
04 04 ;some other code (can be accessed with JMP instruction, for
... example)
9. Set speed
Command: SPD
Keyboard: S
Sets the execution speed.
Example:
0A SPD
0B 01 ;speed = 1 (fastest)
...
WAVEFORM/PITCH SEQUENCE LIST COMMANDS
=====================================
1. Set waveform
Command: ---
Keyboard: ---
This command is used to indicate the waveform number (starting from
00). After this instruction, the execution stops until next timing
pulse occurs. Don't use waveform numbers that are higher than the
actual number of the last wform.
Example:
00 00 ;wform 00
01 01 ;wform 01
...
2. End sequence
Command: END
Keyboard: ---
This command terminates the wform/pitch sequence list. It's always
there and automatically inserted. You can't insert commands past this
one.
3. Set pitch change down speed
Command: CHD
Keyboard: D
This command sets the sliding speed for sliding pitch down. The
sliding automatically starts after this command and stops, when
speed is set to zero.
Example:
00 CHD
01 03 ;set speed to 3
...
4. Set pitch change up speed
Command: CHU
Keyboard: U
Just like previous, but slides pitch up.
5. Wait
Command: WAI
Keyboard: W
This command waits for specified amount of timing pulses (pause).
Example:
03 WAI
04 02 ;wait for 2 pulses to occur
6. Jump
Command: JMP
Keyboard: J
Causes an immediate jump to another position of the wform/pitch list.
Example:
05 JMP
06 0A ;jump forward to line 0A
7. Jump volume sequence
Command: JVS
Keyboard: Shift-J
This command causes a jump to happen in the volume sequence. Can be
used e.g. for triggering volume changes after some wform event.
Example:
09 JVS
0A 00 ;start volume sequence from the beginning
8. Halt
Command: HLT
Keyboard: H
This has the same effect with command END (halt execution), but it
can be inserted in the middle of the sequence list.
Example:
03 HLT
04 04 ;some other code (can be accessed with JMP instruction, for
... example)
9. Set speed
Command: SPD
Keyboard: S
Sets the execution speed.
Example:
0A SPD
0B 01 ;speed = 1 (fastest)
...
10. Begin arpeggio definition
Command: ARP
Keyboard: A
This command starts the arpeggio sequence. The following values are
the arpeggio offsets from the base note. The arpeggio sequence
is terminated with ARE-command. The arpeggio starts automatically
after the sequence is defined.
Example:
03 ARP ;start arpeggio
04 00 ;offset values
05 04
06 07
07 0A
08 ARE ;end arpeggio definition
11. End arpeggio definition
Command: ARE
Keyboard: E
Ends an arpeggio definition. See above.
12. Set vibrato depth
Command: VBD
Keyboard: V
This command is used to set the vibrato depth (00 - 7F).
Example:
02 VBD
03 04 ;set depth to 4
13. Set vibrato speed
Command: VBS
Keyboard: Shift-V
This command sets the vibrato speed (00 - 7F). Both speed and depth
must be nonzero for vibrato to occur.
Example:
02 VBD
03 04 ;depth = 4
04 VBS
05 30 ;speed = 30
14. Reset pitch
Command: RES
Keyboard: R
This command resets the pitch of the note to its initial pitch.
=============================================================================
Synthsound handling commands in the songs:
Command E in the songs controls the MIDI pan, if used with MIDI, but
with synthsounds, it is used to trigger a jump in the wform/pitch sequence
list.
For example, if you wanted to decrease the pitch of the sound after a
certain point, your wform/pitch sequence could look like this:
00 VBS
01 40
02 VBD
03 06
04 00 ;play wform 00
05 HLT
06 CHD ;pitch changing entry point
07 02
08 END
Now you could compose a track like this:
C-2 3000 ;this is the previous synthsound
--- 0000
--- 0000
--- 0E06 ;cause a jump to position 06 (pitch starts to slide down)
--- 0000
...
With command JVS, you could make the command affect volume sequence too.
Hold/Decay:
===========
Hold/Decay work well with synthsounds too. The decay value in synthsounds
is, however, a jump address in the volume sequence list. When the decay
should start, the execution will jump to this entry in the vol seq list.
This means that you can handle the decay on any way you like. You can also
make it affect the pitch/wforms using the command JWS.
Example volume sequence list:
00 40 ;volume
01 HLT ;end
02 CHD ;decay handling (entry point) -> cause decay
03 03
04 END
The decay value for this synthsound should be 2. When you save/load
synthsounds, the decay values are saved/loaded with the instrument.
=============================================================================
Saving/loading synthsounds
==========================
Synthsounds are saved using the filerequester panel, "save sample". They
take very little disk space. Synthsounds can be loaded just like normal
samples (filerequester, sample list, typing sample name).
=============================================================================
HYBRID SOUNDS
=============
Hybrid sounds are much like synthsounds, except that there are no waveform
pieces. Instead, there's a normal sample. All commands of the synthsound
handling programming language can be used with hybrid sounds. There's only
one thing you should know: Don't use "Set waveform". Because there's only
a single waveform, there's no need for that (and it wouldn't work anyway).
=============================================================================
=============================================================================
=============================================================================
Final note:
Don't be afraid if you didn't understand everything described in this file
(I hardly understand it myself...) All this information is not necessary
for using the synthsounds (only for designing them).
If you've created interesting, useful synthsounds, please send them to me.
This way I could maintain some kind of library of synthsounds, and could
spread them forward to users who need them.