CODING ★ BIP, SON AND SOUND ★

Bidouilles ACPC n°32 - Bip, son and sound

Cela fait des mois qu'ils le promettent. Cela fait des mois que sagement vous patientez sans oser monter le ton. Il était temps pour eux de mettre un terme à cette insoutenable attente qui, soit dit en passant, fait le bonheur des rockers à travers les rappels de concert.

Mais, au juste, qu'attendez-vous ? Les routines pour afficher vos messages personnels Ion de la commande CAT ? Peut-être sont-ce les routines qui formateront vos disquettes à 42 pistes de 12 secteurs, soit 42*12*1024 octets ? Ah bon ?

Laissez-moi deux secondes, j'y réfléchis. Ayé, yé sais ! Vous voulez faire de la zicmu en Assembleur (mais qu'est-ce qu'il est con çui-là : l'a pas vu le titre de la rubrique, là-haut. Non mais. Bip son and sound c'est quoi, alors ? Du Gainsbourg ? Ou de l'Equinoxe peut-être ?

LA MUSIQUE
NE S'IMPROVISE PAS

Je suis entièrement d'accord. On ne peut improviser la musique, même si l'on s'appelle Miles Davis. Ne vous affolez pas, il ne s'agit absolument pas de vous balancer des cours de solfège, mais les notions élémentaires sur le principe de la SAO (son assisté par ordinateur).

Il existe un bon paquet d'ordinateurs, genre pro (appelés vulgairement PC et compatibles) qui par défaut ne peuvent qu'émettre un vulgaire Bip sonore équivalent de notre PRINT CHR$(7). D'autres, comme nos CPC chéris, sont dotés d'un processeur sonore AY-8912. que l'on vénérera sous l'appellation de PSG (pour les ceusses qui ne comprennent rien à rien, sachez que cela n'a aucun rapport avec l'équipe de foot parisienne). Son rôle est simple. Il est capable de jouer simultanément trois sons de fréquences différentes sur trois canaux séparés. En plus, sur un des trois canaux, vous pouvez placer un bruit blanc (Noise en anglais, ce qui donnera les bruits de la mer, vent, hélico...). Les sons émis de la sorte sur le PSG, sont d'une pauvreté déconcertante.

C'EST AINSI, QU'UN BEAU MATIN D'AOUT...

Où notre soleil brillait de son plein éclat sur la ville de Londres et sa banlieue, et que les oiseaux heureux de vivre un tel bonheur chantaient leurs plus beaux récitals en Fa majeur.

C'est ainsi, disais-je, que les programmeurs de la firme Amstrad, décidèrent de mettre au point un programme capable d'améliorer considérablement la qualité sonore de ce minable AY-8912.

LE SYSTEME FUT

L'idée était toute bête. Faciliter l'accès aux commandes du PSG (à travers les vecteurs système et le Basic) et pour enrichir les sons, modifier sous interruption les volumes ainsi que les fréquences émises sur les canaux. Prenons les choses une par une. Pour mieux comprendre les routines système sonore, faisons un peu de Sicba.

SOUND
CANAL,FREQ.,VOLU.,DUR
EE, ENV, ENT, BRUIT

Chaque son est joué sur un canal, ce sont les canaux 1, 2 et 4 ( 2^0,2^1, 2^2 ). On détermine la fréquence désirée (0 à 4095 où 2^12-1), le volume (0 à 15), la durée du son (-32768 à 32767). Pour utiliser les possibilités sonores programmées par les développeurs Amstrad, on donnera les paramètres pour choisir les enveloppes de volume (1 à 15) et fréquence (1 à 15). On finit les paramètres sonores en balançant, si le coeur vous en dit, la valeur désirée pour le bruit (0 à 31). Voilà donc en résumé la commande SOUND de votre machine. Si vous utilisez les enveloppes, faudra pt'être définir ces dernières. ENV pour les enveloppes de volume, et ENT pour les fréquences (16 paramètres maximum par enveloppe). Je ne vous apprends rien en vous disant que l'on peut tester à n'importe quel moment l'état des canaux sonores à l'aide de la commande SQ. Toutes ces possibilités sagement apprises avec le Basic, sont utilisables telles quelles en assembleur.

- CALL &BCA7 - Il initialise le gestionnaire sonore. En arrêtant tous les sons et remettant les enveloppes à zéro. En deux mots, c'est comme si vous éteigniez et rallumiez votre CPC.

- CALL &BCAA - C'est l'équivalent de la commande SOUND du Basic. Cela marche comme en Basic, à savoir, un son n'est pas joué immédiatement si son canal est déjà occupé (c'est le principe des queues sonores). Il attend gentiment son tour et passera dès que possible. Il va de soit que l'on pourra forcer son passage en mettant le bit 7 de son canal à 1 (si vous préférez, en ajoutant 128 au numéro du canal 1 devient 129, 2, 130, etc.). Le registre HL doit pointer dans les 32 Ko de Ram centrale (de &4000 à &C000) sur une zone de données qui n'est autre que les paramètres sonores de la commande SOUND mais dans un ordre différent.
Le canal sur 1 octet, l'enveloppe de volume sur 1 octet, l'enveloppe de fréquence sur 1 octet, la fréquence sur 2 octets, le bruit sur 1 octet, le volume initial sur 1 octet et enfin la durée du son sur 2 octets. Voici un exemple.

    ORG 30000

    LD HL,SON
    JP &BCAA
SON DB 1   ;canal
    DB 2   ;env
    DB 3   ;ent
    DW 426 ;fréquence
    DB 0   ;bruit
    DB 12  ;volume
    DW 300 ;durée

- &BCAD - Test l'état d'un des canaux. C'est l'équivalent de la commande SQ du Basic. Pour cela, avant l'appel il faut impérativement placer dans l'accu la valeur du canal désiré (1 pour le canal A, 2 pour le canal B et 4 pour le canal C). En sortie, ce même accu contient l'état du canal. A savoir, 4 s'il est vide, 132 si un son est dans la queue sonore, 131 si deux sons se trouvent dans la queue sonore, 130 s'il y en a 3, 129 pour 4 et 128 pour 5 sons qui signale la saturation du PSG.

-  &BCB6 - En appelant ce vecteur, on arrête les sons joués sur les trois canaux. Il n'empêche qu'ils ne sont pas pour autant mis à la poubelle, car on peut les relâcher avec le vecteur BCB3 qui annule les effets de la commande précédente.

DES ENVELOPPES BIEN ENROBEES

Nous en arrivons enfin à la bête noire. Celle qui ne figure nulle par ailleurs que dans le Cent Pour Cent du mois de décembre. Voici enfin la meilleure façon de définir les enveloppes de volume et fréquence en assembleur.

-  &BCBC - On utilisera ce vecteur pour définir les enveloppes de volume (de 1 à 15). Attention, ce n'est plus du Basic. A contient le numéro de l'enveloppe et HL pointe sur la zone de données. Le premier octet de cette zone est le nombre de pas dans l'enveloppe (1 à 5, car trois paramèttres constituent un pas), suivi desdits paramètres (trois par trois). On finit le tout par un zéro pour faire joli.

-  &BCBF - Définit les 15 enveloppe de fréquence possible. On l'ultilise comme le BCBC à une toute petite différence prêt. Le numéro de l'enveloppe peut être négative (exemple 255 pour -1) qui signifie que l'enveloppe doit se répéter durant l'exécution du son (en somme, comme pour le Basic).

-  &BCC2 - Fournit l'adresse d'une des enveloppe de volume. On place dans l'accu le numéro de l'enveloppe et en sortie HL pointe sur la zone de données codée comme plus haut.

- &BCC5 - C'est l'équivalent de BCC2 mais pour les enveloppes de fréquence. Même appel, même résultat. Voici pour vous l'exemple qui montrera la méthode la plus élémentaire pour jouer une des musiques les plus connues au monde. On crée une enveloppe, on joue les sons avec leurs durées et on test le canal en attendant la note suivante.

Poum le musico , A100 n°32 , Dec90

Page précédente : Bidouilles ACPC n°31 - RSX

CPCrulez[Content Management System] v8.7-desktop/cache
Page créée en 129 millisecondes et consultée 1256 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.