Here is a line-by-line explanation of Example Program 2. For now, we are interested in how the three voices are controlled.
LINE-BY-LINE EXPLANATION OF EXAMPLE PROGRAM 2:
| Line(s) | Description |
|---|---|
| 10 | Set S equal to start of sound chip and clear all sound chip registers. |
| 20 | Dimension arrays to contain activity of song, 1/16th of a measure per location. |
| 30 | Dimension array to contain base frequency for each note. |
| 40 | Store waveform control byte for each voice. |
| 50 | Set high pulse width for voice 2. Set high frequency for filter cutoff. Set resonance for filter and filter voice 3. |
| 60 | Read in base frequency for each note. |
| 100 | Begin decoding loop for each voice. |
| 110 | Initialize pointer to activity array. |
| 120 | Read coded note. |
| 130 | If coded note is zero, then next voice. |
| 140 | Set waveform controls to proper voice. If silence, set waveform controls to 0. |
| 150 | Decode duration and octave. |
| 160 | Decode note. |
| 170 | Get base frequency for this note. |
| 180 | If highest octave, skip division loop. |
| 190 | Divide base frequency by 2 appropriate number of times. |
| 200 | Get high and low frequency bytes. |
| 210 | If sixteenth note, set activity array: high frequency, low frequency, and waveform control (voice on). |
| 220 | For all but last beat of note, set activity array: high frequency, low frequency, waveform control (voice on). |
| 230 | For last beat of note, set activity array: high frequency, low frequency, waveform control (voice off). |
| 240 | Increment pointer to activity array. Get next note. |
| 250 | If longer than before, reset number of activities. |
| 260 | Go back for next voice. |
| 500 | Set Attack/Decay for voice 1 (A=0, D=0). Set Sustain/Release for voice 1 (S=15, R=0). |
| This page has been created by Sami Rautiainen. | |
| Read the small print. | Last updated February 10, 2002. |