La Place des Développeurs Le mystère des enveloppes du PSG Non, ce n'est pas une histoire de pot de vin dans le foot
aoineko
Membre non connecté
Conseiller Municipal
Étonnamment, je n'ai pas trouvé de discussion à ce sujet sur le village.
Je suis en train de refaire toute la partie audio de ma lib C et j'en ai profité pour créer un programme pour tester toutes les fonctionnalités du PSG : https://webmsx.org/?ROM=https://github.com/aoineko-fr/CMSX/raw/master/proj/samples/emul/rom/s_psg.rom
J'ai pu validé que toutes mes fonctions étaient OK, mais j'ai quelques comportement étrange au niveau des enveloppes du PSG.
1) Il y a des formes d'enveloppes qui semble identique alors qu'elles ont des entrées à part dans la doc (00xx et 1001, ou 01xx et 1111). Si c'est les mêmes, pourquoi les avoir mis 2 fois ?
2) Quand on désactive le Tone et le Noise sur un canal mais qu'on laisse l'enveloppe activé, il y a souvent un son résiduel. J'ai pas testé sur un vrai MSX, mais j'imagine que OpenMSX simule fidèlement le PSG.
3) Quand on désactive le Tone et le Noise sur un canal, qu'on laisse l'enveloppe activé et qu'on passe la fréquence de l'enveloppe à 0, ça génère un son fort.
Il me semble avoir déjà croisé des infos à ce sujet (à un moment ou je comprenais pas grand chose au PSG), mais je ne sais plus ou c'était.
Je suis en train de refaire toute la partie audio de ma lib C et j'en ai profité pour créer un programme pour tester toutes les fonctionnalités du PSG : https://webmsx.org/?ROM=https://github.com/aoineko-fr/CMSX/raw/master/proj/samples/emul/rom/s_psg.rom
J'ai pu validé que toutes mes fonctions étaient OK, mais j'ai quelques comportement étrange au niveau des enveloppes du PSG.
1) Il y a des formes d'enveloppes qui semble identique alors qu'elles ont des entrées à part dans la doc (00xx et 1001, ou 01xx et 1111). Si c'est les mêmes, pourquoi les avoir mis 2 fois ?
Code TEXT :
// E3 E2 E1 E0 Modulation Envelope //---------------------------------------------------- // _ _ // 0 0 x x _ \__________________ _ // _ _ // 0 1 x x _ /|_________________ _ // _ _ // 1 0 0 0 _ \|\|\|\|\|\|\|\|\|\ _ // _ _ // 1 0 0 1 _ \__________________ _ // _ _ // 1 0 1 0 _ \/\/\/\/\/\/\/\/\/\ _ // _ _________________ _ // 1 0 1 1 _ \| _ // _ _ // 1 1 0 0 _ /|/|/|/|/|/|/|/|/|/ _ // _ __________________ _ // 1 1 0 1 _ / _ // _ _ // 1 1 1 0 _ /\/\/\/\/\/\/\/\/\/ _ // _ _ // 1 1 1 1 _ /|_________________ _
2) Quand on désactive le Tone et le Noise sur un canal mais qu'on laisse l'enveloppe activé, il y a souvent un son résiduel. J'ai pas testé sur un vrai MSX, mais j'imagine que OpenMSX simule fidèlement le PSG.
3) Quand on désactive le Tone et le Noise sur un canal, qu'on laisse l'enveloppe activé et qu'on passe la fréquence de l'enveloppe à 0, ça génère un son fort.
Il me semble avoir déjà croisé des infos à ce sujet (à un moment ou je comprenais pas grand chose au PSG), mais je ne sais plus ou c'était.
On est toujours ignorant avant de savoir.
Quand tu modifies la fréquence d'un canal du PSG, il faut d'abord commencer par la partie basse de la fréquence, et ensuite la partie haute. Sinon, tu créées un pic de fréquence et un bruit.
Les enveloppes du PSG sont peu utilisées en pratique, car elles ont pas mal d'inconvénients. Alors que la fréquence du VBLANK permet une mise à jour du volume à une fréquence suffisamment élevée que pour créer ses propres enveloppes. Edité par Metalion Le 08/01/2022 à 12h43
Les enveloppes du PSG sont peu utilisées en pratique, car elles ont pas mal d'inconvénients. Alors que la fréquence du VBLANK permet une mise à jour du volume à une fréquence suffisamment élevée que pour créer ses propres enveloppes. Edité par Metalion Le 08/01/2022 à 12h43
MSX1: Daewoo DPC-200 / Yamaha CX5M
MSX2: Sony HB-F9P
MSXVR
Vidéo: V9990 (GFX-9)
Audio: MSX-Music (FM-PAC) / MSX-Audio (Audiowave) / OPL4 (Monster Sound FM Blaster) / OPNB (Neotron)
aoineko
Membre non connecté
Conseiller Municipal
Metalion :
Quand tu modifies la fréquence d'un canal du PSG, il faut d'abord commencer par la partie basse de la fréquence, et ensuite la partie haute. Sinon, tu créées un pic de fréquence et un bruit.
J'utilise un mode indirect : je travaille dans un buffer en RAM puis je copie vers le PSG d'un bloc à chaque frame (en tenant compte des spécificités du registre R#7 et R#13).
Du coup, tous les registres 16-bits sont dans l'ordre low > high donc pas de soucis de ce coté là.
Les bruits parasites n'apparaissent que quand le Tone et le Noise sont désactivés et que l'Envelope est activée. Ce n'est pas un setting "normal", mais c'est un comportement étonnant.
Metalion :
Les enveloppes du PSG sont peu utilisées en pratique, car elles ont pas mal d'inconvénients. Alors que la fréquence du VBLANK permet une mise à jour du volume à une fréquence suffisamment élevée que pour créer ses propres enveloppes.
Effectivement.
Ceci dit, en jouant avec les formes d'enveloppe et le générateur de bruit, je suis retombé sur des sons que j'ai déjà entendu dans des jeux :
- avec une période très courte, ça fait un bruit d'hélicoptère,
- avec une longue, ça fait un bruit de vague sur la plage qui ma rappel très fortement celui des Passagers du vent.
Bref, au delà de l'usage qu'on peut en faire, dans le cadre de ma librairie, je veux juste m'assurer que tout fonctionne comme ça devrait.
On est toujours ignorant avant de savoir.
aoineko
Membre non connecté
Conseiller Municipal
OK, j'ai mon explication pour le bruit parasite qui apparait quand on passe la période de l'enveloppe à 0.
En fait, la valeur finale utilise la formule Value = Fi / (16 x T) . Donc si T vaut 0, on tombe sur une division par 0... ce qui explique le résultat bizarre.
D'ailleurs, le MSX Red Book, précise bien que les valeurs correctes vont de 1 à 65535.
C'est valable aussi pour les autres périodes (tone et noise). Même si, dans ce cas, une valeur de zéro créé juste... un silence.
Bon, par contre, ça explique pas encore le bruit parasite quand on désactive le Tone et le Noise.
En fait, la valeur finale utilise la formule Value = Fi / (16 x T) . Donc si T vaut 0, on tombe sur une division par 0... ce qui explique le résultat bizarre.
D'ailleurs, le MSX Red Book, précise bien que les valeurs correctes vont de 1 à 65535.
C'est valable aussi pour les autres périodes (tone et noise). Même si, dans ce cas, une valeur de zéro créé juste... un silence.
Bon, par contre, ça explique pas encore le bruit parasite quand on désactive le Tone et le Noise.
On est toujours ignorant avant de savoir.
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie