Le son
Pour émettre un son, on peut utiliser la commande sound
Syntaxe :
sound voix, note, distorsion, volume
Sachant:
- qu'il y a 4 voix (les canaux variant entre 0 et 3).
- Que la note peut varier entre 0 et 255 (si la valeur est plus grande, il prendra la valeur correspondant entre 0 et 255)
- Que la distorsion varie entre 0 et 14 par valeur paire. 10 et 14 sont des tons "purs". Les autres provoquant du bruit.
- Enfin, le volume entre 0 et 15
Mais bien entendu, des adresses mémoires correspondent aussi à tout celà:
AUDF1 | D200 | 53760 | Son voix 1 |
AUDC1 | D201 | 53761 | Distorsion et volume voix 1 |
AUDF2 | D202 | 53762 | Son voix 2 |
AUDC2 | D203 | 53763 | Distorsion et volume voix 2 |
AUDF3 | D204 | 53764 | Son voix 3 |
AUDC3 | D205 | 53765 | Distorsion et volume voix 3 |
AUDF4 | D206 | 53766 | Son voix 4 |
AUDC4 | D207 | 53767 | Distorsion et volume voix 4 |
AUDCTL | D208 | 53768 | Indique entre autre l'horloge à utiliser pour les sons |
Pour choisir la voix, il suffit d'adresser dans la bonne adresse. La correspondance voix et fonction sound étant la suivante:
Voix 1 = à la fonction sound sur canal 0
Voix 2 = à la fonction sound sur canal 1
...
Le fonctionnement des adresses concernant le son est similaire à sound.
Le fonctionnement des adresses gérant la distorsion et le volume est le suivant:
Les huits bits de poids forts gérent la distorsion. Les huits bits de poids faibles gérent le volume.
Pour coder la distortion valant 10 et un volume faisant 8:
10 donne A en hexa.
8 donne 8 en hexa.
La valeur sera donc A8...ou en décimal:168
Pour éviter d'avoir des problèmes concernant le son, il est préférable d'éviter que la somme des volumes sur les 4 voix ne dépassent la valeur 32.
A noter : il existe un registre pour le son: AUDCTL. Personnellement je ne le connaissais pas, je ne l'ai découvert que très récemment. Je n'ai pas fait de test sur mon 800 XL (pas envie !). Je ne pense pas que l'on puisse se fier aux émulateurs (je peux me tromper). Voici donc un extrait de ce que j'ai trouvé sur le site www.atariarchives.org:
L'adresse pour retrouver le texte intégralement : www.atariarchives.org/agagd/chapter8.htm
AUDCTL Register
In addition to the independent channel control bytes (AUDC1-4), there is one
other register, AUDCTL at 53768 or $D208, that affects all of the channels.
Each bit in AUDCTL is assigned a specific function.
Bit Description
7 Makes the 17-bit poly counter into a 9-bit poly
6 Clock channel one with 1.79 MHz
5 Clock channel three with 1.79 MHz
4 join channels one and two (16 bit)
3 join channels three and four (16 bits)
2 Insert high pass filter into channel one, clocked by
channel two
1 Insert high pass filter into channel two, clocked by
channel four
0 Switch main clock base from 64 KHz to 15 KHz
Shifting the 17-bit poly counters to 9-bit poly counters by setting bit 7, will create more repeatable sound patterns rather than white noise-type patterns. Setting the channels to a higher clock frequency (setting bits 5 and 6), will produce higher tones. Likewise, setting the bit 7 from 64 KHz to 15 KHz will produce much lower tones.
If you couple two of the sound channels by setting either bits 3 or 4, you reduce the number of channels to two but gain increased tonal range. Normally, you get a five octave range using the eight bits of a single channel, but the combined 16-bit register increases the tonal range to nine octaves.
Sometimes you may encounter problems POKEing sounds in BASIC or in Machine language without initializing the sound registers. BASIC requires a null sound statement, i.e., SOUND 0,0,0,0. In Machine language you need to store a 0 at AUDCTL ($D208), and a 3 at SKCTL ($D20F).