1.6.4 Hold at End Flag
For a sustained sound (example: horn) that must last as long as the key is held, this flag is set to prevent the End-of-Note
command from shutting off all of the partials when it is reached. Note that Ignore Release and Hold at End should not both
be set; if they are, the note will hang on forever. The setting of this flag is irrelevant if a Loopback command is present since
End-of-Note will never be reached.
1.6.5 Global Release Flag
If this flag is set, a single release slope value given elsewhere in the model specifies the release slops of all of the partials. If
it is not set, a vector gives independent release slopes for each partial.
1.6.6 Ignore Sustain Pedal
This flag does what its name implies. The Apple II .S.M.P. has no way to set this flag.
1.6.7 Attenuation
This 8-bit unsigned value determines how loud the overall model is in units of 3/8dB. A value of 0 specifies maximum
possible loudness. The user would typically adjust this value so that the subjective loudness of the model balances that of
other models and voices.
1.7 COMPLETE MODEL STRUCTURE
The listing below gives the memory image of the example model that has been used previously. Encoding of the memory
image into a system exclusive MIDI message is covered in section 2. Note that bit 0 is the least significant bit and that 16-bit
quantities have the most significant byte at the lower (even) address. The symbolic names given to the various fields come
from the Apple II version of the .S.M.P. and are shown here simply as mnemonic aids. To make reading easier, decimal
values are given with no prefix and hex values have a $ prefix.
MODELH
Beginning of a model header
MHNAME
.BYTE ’ABCDEFGH’
8 Character uppercase model name in ASCII
MHKEY
.BYTE 72
Highest MIDI key number for the model (C5)
MHFLAGS
.BYTE $00
Model option flags
Bit
0: 1=Ignore release
1: 1=Global release slope
2: 0 always
3: 1=Ignore sustain pedal
4: 1=Hold at end
5-7: 0 always
MHNPART
.BYTE 3
Number of partials (1-64)
MHNAFLV
.BYTE 3
Number of Attack Function LEVELS (1-254)
MHNUPDC
.WORD 24
Number of Update COMMANDS
MHNUPDA
.WORD 23
Number of Update ARGUMENTS
MHOFPFG
.WORD PFGLIST-MODELH
(48) Offset to partial flags list
MHOFPFQ
.WORD PFQLIST-MODELH
(52) Offset to partial frequency list (EVEN)
MHOFATF
.WORD PAFLIST-MODELH
(58) Offset to attack function array
MHOFUPC
.WORD PUCLIST-MODELH
(74) Offset to update commands list
MHOFUPA
.WORD PUALIST-MODELH
(98) Offset to update arguments list (EVEN)
MHOFIRR
.WORD PRSLIST-MODELH
(144) Offset to release slope list, if individual (EVEN);
actual release slope if global
MHLOUD
.BYTE 8
Attenuation of the model (-3dB)
DS.B
19
19 bytes unused (set to zero)
NOTE: These lists need not directly follow the model header, nor be in the order shown below, as long as the offsets given
in the model header are accurate.
PFGLIST
.BYTE $00
List of partial flags, one byte per partial
.BYTE $00
$00=relative, $01=absolute, $03=low noise,
.BYTE $00
$07=high noise, add $10 to mark optional