Sound Scheme - A set of sounds (this is the .SPC file in the SND directory of the Datalink application) which are downloaded to the watch. A sound scheme contains all the Soundlets and Sound Sequences for all 10 defined system sound values. This file is loaded in thewatch so that the end of it is at $0435 in memory.
System Sound - is one of the 10 defined system sound values:
Sound Sequence - The sequence of soundlets which are played to for a given System Sound. There can be as few as 1 Sound Sequence and as many as 10 different Sound Sequences. Each System Sound maps to one Sound Sequence although the same Sound Sequence can be used for more than one System Sound. A Sound Sequence is represented by two series of numbers.
The first series is called the Soundlet Count Table and consists of a series of one or more bytes where the last byte in the series has the high bit set ($80). For each entry in the Soundlet Count Table, the number of times that a sound is played is determined by clearing the tip bit and then using the resulting number as a count. So $81 indicates the last entry with a repeat count of 1. $A0 indicates the last entry with a repeat count of 20. $0A indicates an entry (with at least one more following it) with a repeat count of 10.
The second series is the Soundlet Pointer Table which consists of exactly the same number of entries as the Soundlet Count Table. Each entry in this table is simply a pointer to the start of the corresponding Soundlet
Note - A single sound to be played. The note consists of a single byte broken into two Nibbles. The high order nibble is the tone to be played and the low order nibble is the duration for that tone in 1/10th of a second intervals.
Tone - One of 14 tones supported by the sound hardware on the watch as well as the two values which produce silence:
The format of a sound scheme
Given the default sounds in the ROM, I propose that this is how we would interpret and code them:
The sound sceme stored in a file is nearly identical with the exception of a 4 byte header. Given the default sound, you might picture it as below (with thanks to Pigeon for his first representation of this).
Brent Davidson gives a pretty good explaination of this: ("Absolute offset" refer refer to the offset location in the file. "Relative offset" refers to the location without the "header" (25 04 19 69).
The next 10 bytes represent the relative offsets of the sound sequences. The relative offset of each byte reflects the system sound it represents. This table is fixed in size because there are only 10 system sounds.
The next 8 (or however many are indicated by absolute offset 0004) bytes (the soundlet count table) are in the relative offsets pointed to by the sound sequence table. The high order nibble of the byte indicates the last entry for this sound. If it is clear, there are more soundlets associated with this sound. The remaining 7 bits in the byte are the number of times that the corresponding soundlet is to be played. Hence, a value of 0a indicates that the corresponding soundlet is to be played 10 times and the next entry in the soundlet count table is to be used for the sound. A value of 81 indicates that the corresponding soundlet is to be played once.
The next 8 bytes (or however many are indicated by absolute offset 0004) are the soundlet pointer table. They are parallel to the previous 8 bytes, and reference the relative offsets of the soundlets.
The remainder of the bytes (except for the final byte) are the soundlets themselves. The high order nibble indicates the tone, the low order nibble indicates the duration. A byte of 00 signals the end of each soundlet.
The low order nibble of the final byte of the file indicates the tone played after each record is downloaded during transmission, it's high order nibble is always 0, and it's count cannot be set.