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:
|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.|
|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.|