CODING ★ BASIC - LE SON SUR AMSTRAD ★

Basic - le Son sur Amstrad

Les micro-ordinateurs Amstrad sont pourvus de fonctions sonores très intéressantes. Malheureusement, devant la relative complexité de syntaxe des commandes, nombreux sont ceux qui abandonnent rapidement l'espoir de sortir quelques notes ressemblant de près ou de loin à de la musique. Le but de cet article est de vous montrer qu'avec quelques connaissances de base, il est tout-à-fait possible de sortir de la musique de cette petite boîte noire appelée générateur de signaux AY-3-8912.

Avant de vouloir créer un son, il faut déjà savoir exactement ce qu'est un son. Une porte claquée comme un accord plaqué sur un orgue sont tous les deux des sons. Quel phénomène physique fait que l'on entende un choc, la vibration d'un objet, etc. ? Tout simplement, c'est l'air qui nous transmet les vibrations générées par l'objet qui vient de tomber ou la corde que l'on vient de pincer. Ces vibrations de l'air viennent à leur tour faire vibrer le tympan, celui-ci envoyant l'onde reçue vers le cerveau. Si maintenant on veut reproduire un son, il va falloir faire une sorte de cahier des charges pour voir quels paramètres vont entrer en jeu. Après une analyse rapide nous trouvons trois paramètres permettant d'identifier un son :

1 - la fréquence.
2 - l'évolution de l'amplitude dans le temps.
3 - l'évolution de la fréquence dans le temps.

1.  — La fréquence : c'est grâce à elle que l'on va déterminer la hauteur de la note jouée ou de l'objet frappé. Lorsque un son est émis, il émet sa fréquence mais aussi cette même fréquence multipliée par 2, 3, 4, etc. C'est ce qu'on appelle les harmoniques et c'est grâce à celles-ci qu'un son est plus ou moins riche. Dans le cas de l'Amstrad il faut faire un choix entre un son riche mais mono-dique ou trois sons polyphoniques, puisque nous n'avons à notre disposition que trois générateurs pouvant jouer en parallèle.

2.  — L'évolution de l'amplitude dans le temps : lorsque l'on tape une note sur un piano, la note est d'abord forte puis son volume diminue progressivement. C'est ce que l'on appelle son enveloppe de volume.

3.  — L'explication est la même en ce qui concerne l'enveloppe de ton. La seule différence est que le paramètre qui évolue dans le temps est ici la fréquence.
Après ce bref rappel des notions fondamentales du son, je vais entrer dans le vif du sujet avec la fonction Sound. Cette fonction se décompose en sept paramètres qui sont les suivants :
a - le numéro du canal, b - la période de la note, c - la durée de la note, d - le volume de sortie, e - le numéro de l'enveloppe de volume, f - le numéro de l'enveloppe de ton, g - la valeur du générateur de bruit. Notons tout de suite qu'il est possible de faire de la musique avec uniquement les deux premiers paramètres, mais dans ce cas il ne faut pas s'attendre à autre chose qu'au timbre agaçant des jeux électroniques de poche. Soyons   donc   plus   sérieux   et   analysons ensemble  les  différentes  commandes  de Sound.

Le numéro du canal

L'Amstrad relié à une chaîne Hi-Fi est capable de cracher son énergie en stéréo. Pour ce faire, il possède trois canaux appelé A, B, C. A correspond au canal de droite, B correspond au centre et C correspond au canal de gauche. De plus, il est possible de synchroniser ces trois canaux afin d'obtenir une polyphonie. Tout ceci nous amène à définir différents codes de commande.

1  : son sur le canal A.
2  : son sur le canal B.
4 : son sur le canal C.
8 :  le son attend l'activation de A pour démarrer.
16 : le son attend l'activation de B pour démarrer.
32 : le son attend l'activation de C pour démarrer.
64 : le son attend une commande Release pour jouer.
128 : le son détruit les sons en attente sur les canaux et est joué immédiatement sauf s'il a rendez-vous avec un autre canal.

Exemples :

Sound 1,284 : le la est joué à droite. Sound 4,284 : le la est joué à gauche. Et puisque nous voulons faire de la musique en  parfait   accord   avec   notre  Amstrad, jouons avec lui l'accord parfait do, mi, sol. do : Sound 33,478 (1 + 32). mi : Sound 34,379 (2 + 32). sol : Sound 28,319(4 + 8+16). Ces quelques exemples montrent qu'il est possible de jouer un morceau à trois voies ou, pour les perfectionnistes du son, de synthétiser un instrument monodique avec sa fondamentale et deux harmoniques.

La période

L'Amstrad n'a pas de clavier musical et si vous lui tapez do, ré, mi, etc., il ne vous répondra que des grossièretés et rien de musical en tous les cas. Dans le manuel d'utilisation une table est fournie donnant la correspondance entre le nom de la note, son octave, sa fréquence et sa période. Notons que le la de référence se situe dans octave 0. Il suffit donc de traduire les notes en période. Attention aux fausses notes dans les DATA !
Afin d'illustrer le changement de période, essayons de créer une alarme dans le style flics américains. Lorsque l'on entend ce bruit, qu'entend-on ? Rien de plus qu'un son qui monte très vite. Le son étant assez aigu, nous allons prendre les octaves 2 et 3. Par une boucle, nous allons faire varier la période de 10 en 10 afin que la montée soit rapide. Il ne reste plus qu'à boucler le programme pour que la séquence soit jouée indéfiniment.

10 REM SIRENE AMERICAINE
20 FOR I = 119 TO 32 STEP -10
30 SOUND 1,I,3
40 NEXT
50 GOTO 20

La durée

Qui n'a jamais entendu qu'une blanche vaut deux noires, une noire valant deux croches.
Ici, le problème est le même que pour le nom de la note. L'Amstrad, sans racisme, refuse aussi bien les noires que les blanches. Mais si vous lui parlez de chiffres, alors là, c'est autre chose. De plus, au fur et à mesure que ce chiffre augmente, la douce voix de votre micro-ordinateur se fait entendre de plus en plus longtemps. Petit détail, le compte se fait en centièmes de secondes, c'est-à-dire que la noire à 60 correspond à 100. Si la valeur de la durée est négative, le chiffre représente alors le nombre de fois où l'enveloppe sera répétée.
L'exemple suivant, bien que très simple, illustre très bien le paramètre durée. Prenons la séquence do, mi, sol, mi, do. Doublons la valeur de la durée à chaque tour de compteur et le tour est joué. Nous avons un morceau joué depuis la double croche jusqu'à la blanche.

10 REM DUREE VARIABLE
20 FOR I = 1 TO 5
30 RESTORE 80
40 FOR J = 1 TO 6: READ NO
50 SOUND 1, NO, 15*I
60 NEXT J
70 NEXT I
80 DATA 239, 190, 159, 190, 239,0

L'ordinateur étant un engin évolué, nous allons le laisser chanter tout seul sa petite chanson. Pour ce faire, nous allons créer un générateur aléatoire de période et de durée. Afin que le son reste audible, nous arrêterons la bête à l'octave - 1 surtout si l'on ressort le son sur le haut parleur du micro-ordinateur.

10 REM AMSTRADELIRE
20 X = RND(1)*956: Y = RND(1)*200
30 NO = INT(X): DU = INT(Y)
40 IF NO > 50 THEN  SOUND 1,NO,DU
60 GOTO 20

Le volume

Ce paramètre fixe le volume auquel la note sera jouée. Si on demande de jouer la note avec une enveloppe de volume, cette valeur fixe alors le volume de départ de l'enveloppe. Si la valeur est 0, alors le volume est fixé uniquement par l'enveloppe. Nous avons la possibilité d'ouvrir un fichier de quinze enveloppes différentes. Dans la commande Sound, on donne le numéro de l'enveloppe que l'on désire utiliser. L'explication de l'enveloppe de ton est identique à celle de l'enveloppe de volume.

Le générateur de bruit

Lors de la création d'un son, il est possible d'ajouter un bruit à la note jouée. Cette adjonction se fait par cette commande. Plus le chiffre est élevé et plus le bruit couvre la note jouée (0 à 31 ). Ce paramètre sera donc plus utile dans la synthèse de bruit que dans la musique.

