MSX Village forum

Le Kiosque à Musique Musique PSG en assembleur

aoineko Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2695

Le 24/01/2021 à 11h21

Reprise du message précédent

Le replayer ayFX a été super simple à ajouter.
Je suis partie de la version originale de SapphiRe (j'ai été échaudé par les versions passées entre plusieurs mains).
Ca fait du bien d'avoir du code propre et bien commenté ! ^^
J'ai ajouté pas mal de fonctions de get/set des données mais sur le cœur du code, je prévois qu'une modification (utiliser un pointer de fonction pour simplifier le code spécifique à 1 canal).

C'était quoi le problème de Fusion-C en utilisant ayFX et PT3 ?
Tout à l'air de bien fonctionner.


On est toujours ignorant avant de savoir.
Github    
ericb59 Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++ Groupe : Shoutbox

Inscrit le : 17/04/2012 à 10h25

Messages: 5481

Le 24/01/2021 à 12h02
Le problème constaté, est que certain sons AYFX ne se coupent pas et continue de jouer une « queue » sonore ... jusqu’à ce qu’un autre son vienne vienne le virer.


banniere-ericb59e
Site web    
aoineko Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2695

Le 24/01/2021 à 14h15
ericb59 :
Le problème constaté, est que certain sons AYFX ne se coupent pas et continue de jouer une « queue » sonore ... jusqu’à ce qu’un autre son vienne vienne le virer.


Ah. J'ai essayé un vingtaine de sons, sans soucis. :gne
Ca peut pas venir d'un fichier défectueux ?
Tu as essayé avec ayFXreplayer seul ?
Si tu as un exemple de son qui fonctionne mal, envois-le moi que je teste.


On est toujours ignorant avant de savoir.
Github    
ericb59 Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++ Groupe : Shoutbox

Inscrit le : 17/04/2012 à 10h25

Messages: 5481

Le 24/01/2021 à 15h02
J’ai mis dans fusion-c une version autonome du player Ayfx, qui ne pose pas de problèmes avec les mêmes sont.

Je ne suis pas le seul à avoir constaté le problème donc, ce n’etais pas sur une série de sons particuliers que j’aurais eu.

Je ferai un exemple...


banniere-ericb59e
Site web    
aoineko Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2695

Le 24/01/2021 à 15h36
J'ai reproduit le problème mais uniquement quand ayFX se joue tout seul (sans PT3).
Dans ce cas, certains sons semblent mal s'arrêter.
Je vois ou est le soucis.
Je corrige ça ; j'te dirais quand c'est sur GitHub.


On est toujours ignorant avant de savoir.
Github    
ericb59 Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++ Groupe : Shoutbox

Inscrit le : 17/04/2012 à 10h25

Messages: 5481

Le 24/01/2021 à 16h27
@aoineko oui c’est ça...
Si tu trouves le problème je voudrai surtout que tu m’en dise la cause, et comment le régler ;) Edité par ericb59 Le 24/01/2021 à 16h28


banniere-ericb59e
Site web    
aoineko Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2695

Le 24/01/2021 à 17h21
Alors, je suis pas sûr que ce soit le même problème, mais voici celui que j'ai trouvé et comment je l'ai réglé.

Le décodeur de ayFX détecte la fin d'un son quand il trouve une ligne valant #D0, #20 (un noise de valeur #20 et de volume #0).
A ce moment, il met le bit#7 de ayFX_Priority à 1, ce qui désactive le décodeur.
Donc, plus de nouveau son ne sont créés... mais il n'y avait rien pour arrêter le dernier son joué.
La plus part du temps les sons finissent par un fade-out donc le problème ne s'entends pas toujours bien, mais parfois c'est flagrant.

Pour corriger le problème, il suffit de mettre la valeur du registre d'amplitude du PSG correspondant au canal courant de ayFX à 0.
- Channel A : R#8
- Channel B : R#9
- Channel C : R#10

Dans le mode 1 de ayFX qui permet de switcher de canal à chaque frame (pour moins impacter la musique) il faut rendre tous les canaux silencieux à la fin du son.

A noter que si on utilises ayFX sur un canal qui joue de la musique, il peut être contre-productif de couper le son car on va perdre 1 frame de la musique pour rien.
L'idéal serait de regarder le contenu du buffer de registres du PSG et ne couper le son que si la musique n'en a pas généré cette frame.


On est toujours ignorant avant de savoir.
Github    
aoineko Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2695

Le 24/01/2021 à 18h53
Pour le dernier soucis, comme c'est très spécifique à l'application (et même au nombre de canaux utilisés par la musique), j'ai ajouté un pointer de fonction qui est appelé quand le son arrive à la fin (comme un hook).
Ainsi, on peut choisir le comportement que l'on souhaite (par rapport à la fonction qu'on va brancher sur le pointer).
J'ai deux fonctions de bases :
- Stop (arrête juste le décodeur ayFX ; le mieux quand on a une musique en cours sur le même canal)
- Mute (arrête le décodeur et met le volume du canal à 0 ; indispensable quand il n'y a pas de musique sur le même canal) <= valeur par défaut.

Le truc chouette avec ce système, c'est que l'application peut choisir de brancher sa propre fonction pour qu'elle soit exécutée quand le son se termine.
J'ai ajouté aussi cette possibilité avec le Replayer PT3 ; ça permet par ex. d'attendre que la musique en cours se termine avant de lancer la suivante.


On est toujours ignorant avant de savoir.
Github    
aoineko Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2695

Le 25/01/2021 à 11h46
J'ai fini ma passe sur le player ayFX.
C'est dispo sur GitHub (https://github.com/aoineko-fr/cmsx/tree/master/cmsx/src/ayFX).
Voici mes modifications :
- Pouvoir set/get le canal des SFX
- Pouvoir interrompre un SFX
- Pouvoir changer le mode switch de canal (Fixed ou FrameSwitch)
- Pouvoir connaitre le nombre de son dans une bank
- Pouvoir brancher un hook sur la fin d'un son

ayFX est vraiment une super lib. Simple et bien optimisé.
Je réflechi à l'utiliser pour jouer des fichiers midi sur le PSG.

En attendant, voici un sample pour tester le player ayFX : s_psg.rom


On est toujours ignorant avant de savoir.
Github    
RibbSayan Membre non connecté

Touriste

Rang

Avatar

Inscrit le : 19/08/2010 à 22h47

Messages: 154

Le 25/01/2021 à 18h57
Très impressionnant ! Par contre, au niveau visuel, j'ai un rendu vraiment bizarre sur OpenMsx avec la config Panasonic FS-A1GT. Avec la config Philips NMS 8255, c'est nickel. Est-ce chez moi le problème, possible ? Edité par RibbSayan Le 25/01/2021 à 18h57
   
aoineko Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2695

Le 25/01/2021 à 20h23
RibbSayan :
Très impressionnant ! Par contre, au niveau visuel, j'ai un rendu vraiment bizarre sur OpenMsx avec la config Panasonic FS-A1GT. Avec la config Philips NMS 8255, c'est nickel. Est-ce chez moi le problème, possible ?


Ce genre de soucis ?


Sur un vrai NMS 8250, ça fonctionne bien en tout cas. ^^


On est toujours ignorant avant de savoir.
Github    
aoineko Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2695

Le 25/01/2021 à 20h41
C'est bon, j'ai trouvé le bug (une variable mal initialisée). Merci :top
Voici la nouvelle version : s_psg.rom


On est toujours ignorant avant de savoir.
Github    
RibbSayan Membre non connecté

Touriste

Rang

Avatar

Inscrit le : 19/08/2010 à 22h47

Messages: 154

Le 26/01/2021 à 21h53
C'était ça effectivement.
   
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie