Full Name: SoundSmith Music Sequence
Short Name: SoundSmith document
Written by Matt Deatherage (March 1990)
Files of this type and auxiliary type contain music sequences used by SoundSmith.
SoundSmith is a music sequencing program that uses the full sound
capabilities of the Apple IIGS. SoundSmith uses standard Apple Sampled
Instrument format (ASIF) instruments to produce rich stereo sound with a
variety of instruments.
For more information on SoundSmith, contact:
Huibert Aalbers
Travesía Andrés Mellado, 3
28015 Madrid
Spain
Attn: SoundSmith Technical Support
Phone: (34)-1-5446940
The File Format
SoundSmith sequences consist of a 600 byte header, followed by three
equally-sized blocks containing the notes in the sequence, the effects to
be applied to the notes, and parameters for the effects. The file
concludes with 30 bytes of stereo information.
The Header
- signature (+000): 6 Bytes
- ASCII bytes "SONGOK". An identifier to SoundSmith that the file is not corrupted.
- length (+006): Word
- The length of each of the three equally-sized blocks that follow the header (Main, Effects1, and Effects2).
- tempo (+008): Word
- The tempo for the song. A note is played each tempo/50th of a second (see the "Playing the Music" section in this Note).
- instBlock1 (+020): InstBlock
- The instrument parameters for the first instrument.
- instBlock2 (+050): InstBlock
- The instrument parameters for the second instrument.
- instBlock3 (+080): InstBlock
- The instrument parameters for the third instrument.
- instBlock4 (+110): InstBlock
- The instrument parameters for the fourth instrument.
- instBlock5 (+140): InstBlock
- The instrument parameters for the fifth instrument.
- instBlock6 (+170): InstBlock
- The instrument parameters for the sixth instrument.
- instBlock7 (+200): InstBlock
- The instrument parameters for the seventh instrument.
- instBlock8 (+230): InstBlock
- The instrument parameters for the eighth instrument.
- instBlock9 (+260): InstBlock
- The instrument parameters for the ninth instrument.
- instBlock10 (+290): InstBlock
- The instrument parameters for the tenth instrument.
- instBlock11 (+320): InstBlock
- The instrument parameters for the eleventh instrument.
- instBlock12 (+350): InstBlock
- The instrument parameters for the twelfth instrument.
- instBlock13 (+380): InstBlock
- The instrument parameters for the thirteenth instrument.
- instBlock14 (+410): InstBlock
- The instrument parameters for the fourteenth instrument.
- instBlock15 (+440): InstBlock
- The instrument parameters for the fifteenth instrument.
- musLength (+470): Word
- Length of the music in SSBlocks.
- musList (+472): 128 Bytes
- List of SSBlocks to play. Each block is identified by one byte (i.e., 0 3 5 2 2 n means play block 0, block 3 block 5, block 2, block 2, and block n respectively).
An SSBlock is 896 Bytes (64 * 14 bytes). The Main block is composed if
SSBlocks. An InstBlock is a 30-byte block of instrument parameters
defined as follows:
- instName (+000): String
- ASCII name of the instrument to be used. If this is less than 22 bytes (21 characters plus the length byte), it must be padded to take 22 bytes.
- reserved (+022): Word
- Reserved, set to zero.
- volume (+024): Word
- Volume for this instrument. Although this is a word parameter, legal values range from 0 to 255.
- reserved (+026): Word
- Reserved, set to zero.
- reserved (+028): Word
- Reserved, set to zero.
The Main block
The main part of the file consists of three equally-sized blocks. The
length of each of the three parts is given by the Length field in the
header; the entire Main block is 3*Length bytes long. Bytes in each block
are related to each other positionally. For example, the first byte of
the Effects1 and Effects2 blocks contain the effects to be applied to the
note in the first byte of the Notes block.
The first block is the Notes block. Each byte is a MIDI Note number
representing the note to play.
The second block is the Effects1 block. The high nibble of each byte
determines which instrument should be used to play the note in the
corresponding byte of the Notes block. The low nibble of each byte contains a
value to be used by each effect.
The third block is the Effects2 block, and contains values to be used
for the effects listed in the bytes of the Effects1 block.
Table 1 contains currently defined values for the effects and their
values. All values not listed are reserved and must not be used.
Effects1 byte Effects2 byte
_____________________________________________________________________________
0 = Arpegiatto 0 = no arpegiatto, $xy = increment1 of x, increment2 of y
3 = Set Volume new volume ($00 - $FF)
5 = Decrease Volume volume to subtract from instrument volume
6 = Increase Volume volume to add to instrument volume
F = Set Tempo new tempo
_____________________________________________________________________________
Table 1 - SoundSmith Effects
Stereo Data
The file ends with 30 bytes of stereo data. The data is in 15 words,
one for each instrument. A value of $0000 indicates the instrument uses
the right channel; a value of $FFFF indicates the left channel. The first
word corresponds to the first instrument, and so on.
Playing the Music
Those wishing to play the music in a SoundSmith file should use an
interrupt-driven playback routine. The routine should be called every
tempo/50th of a second. When called, the routine should read the next
fourteen notes, Effects1 and Effects2 bytes, and play them on voices 1
through 14 using the specified instruments. Since SoundSmith provides 14
voices, you can use the fifteenth DOC oscillator as a timer to generate
the required 50 Hz interrupts. When the note value is zero, you should do
nothing (do not stop the sample). When the note value is 128 ($80), stop
the sample on that voice.
Further Reference
- Apple IIGS Toolbox Reference, Volume 3
This and all of the other Apple II Technical Notes have been converted
to HTML by Aaron Heiss as a public service to the Apple II community, with
permission by Apple Computer, Inc. Any and all trademarks, registered and
otherwise, are properties of their owners.
|