Sachant maintenant faire à la fois du bruit et de la musique, essayons d'imaginer le bruit d'une chute depuis le moment où vous sautez par la fenêtre, poursuivi par des bugs jusqu'au moment où l'on vous rend un dernier hommage. Tout d'abord la chute. Par convention, c'est une note qui baisse au fur et à mesure que le trottoir se rapproche. Vient ensuite le choc lui-même, violent par définition et qui s'amplifie avec la résonnance alentour. Enfin, allongé au sol, vous gisez, enveloppé d'une douce musique.

10 REM CHUTE
20 FOR I = 60 TO 239
30 SOUND 1,I,3,5
40 NEXT
50 FOR I = 15 TO 1 STEP -1
60 SOUND 17,956,I*2.5,l/2,„5
70 SOUND 10,851,I*2.5,l/2,„5
80 NEXT
90 FOR I  =  1 TO 2000: NEXT
100 FOR I =  1 TO 21: READ NO,DU
110 SOUND 1,NO,DU,6
120 NEXT
130 DATA 239,60,0,10,239,60,0,10,239,30,0,5,239,30,0,5
140 DATA 201,45,0,5,213,30,0,5,213,30,0,5,239,30,0,5
150 DATA 239,30,0,5,253,30,0,5,239,90

Ayant terminé ce tour d'horizon de la fonction Sound, nous allons maintenant entrer dans la partie la plus délicate de la génération de son. En effet, rien ne sert de faire un programme musical si l'on doit toujours entendre la même sonorité. Grâce aux commandes d'enveloppes de volume et de ton, nous allons remédier à cette lacune. Je tiens tout de même à mettre en garde les non-musiciens. Avant de se lancer dans le calcul d'une enveloppe, il faut avoir une idée précise du son que l'on cherche à copier. Alors, avant de taper votre programme, écoutez bien le vrai son et coupez-le en petits morceaux.

Enveloppes de volume

Sur tout synthétiseur, on trouve un circuit appelé ADSR (attack, dekay, release, sus-tain). Ce circuit permet de fixer l'évolution de la note depuis le moment où l'on frappe une touche du clavier jusqu'au moment où la note disparait. Ce paramètre est donc de la plus haute importance. Il est en effet impossible de comparer l'enveloppe d'une flûte avec celle d'un piano même si la note louée a la même fréquence. En général, on peut dire que les instruments à cordes ont une attaque plus rapide que les instruments à vent, mis à part les instruments à hanches. On ne peut comparer non plus la tenue d'un accord plaqué sur un clavier d'orgue avec celui du même accord mais cette fois-ci sur un piano.

Amstrad offre la possibilité de définir cinq pentes successives entre le début et la fin de la note. Mis à part le premier paramètre qui définit le numéro de l'enveloppe, les autres paramètres seront identiques, par groupe de trois et cela au maximum cinq fois. Pour chaque groupe de paramètres, nous aurons :

a - le nombre pas pour ce segment (0 à 127) ;
b - l'incrémentation en volume (-128 à + 127) ;
c - l'incrémentation en temps (0 à 255).
La commande  Basic se présentera donc ainsi :
ENV x,nbre pas(l),vol(l),tps(l),etc jusqu'à 5.

Essayons, à partir de là, de créer un son de guitare. Dans un premier temps, la meilleure solution est de prendre sa guitare, pour les heureux possesseurs, ou un enregistrement pour les autres. Qu'entendons-nous alors ? Une attaque rapide, sèche, et une diminution progressive du son. Une fois ce son bien assimilé, il est possible de se mettre face au clavier et d'essayer de numériser le tout. Attention au piège. Vérifiez la corellation entre la durée de votre note la plus courte et la durée de l'enveloppe. Avec une guitare moyenne, on peut considérer que la réverbération donne un son audible de deux secondes, soit 200 unités de temps. La montée doit être rapide. Donnons-lui donc cinq unités de temps. Après cette impulsion, donnons une petite diminution de volume rapide de 30 % du son et enfin la lente diminution du son dans le cas de notes longues. Après un petit calcul, cela donne :

