|
|||||||||||||||||||||||||||||||||||||||||||
|
Voici en théorie le processeur musical de l'Amiga (Paula pour les intimes). Fonctionnement de base Contrairement à certains ordinateurs (Atari ST et Amstrad CPC par exemple), la génération d'un son sur Amiga ne se fait pas de manière synthétique. Le son est au départ numérisé puis converti. Ce qui signifie que l'ordinateur a les "échantillons" du son en mémoire qu'il peut reproduire : un son de piano, de grosse caisse ou même de tronçonneuse. Le coprocesseur sonore va lui-même lire la mémoire de l'Amiga pour récupérer les valeurs de chaque échantillon sonore, puis il va convertir la valeur numérique de cet échantillon en une valeur analogique, valeur qui va être transformée en son par le haut-parleur. Or, en musique, une mélodie est composée d'un ensemble de notes, chacune d'entre elles étant fournie par un instrument, ces notes pouvant être jouées à des fréquences différentes (aigues, graves...). Générer un son Dans le principe, il est très simple de faire une musique sur Amiga. Il suffit d'avoir en mémoire une gamme d'échantillons sonores de différents instruments et de demander à l'Amiga de bien vouloir les jouer à la bonne fréquence. Nous allons voir comment générer un son, qui vous servira de base pour vos futures créations musicales. Tout d'abord, il faut avoir en mémoire les échantillons de notre instrument. Soit vous disposez d'un échantillonneur sonore (cartouche) et donc, pas de problème, soit vous disposez déjà d'échantillons sonores (disquettes d'instruments). En dernier ressort, si l'on n'a pas de sons d'instrument, on peut en créer de toute pièce : prenons par exemple une forme d'onde très simple, sinus par exemple. Cette forme d'onde va nous générer un son pas spécialement beau, mais on fera avec ! Un signal sinusoïdal sera échantillonné de la manière suivante, en huit échantillons : 0, 90, 127, 90, 0, -90, -127, -90. On a par conséquent en mémoire tous les échantillons du son, sur 8 bits chacun, et on a "n" échantillons. Attention, je rappelle que les coprocesseurs de l'Amiga ne peuvent accéder qu'à la mémoire dite "Chip". Nos échantillons n'échappent pas à la règle et doivent se trouver en mémoire Chip. Dans notre exemple de sinus, prenons "n=8", huit échantillons pour notre son, soit huit octets. La hauteur d'un son est définie par sa fréquence, c'est-à-dire la vitesse à laquelle le son est rejoué. Nous avons maintenant tous nos paramètres pour jouer notre son, enfin presque, il manque le volume, variable de 0 à 64, 0 étant "éteint", alors que 64 indique un volume "normal". L'Amiga dispose de quatre voies, il peut jouer simultanément quatre sons différents. Ces voies sont notées 0, 1, 2 et 3. Nous choisirons la voie 0. Les registres qui définissent un son sont :
Le choix de la période est assez compliqué, puisqu'il dépend de plusieurs paramètres : la fréquence à laquelle notre son a été échantillonné, la longueur de ce son, la fréquence à laquelle on veut rejouer ce son. Ce registre indique au coprocesseur à quelle vitesse il doit lire chaque échantillon. La valeur de AUDOPER se calcule ainsi : AUDOPER-(temps en microseconde entre deux échantillons)/0,279365. Par exemple, si un son de une seconde a été échantillonné sur 10 ko, la valeur de AUDOPER se calcule en faisant : 100/0,279365=356 (puisque 1 seconde/10 000 octets=100 microsecondes). Description du registre DMACON Ceci fait, il suffit de donner l'ordre au coprocesseur de jouer le son, en agissant sur le registre DMACON. DMACON=$DFF096 Bit 15 : SETCLR Indique si les bits sélectionnés sont mis à 0 ou a 1. Bit 9 : DMAEN Mettre à 1 pour autoriser l'accès à la mémoire. Bit 3 : AUD3EN Autorise la voie 3 à être jouée. Bit 2 : AUD2EN Autorise la voie 2 à être jouée. Bit 1 : AUD1EN Autorise la voie 1 à être jouée. Bit 0 : AUDOEN Autorise la voie 0 à être jouée (c'est ce bit qui nous intéresse). Lecture et arrêt du son Le registre DMACON permet, entre autres, de déclencher le DMA audio pour rejouer le son. Nous voulons jouer la voie 0, donc il faut mettre DMACON=$8201. Et hop, miracle ! Un son sort de notre haut-parleur. Le son est répété tant qu'on ne dit pas au coprocesseur de s'arrêter, ou tant qu'on ne lui ordonne pas d'en jouer un autre en changeant les valeurs de ses registres. Pour arrêter ce son (qui est assez horripilant, il est vrai), rien de plus simple. Il suffit de mettre à 0 le bit "AUD0EN" en faisant DMACON=$0001. Les adresses des registres pour les autres voies sont les mêmes que celles de la voie 0 en ajoutant $10 pour la voie 1, $20 pour la voie 2, et $30 pour la voie 3. Exemple : AUD3VOL = $dff0a8 + $30 = $dff0d8. Listing en GFA Basic Pour mettre cela en pratique, je vous propose un petit programme en GFA Basic (facilement adaptable en AmigaBasic) qui va illustrer notre propos. Ce programme permet de lire un fichier de son numérisé (un son de Soundtracker par exemple) ou de jouer la forme d'onde sinusoïdale dont nous avions parlé. Théoriquement, il suffit de faire "RUN" et "RETURN" pour entendre un petit bip sortir de notre Amiga. Vous pouvez essayer de modifier les différents paramètres (vitesse, échantillons....) pour voir les résultats (le plus souvent étonnants). Le processeur sonore de l'Amiga dispose d'opérations plus complexes, par exemple la modulation de la fréquence d'une voie par une autre, qui permet de faire des effets intéressants. Une autre remarque concerne les échantillons : les musiques prennent beaucoup de place mémoire (souvent de 100 à 200 ko) car, pour être de bonne qualité, lés échantillons sont de grande taille. C'est pourquoi beaucoup se sont lancés dans la génération des sons synthétiques sur Amiga. C'est-à-dire que les échantillons ne sont plus numérisés mais calculés en temps réel. Cela permet d'avoir des musiques de moins de 10 ko parfois. Cette méthode n'a pas que des avantages : plus d'échantillons "complexes", temps processeur plus important.... Mais c'est un moyen de faire des musiques qui sonnent différemment. Voilà, nous allons nous arrêter là pour la génération de sons sur Amiga. Vous devriez en savoir assez pour faire vos premiers balbutiements en musique ! ![]()
|