Every chunk here is optional. A player may ignore any of them. The envelope and text chunks are in the 1985 specification; the stereo and looping chunks were registered later by other companies.
ATAK and RLSE: envelopes
An envelope shapes the volume over a note. ATAK is the attack and
RLSE the release. Each chunk is a list of envelope points, one every six
bytes, so the number of points is the chunk’s size divided by 6.
| Offset | Size | Type | Name | Description |
|---|---|---|---|---|
| 0 | 2 | u16 | duration | the time this segment takes, in milliseconds; must be greater than 0 |
| 2 | 4 | Fixed | dest | the volume factor at the end of the segment; 1.0 is 0x00010000 |
The volume starts at 0 and steps through the ATAK points, holds at the
last dest as the sustain level, then steps through the RLSE
points. The release starts so that it ends when the note stops: the note’s end minus
the total RLSE duration. If the note is shorter than the release, the
attack is cut short. The envelope multiplies the header volume and any note volume.
In memory a list of points may be ended by a point with a duration of 0. In a file the size gives the count.
Text chunks
These hold ASCII text from 0x20 to 0x7E. The chunk’s size is
the number of characters, and an odd-length chunk has a pad byte after it.
| ID | Meaning | Type | Notes |
|---|---|---|---|
NAME | the name of the voice | property | before BODY; recommended under 256 characters |
AUTH | the author or creator | property | before BODY; recommended under 256 characters |
(c) | the copyright notice, the ID ending in a space | property | before BODY; recommended under 256 characters |
ANNO | free-text annotation | text | any number, anywhere; up to 231 − 1 characters in theory, about 32,767 in practice |
The properties can be shared through a PROP 8SVX in a LIST;
ANNO cannot.
The IFF registry also lists chunks usable inside any form, which an 8SVX file may
carry: TEXT, CHRS, CSET (character set),
UTF8, FVER (version string), JUNK,
HLID and INFO.
CHAN: stereo
A registered addition by David Jones of Gold Disk Inc.: one 32-bit value.
| Value | Name | Meaning |
|---|---|---|
| 2 | LEFT | a left channel, for Amiga audio channels 0 and 3 |
| 4 | RIGHT | a right channel, for Amiga audio channels 1 and 2 |
| 6 | STEREO | stereo, played on the channel pairs 0–1 and 2–3 |
With a value of 6, the BODY holds the left channel’s samples followed by
the right channel’s, equal in length.
PAN: position
A registered addition by the same author: one Fixed value,
sposition, from 0 to Unity. The chunk ID ends in a space.
Left volume = overall volume ÷ (Unity ÷ sposition). Right volume =
overall volume − left volume. A position of Unity is fully left, 0 is fully right and
Unity ÷ 2 is centred.
This section of the registered text gives Unity as 10000L, where the main
8SVX specification gives 0x10000L. It is taken here as a decimal slip.
SEQN: looping
A registered addition by Peter Norman of RamScan Software Pty Ltd. A list of pairs of
u32 values, each a start and an end offset into the waveform, longword
aligned. The number of loops is the chunk’s size divided by 8.
Sections play in the order listed, and a section listed twice plays twice. A sound
using SEQN sets oneShotHiSamples to 0. In stereo the same
offsets apply to both channels.
FADE: fading out
By the same author: one u32, the number of the loop at which the sound
starts to fade to silence. The rate of the fade is set by the bytes left and the
playback rate, so the volume reaches zero as the waveform ends.