ENV 1,1,15,5,1,-5,5,10,-1,19

Entrez quelques notes et essayez cette enveloppe. Pour un son de piano, il faudra marquer un très léger palier après la montée. Pour un clavecin, vous devrez augmenter la pente descendante du son. Dans tous les cas, le son gagnera si vous rajoutez le son de l'octave supérieure et la tierce de celle-ci dans un rapport de environ 1 pour 10. En ajoutant un bruit égal à 1 ou 2, vous obtiendrez un semblant de flûte. Comme nous l'avons vu plus haut, l'incrément de volume peut avoir une valeur comprise entre - 128 et 127. Néanmoins pour un confort d'utilisation, je pense qu'il est préférable de rester dans la zone 0-15, à moins que vous aimiez vraiment les calculs inutiles.

Enveloppes de ton

L'enveloppe de ton sert à moduler la période à partir de la période définie dans la commande Sound. L'unité de variation est donc l'unité de période. La syntaxe Basic est très proche de celle utilisé pour ENV. Le seul paramètre qui change est le deuxième de chaque groupe, celui-ci donnant la variation de période. La syntaxe devient donc :

ENT No enveloppe, nbre de pas(l), periode(l), tps(l), jusqu'à 5. Si le numéro d'enveloppe est négatif, alors, l'enveloppe sera répétée jusqu'à la fin de la durée de la note.
Reprenons notre guitare de la partie précédente et essayons de la transformer en une sorte de guitare hawaïenne. Que se passe-t-il dans ce cas-là ? Tout simplement une montée rapide du son après le pincement de la corde. Attention ! Une montée de la note correspond à une diminution de la période. Jouant sur l'octave 0, nous prendrons une montée de environ-une quinte. Essayons-donc :

ENT 1,5,-30,10

Une autre application de ENT est le vibrato. Sachant qu'une enveloppe dont le numéro d'enveloppe est négatif sera répétée pendant toute la durée de la note, il ne reste plus qu'à évaluer la fréquence de notre vibrato. Afin que le son ne soit pas trop déformé, l'incrément de période ne doit pas être trop important. Pour un vibrato à cinq périodes par seconde, essayez :

ENT -1,1,20,5,1,-40,10,1,20,5

Signalons que ce même effet peut être appliqué à la fonction ENV pour créer un trémolo. Attention, avant de manipuler ENT, vérifier la gamme de période dans laquelle on travaille. En effet, une variation de 20 dans les notes graves (grandes périodes) engendre une petite variation (un quart de ton) alors que cette même variation engendre un écart de un ton dans les périodes moyennes et jusqu'à une quinte dans l'extrême aigu.

Avant de nous lancer dans l'écriture d'un morceau de musique, je veux encore vous donner un petit conseil. Dans le cas de notes doublées, n'oubliez pas d'intercaller un petit silence entre les deux notes sinon, au lieu de jouer deux croches, par exemple, l'Amstrad jouera une seule noire. Sachant maintenant programmer une mélodie et définir la nature du son que vous désirez, il ne vous reste plus qu'à vous lancer. Surtout ne vous découragez pas. L'Amstrad n'est pas un synthétiseur et de ce fait jongler avec les sons est plus difficile. Bon courage tout de même et tous à vos pupitres.

AMSTRAD MAGAZINE n°14 , http://cpcrulez.fr

★ ANNÉE: ???
★ AUTEUR: Dominique Gourdier

CPCrulez[Content Management System] v8.75-desktop/cache
Page créée en 063 millisecondes et consultée 1619 fois

L'Amstrad CPC est une machine 8 bits à base d'un Z80 à 4MHz. Le premier de la gamme fut le CPC 464 en 1984, équipé d'un lecteur de cassettes intégré il se plaçait en concurrent  du Commodore C64 beaucoup plus compliqué à utiliser et plus cher. Ce fut un réel succès et sorti cette même années le CPC 664 équipé d'un lecteur de disquettes trois pouces intégré. Sa vie fut de courte durée puisqu'en 1985 il fut remplacé par le CPC 6128 qui était plus compact, plus soigné et surtout qui avait 128Ko de RAM au lieu de 64Ko.