CODINGAMSLIVE ★ AMSLIVE n°12 - VU, MAITRE ? ★

AMSLIVE n°12 - Vu MetreCoding Amslive

Plat du jour : Les Equalisers ! 1 ère Partie - Le principe

Mais d'abord ! Un nez kwa liseur c'est quoi donc ? Classiquement, c'est un effet qui permet de voir l'évolution du volume sonore des 3 voies (comme un vumètre), en fonction de la fréquence. La méthode pour faire des equalisers et très proche de celle des vumètres. La seule différence c'est qu'il faut prendre en compte les registres de fréquence du PSG en plus des registres de volume.

(NDRC : gros abus de langage. Un équaliser -égaliseur en français-, comme son nom l'indique, permet d'ajuster individuellement l'amplification de bandes de fréquence. C'est le vumètre -volume meter- ,  comme son nom l'indique aussi, qui mesure et représente le volume, que ce soit d'une voie entière, ou de bandes de fréquence). (NDSNN : Madram, on avait dit que tu te reposais pendant un mois, donc, par pitié, tu ranges ton clavier dans un coin et tu vas dormir. Merci.)
Quelques rappels : sur CPC le volume peut varier entre 0 et 1 5 et la fréquence est définie par une valeur comprise entre 0 et 4095  qui correspond en fait à la période du son.

Donc sur CPC, on peut avoir 4096 notes différentes par leur fréquence (sans tenir compte des enveloppes hard). Imaginons que nous ayons une table de
4096  octets où chacun de ces octets représentent le volume sonore à une fréquence donnée.

A chaque synchro verticale on joue la musique qui va modifier les registres du PSG pour obtenir un son (audible de préférence :). Avant de tester le PSG, on s'occupe de décrémenter chaque octet de la table qui n'est pas égal à 0 puis on teste la fréquence et le volume des 3 voies sonore. Si par exemple la voie 1 a une fréquence définie par la valeur 142 (LA 4/440Hz) et un volume de 10, et bin on met dans le 142ème octet de notre table la valeur du volume, soit 10. On fait de même pour les voies 2 et 3.

Pour représenter cette table, on peut faire comme dans le Soundtracker 128 ou comme dans la Hard'n'Heavy (Voyage 93) ou encore avec des sprites, des rasters, du plasma, wobbler,...
Par contre on ne va pas s'amuser à représenter 4096 valeurs ! On va se contenter de 64 ce qui est suffisant pour un bon rendu visuel.
Les registres du AY utiles pour les equalisers sont :

Voie 1 R0 et R1 : poids faible et fort de la fréquence.
R8 : valeur du volume sur les 4 bits de poids faible.

Voie 2 R2 et R3 : idem voie 1
R9       : idem voie 1

Voie 3 R4 et R5 : idem voie 1
R10      : idem voie 1

Pour le moment on n'utilisera que cela. Remarques : la fréquence est codée sur 12 bits donc seul les 4 bits de poids faible de R1, R3 et R5 sont utiles. Pour obtenir cette valeur sur 12 bits en fonction de la fréquence (en Hertz), on fait :

Valeur12bit = 62500/fréquence

Le volume lui est codé sur 4 bit. Le bit 4 de R8, R9 ou R10 permet d'activer ou non les enveloppes hard du PSG. Voila, à présent on s'attaque à la pratique avec un source d'exemple.

2ème partie - la deuxième partie.

Donc on a vu qu'il fallait gérer une table de 64 valeurs plutôt que de 4096. Pour cela la méthode ne change pas si ce n'est qu'il faut diviser par 64 la valeur des registres de fréquence ! (si si ! 4096/64=64 !!!).

Pourquoi choisir 64 et pas 157 ? Bin paske les divisions par des puissances de 2 sont beaucoup plus simples et rapides à faire avec le Z80 ! Il suffit juste de faire des décalages ! Le source d'exemple est volontairement très primitif afin d'être compris rapidement pour que VOUS puissiez l'améliorer à vot' sauce à vous !

Primitif d'abord car les 3 voies sonore n'ont pas le même niveau de priorité, c'est la dernière testée qui l'emporte ! C'est à dire que si plusieurs voies ont la même période, c'est le volume de la dernière voie testée qui sera pris en compte alors que cela devrait être le volume maximum atteint PARMI les 3 voies... (NDMR : ah ?!?) (NDSNN : Mad ! AU LIT !)

Primitif ensuite parce tous les paramètres ne sont pas pris en compte comme l'influence des enveloppes hard ou du bruit...

Voici en gros la routine de gestion de la table :

; DECREMENTE SI VALEUR > 0
     LD  HL,FREQTAB
     LD  B,64DECTAB
     LD  A,(HL)
     OR  A
     JR  Z,ZERO
     DEC (HL)
ZERO INC HL
     DJNZ DECTAB
; LECTURE DES REG0 ET 1
; (PERIODE VOIE 1)
     LD A,1           ;;PSG REG1
     CALL RPSG.REG
     LD E,A
     LD A,0           ;; PSG REG0
     CALL RPSG_REG
; PERIODE/64
; => GARDE LES 6 BIT DE POIDS
;    FORT DE LA PERIODE
;    (2^6=64)
     RLA
     RL E
     RLA
     RL E
     LD D,0
     LD A,8          ; PSG REG8
     CALL RPSG_REG
     AND #0F         ;; VOLUME SUR 4 BITS
     LD HL,FREQTAB
     ADD HL,DE
     LD(HL),A
;IDEM AVEC VOIE 2
;(REG 2,3 ET 9)
;IDEM AVEC VOIE 3
;(REG4,5ET10)

Voila ! Maintenant il ne vous reste plus qu'à afficher les 64 valeurs à l'écran grâce à des sprites de barres verticales, etc !

RPSG_REG est une routine de lecture d'un registre du PSG (Pas Sur de Gagner) classique. Mais comme tout le monde n'a peut-être pas cette routine en voici une version pas optimisée :

     LD BC,#F782
     OUT (C),C
     LD B,#F4     ; Sélectionne le
     OUT (C),A    ; Registre
     LD BC,#F6C0  ;Paf!
     OUT (C),C
     XOR A
     OUT (C),A
     LD BC,#F792
     OUT (C),C
     LD BC,#F640
     OUT(C),C
     LD B,#F4     ; Ici on vient lire
     IN A,(C)     ; sa valeur
     LD BC,#F782
     OUT (C),C
     LD BC,#F600
     OUT (C),C
     RET

Vala vala ! Le source complet et commenté de cet article devrait être fourni sur un AFC Disk. (NDSNN : Et pour les zentils internautes, visitez le site Amslive pour le récupérer !)

AMSLIVE n°12

★ ANNÉE: ???
★ AUTEUR: GRIM

Page précédente : AMSLIVE n°12 - Sons et Samples

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