background image

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

Summary of Contents for K150 - APPENDIX 1

Page 1: ...nary data structure which is communicated via system exclusive messages A bottom up approach will be used in describing these structures 1 1 PARTIAL PARAMETERS A sound model may have from 1 to 64 part...

Page 2: ...need have no relation with each other However voice memory may be saved and loading of the K150FS s internal processor reduced if some of the breakpoint times coincide Whereas the Sound Modeling Progr...

Page 3: ...ollowed by two bytes for the argument However since the K150FS s internal 68000 processor requires 16 bit quantities to be at even addresses the string is split into a command code vector and an argum...

Page 4: ...he last array element at the extra row and column intersection gives the earliest second breakpoint time which is when interpretation of the update command list should begin To make it easier on the p...

Page 5: ...ple rate of the sound generator This rate is exactly 19531 25Hz which is exactly equal to a 51 2 uS period It is derived in the hardware by dividing a 20MHz clock by 1024 Frequency units are based on...

Page 6: ...ey are represented by an unsigned 8 bit integer in units of 3 8 of a decibel This gives a range of 0dB to 95 625dB In most cases the dB value is an amplitude which means that 0 is silence and 255 is m...

Page 7: ...partial sawtooth Of course the whole issue of phase is moot for sounds with intended inexact harmonics 1 6 MODEL PARAMETERS Model parameters affect the entire sound model in some fashion 1 6 1 Model N...

Page 8: ...ant 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...

Page 9: ...E 3 Update 3 228 9dB S BYTE 0 Wait 20mS BYTE 2 Update 2 171 7dB S BYTE 0 Wait 30mS BYTE 1 Update 1 143 0dB S BYTE 0 Wait 100mS BYTE 1 2 Update I 80 5dB S Update 2 114 4dB S BYTE 0 Wait 50mS BYTE 3 Upd...

Page 10: ...portant All of the model headers must follow the voice header A field in the voice header specifies how many models follow so the K150FS knows when it reaches the end of the model header list The data...

Page 11: ...r 7F ACK positive acknowledge OK Only Dump Voice Load Voice Block Data Transfer NAK and ACK are described in this document The others are described in a document titled K150FS Version 1 6 Software app...

Page 12: ...the voice data such as an odd number of data nybbles Otherwise it will a NAK Only the simplest errors are checked for Erroneous voice data will likely cause the K150FS software to crash when a key is...

Reviews: