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: 2698

Le 18/01/2021 à 18h38

Reprise du message précédent

Hello,
Je déterre ce fil de discussion pour avoir quelques infos.

Bon, déjà, j'ai intégré le player PT3 à ma lib (https://github.com/mvac7/SDCC_PT3player) du coup ça y est, j'ai de la musique ! :)
C'est un bon début.
Ceci dit, j'ai récupéré une trentaine de musique .pt3, mais sur le lot, toute ne fonctionne pas bien.
Je sais pas trop si ça vient de la lib que j'utilise ou si c'est "normal" d'avoir des différences entre les musiques que j'écoute dans Vortex Tracker II et celle sur MSX.
Des fois ça semble identique, des fois j'entends clairement des différences et parfois la version MSX semble complètement cassée.
Peut-être des fonctionnalités de VT2 non intégré dans le replayer MSX ?
Si vous avez une musique .pt3 connu pour bien fonctionner sur MSX, ça m'intéresse de la tester.

Sinon, j'avais une autre question.
En dehors du PSG, du SCC et du MSX-MUSIC, est-ce qu''il y a d'autre carte sonore qu'on peut qualifier de classique et qu'un programme devrait supporter ?

Enfin, est-ce que vous connaissez d'autre replayer MSX avec sources C ou Assembleur ?
Je connais déjà Arkos et TriloTracker que je vais étudié de près, mais vous en auriez d'autres ?


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: 5484

Le 18/01/2021 à 20h07
Citation :
Je sais pas trop si ça vient de la lib que j'utilise ou si c'est "normal" d'avoir des différences entre les musiques que j'écoute dans Vortex Tracker II et celle sur MSX.


Oui j'ai remarqué cela aussi. Je pense que ce sont des effets qui sont mal ou pas du tout implémentés dans le player MSX, qui est assez vieux il me semble.

Je ne sais pas si tu vas implémenter aussi AYFX pour les bruitages ?
Si c'est le cas, il y a un bug insoluble sur certains sons AYFX qui continues de jouer une queue sonnore quand on utilise le player PT3 pour jouer la musique et les effets AYFX. Ca serait bien que t'y penche :lol


Citation :
En dehors du PSG, du SCC et du MSX-MUSIC,


Oui, les cartouches OPL4. de type Moonsound et ses clones. Le soft d'édition et le player sont Moonblaster 1.4.

Edité par ericb59 Le 18/01/2021 à 20h07


banniere-ericb59e
Site web    
aoineko Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2698

Le 19/01/2021 à 15h47
@eric, tu connaissais : https://gitlab.com/torihino/roboplay ?
Tu pourrais p'être voir avec l'auteur pour l'intégrer à Fusion-C.
Sa licence c'est « Do What The Fuck You Want To Public License ». :D
Même si c'est limité au DOS, c'est quand même un replayer qui semble super puissant et surtout assez universel. ^^

Je vais creuser pour voir si y a des choses que je peux récupérer pour moi (la dépendance au DOS ne devrait pas être trop difficile à casser mais si les algo sont fait pour ne fonctionner qu'en RAM, ça va être compliqué pour les ROM).


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: 5484

Le 19/01/2021 à 19h16
oui je connais, j'ai pas décortiqué car son but est de faire un pure player, pas quelque chose pour mettre dans un jeu...
comme tu vas y regarder tu me diras :p


banniere-ericb59e
Site web    
aoineko Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2698

Le 19/01/2021 à 23h15
J'ai trouvé mon problème avec le pt3player.
J'affichais qq texte en mode graphique et j'avais pas fait gaffe que ça occupait plus d'une frame.
C'est à cause de ça que les musiques semblaient bizarre.
J'ai déplacé tous l'update de pt3 dans mon hook H.TIMI et là ça marche normalement.
Il reste qq différences sonores avec le player Windows mais c'est minime et acceptable.

ericb59 :
comme tu vas y regarder tu me diras :p


C'est du très bon boulot en tout cas. :top
Son code est vraiment propre et semble pas trop mal optimisé (même si l'auteur ne semble pas connaitre le _z88dk_fastcall).
Son système de plugin est bien fait et permettra d'ajouter facilement d'autres formats.
Après, j'ai pas encore assez creusé pour voir dans quelle mesure ça pourrait être exploitable en jeu.
Mais bon, quand je vois que le pt3player prends déjà une grosse partie de ma frame pour une simple musique PSG, j'imagine que ça serait pas réaliste d'utiliser RoboPlay pour un jeu.
En tout cas, pas un jeu qui demande de la réactivité.
Pour un jeu de gestion, stratégie ou réflexion, ça pourrait le faire.


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: 5484

Le 20/01/2021 à 07h49
Il y a aussi l’Arkos tracker 2 qui est beaucoup utilisé.
Son replayer est sans doute mieux optimisé que le pt3.

Il me semble avoir vu un portage pour sdcc, mais je ne retrouve pas où :hum


banniere-ericb59e
Site web    
Metalion Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 23/12/2009 à 15h32

Messages: 1486

Le 20/01/2021 à 08h45
aoineko :
Mais bon, quand je vois que le pt3player prends déjà une grosse partie de ma frame pour une simple musique PSG, j'imagine que ça serait pas réaliste d'utiliser RoboPlay pour un jeu.

C'est souvent le cas ... Les replayer sont généralement lourds et lents.

C'est pour ça que j'ai finalement écrit le mien, avec mon propre format, directement en assembleur.
Il fait 3K et est prévu pour supporter PSG/FM/SCC, mais pour l'instant seuls PSG et FM sont implémentés.

Mesuré sur 9 voix FM, sur la frame où il charge et joue 9 notes : 11102 cycles (soit 49 lignes). Edité par Metalion Le 20/01/2021 à 08h59


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)
   
ericb59 Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++ Groupe : Shoutbox

Inscrit le : 17/04/2012 à 10h25

Messages: 5484

Le 20/01/2021 à 09h09
@metalion
mais tu lis quoi comme fichier musical avec ?


banniere-ericb59e
Site web    
Metalion Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 23/12/2009 à 15h32

Messages: 1486

Le 20/01/2021 à 09h39
ericb59 :
@metalion
mais tu lis quoi comme fichier musical avec ?

C'est le hic ... C'est mon propre format.
Pour faire vite, c'est une notation musicale modifiée, pas très lointaine de la syntaxe de PLAY en Basic.

Code :
; pour chaque note:
; - longueur de note        string    r,b,n,c,d,t (minuscules)
; - altération durée (opt.)    string    ".": pointée, ":": double pointée, "!":triolet (simple)
; - note            string    A,B,C,D,E,F,G (majuscules)
; - altération tonale (opt.)    string    #,b
; - octave            string    1,2,3,4,5,6,7,8
; - séparateur de mesure (opt.)    string    '|'
; - liaison            string    '-' (la 2e note est omise)
; - fin de séquence        string    'f'

; exemples
; "nC#4": noire, do dièse, 4e octave
; "b.D3": blanche pointée, ré, 3e octave
; "c.D#4-r": croche pointée, ré diése, 4e octave, prolongée par une ronde

Edité par Metalion Le 20/01/2021 à 09h40


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

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2698

Le 20/01/2021 à 10h01
ericb59 :
Il y a aussi l’Arkos tracker 2 qui est beaucoup utilisé.


Oui, c'est presque sûr que je vais faire un portage de celui-là.
J'hésite surtout entre AT1 et AT2 car le 1 était déjà super et je ne pense pas avoir besoin des features du 2 qui le rendent plus gourmand en ressource.

Metalion :
C'est le hic ... C'est mon propre format.


Tu le génère à partir de fichier .mid ? Ou est-ce que tu écris ta musique directement dans ce format ?

En tout cas, ça serait intéressant de proposer un replayer ultra-léger.
Si tu as un code ASM et des datas de test à partager, ça m'mauserait d'essayer d'en faire un wrapper C.


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

Conseiller Municipal

Rang

Avatar

Inscrit le : 23/12/2009 à 15h32

Messages: 1486

Le 20/01/2021 à 10h26
aoineko :
Tu le génère à partir de fichier .mid ? Ou est-ce que tu écris ta musique directement dans ce format ?

Les deux.

J'ai écrit un programme en Python qui convertit un fichier .mid en format propriétaire de mon replayer, mais c'est un peu lourd. D'abord parce que la source doit être la version texte du fichier midi (mais elle peut être facilement générée en ligne sur certains sites). Et ensuite parce que cela nécessite un peu de correction manuelle, car les fichiers .mid ne respectent pas forcément les règles musicales (notamment sur les longueurs de notes). Mais le programme Python génère un fichier .log qui permet de retravailler ces erreurs éventuelles.

En pièce jointe, une rom pour tester le replayer (que j'ai appelé SFX), avec comme track "Splash Wave" du jeu "Outrun" sur 9 voix FM. Appuyez sur la flèche vers le haut pour démarrer le morçeau (évidemment il faut MSX-Music).

test_sfx.rom Edité par Metalion Le 20/01/2021 à 10h28


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

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2698

Le 20/01/2021 à 11h22
Ca rend super bien en tout cas :top

Comment tu répartis les pistes PSG et FM ?
Pour le PSG, tu utilises juste des notes pures ou bien est-ce que tu émules des instruments ?


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

Conseiller Municipal

Rang

Avatar

Inscrit le : 23/12/2009 à 15h32

Messages: 1486

Le 20/01/2021 à 12h17
aoineko :
Ca rend super bien en tout cas :top

Merci ^^

aoineko :
Comment tu répartis les pistes PSG et FM ?

Tu veux dire en terme de balance ?
J'ai rien implémenté de spécifique, chaque voix a son propre volume, c'est du réglage manuel.

aoineko :
Pour le PSG, tu utilises juste des notes pures ou bien est-ce que tu émules des instruments ?

Ce sont des notes pures pour le moment, mais l'émulation des instruments fait partie des choses que je dois encore faire, notamment avec un contrôle frame par frame de l'enveloppe ADSR. Mais c'est difficile de trouver une bibliothèque d'instruments prédéfinis pour le PSG ...


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

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2698

Le 20/01/2021 à 18h30
Je voulais dire ; si tu as 5 pistes dans ta musique, comment tu répartis celles qui seront joués sur les canaux du PSG et ceux qui seront joués sur les canaux FX ?
Je connais pas trop les chips FM ; ils ont des instruments préchargés ?
Sinon, j'imagine que ça ferait trop de data à envoyer pour une replayer léger.

Quand tu auras une version stable de ton replayer, ça m'intéresse d'essayer d'en faire un wrapper en C. :)

En attenant, j'aimerai bien profiter de tes connaissances en assembleur.
J'ai réécris l'initialisation du replayer pt3 pour skip les 100 octets de header et rendre le code plus lisible.
Si tu vois encore des optims possibles sans rendre le code trop tricky, ça m'intéresse. :)

Code ASM :
 
; Les données sont à l'adresse HL
playerINIT::
    ld        (#_PT3_MODADDR), HL        // _PT3_MODADDR = songAddr
    ld        D, H
    ld        E, L                    // DE = songAddr
    ld        HL, #100
    add        HL, DE
    ld        A, (HL)
    ld        (#_PT3_Delay), A        // _PT3_Delay = [songAddr + 100]
    ld        HL, #105
    add        HL, DE
    ld        (#_PT3_SAMPTRS), HL        // _PT3_SAMPTRS = songAddr + 105
    ld        HL, #169
    add        HL, DE
    ld        (#_PT3_OrnPtrs), HL        // _PT3_OrnPtrs = songAddr + 169
    ld        HL, #200
    add        HL, DE
    ld        (#_PT3_CrPsPtr), HL        // _PT3_CrPsPtr = songAddr + 200
    ld        IX, (#_PT3_MODADDR)        // IX = songAddr
    ld        B, #0
    ld        C, 102(IX)                // BC = [songAddr + 102]
    ld        HL, #201
    add        HL, DE
    add        HL, BC
    ld        (#_PT3_LPosPtr), HL        // _PT3_LPosPtr = songAddr + 201 + BC
    ld        B, 104(IX)
    ld        C, 103(IX)                // BC = [songAddr + 104 | songAddr + 103]
    ld        H, D
    ld        L, E
    add        HL, BC
    ld        (#_PT3_PatsPtr), HL        // _PT3_PatsPtr  = songAddr + BC
 


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

Conseiller Municipal

Rang

Avatar

Inscrit le : 23/12/2009 à 15h32

Messages: 1486

Le 20/01/2021 à 19h19
aoineko :
Je voulais dire ; si tu as 5 pistes dans ta musique, comment tu répartis celles qui seront joués sur les canaux du PSG et ceux qui seront joués sur les canaux FX ?

Pareil, c'est un mixage manuel.

aoineko :
Je connais pas trop les chips FM ; ils ont des instruments préchargés ?

Oui, 15 instruments préchargés et 1 instrument customisable.

aoineko :
Quand tu auras une version stable de ton replayer, ça m'intéresse d'essayer d'en faire un wrapper en C. :)

Pas de problèmes, mais pour l'instant, elle n'est pas encore stable.

Pour ton code, je ne vois que ça comme optimisation.
(et encore la 2e cela dépend de si tu as encore besoin de 'songAddr' dans DE après)

Code :
; Les données sont à l'adresse HL
playerINIT::
    ld          (#_PT3_MODADDR), HL     // _PT3_MODADDR = songAddr
;------------------------
    ex        de,hl             // DE = songAddr
    ld        hl,#100
    add       hl,de
;------------------------
    ld          A, (HL)
    ld          (#_PT3_Delay), A          // _PT3_Delay = [songAddr + 100]
    ld          HL, #105
    add          HL, DE
    ld          (#_PT3_SAMPTRS), HL     // _PT3_SAMPTRS = songAddr + 105
    ld          HL, #169
    add          HL, DE
    ld          (#_PT3_OrnPtrs), HL     // _PT3_OrnPtrs = songAddr + 169
    ld          HL, #200
    add          HL, DE
    ld          (#_PT3_CrPsPtr), HL     // _PT3_CrPsPtr = songAddr + 200
    ld          IX, (#_PT3_MODADDR)     // IX = songAddr
    ld          B, #0
    ld          C, 102(IX)        // BC = [songAddr + 102]
    ld          HL, #201
    add          HL, DE
    add          HL, BC
    ld          (#_PT3_LPosPtr), HL     // _PT3_LPosPtr = songAddr + 201 + BC
    ld          B, 104(IX)
    ld          C, 103(IX)        // BC = [songAddr + 104 | songAddr + 103]
;------------------------    
    ex        de,hl
    add       hl,bc
;------------------------  
    ld          (#_PT3_PatsPtr), HL     // _PT3_PatsPtr  = songAddr + BC


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

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2698

Le 20/01/2021 à 19h45
Plus besoin de DE après.
Merci, nickel :top


On est toujours ignorant avant de savoir.
Github    
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie