La Place des Développeurs La quête pour jouer de la musique en assembleur
Reprise du message précédent
Ah OK, autant pour moiNe t'inquiètes pas pour l'intervalle qui te semble court (deux incréments de compteur).
Temps d'une frame x fréquence Z80 = nombre de T-states
[50Hz] 20000 µsec x 3.579545 MHz = 71590 T-states
[60Hz] 16667 µsec x 3.579545 MHz = 59659 T-states
Sur le temps d'une frame, environ 60% se passe pendant l'affichage et 40% hors affichage.
Cela veut dire qu'à 50Hz, tu disposes d'environ 23800 T-states hors affichage.
De cela, il faut déduire la gestion des interruptions en ROM, qui prend au maximum 9990 T-states (sur un MSX Turbo-R FS A1 GT).
Il te reste donc environ 13800 T-states par frame pour l'exécution d'un programme hors affichage.
Et sur deux frames (deux incréments de compteur), cela fait donc 27600 T-states, soit environ 6900 instructions simples pour le Z80 !
Et ça, c'est dans le cas ou tu veux ne pas perturber la partie affichage de ton programme (dans le cas d'un jeu par exemple).
Si ce n'est pas important, tu disposes alors d'environ 99000 T-states, soit 24750 instructions simples. Edité par Metalion Le 17/04/2012 à 16h58
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)
Cela me semble être une partition avec trois voies, deux voies en clé de sol et une voie en clé de fa (la ligne de basse quoi! )
Donc trois voies du PSG ça va aller. Une fois qu'on a dit ça on est pas plus avancer.
Je pense qu'il faut peut-être découper en mesure car c'est comme ça que sont organisees les partitions.
Donc on a une première table qui liste les mesure a jouer dans l'ordre avec la possibilité de faire des boucles sur des mesure. Sue ta partoche PDF on semble boucler à la mesure 5.
En suite il faut encoder chacune des mesures avec les notes des voies comme on le ferait en MML avec le PLAY du MSX Basic.
Il faudra prévoir aussi une init/config pour le morceaux (réglage des instruments par exemple).
Le tempo est géré au niveau des mesures par la commande Tn comme en Basic...
Ton code assembleur lit et interprète les données des mesures, un "Vn" change le volume de la voie considérée, "C4" calcule la fréquence de la note a jouer et établi la valeur a mettre dans les registre de frequences de la voie, le on/off de la note etc.. (Je ne sais pas si l'attack, le sustain et le decay sont géré par le PSG ou pas).
Voilà j'espère que j'ai pu t'apporter quelques pistes pour ton projet.
Ha! Oui j'oubliais, personnellement j'utiliserai des tables pré-calculées pour les notes et aussi je de compter ai pour chaque voie plutôt que de compter.
En gros quand on joue une note on va chercher sont équivalent de durée en nombre de VBL dans une table. On a trois voies ça nous donne 3 Variables compteur. On copie la valeur du nombre de VBL lu dans la table dans le compteur. A chaque VBL on décrémente les trois variable de 1. Quand un compteur arrive à zéro c'est que le temps de la note est écoulé et qu'il faut lire la suite de la mesure pour cette voies, etc
Donc trois voies du PSG ça va aller. Une fois qu'on a dit ça on est pas plus avancer.
Je pense qu'il faut peut-être découper en mesure car c'est comme ça que sont organisees les partitions.
Donc on a une première table qui liste les mesure a jouer dans l'ordre avec la possibilité de faire des boucles sur des mesure. Sue ta partoche PDF on semble boucler à la mesure 5.
En suite il faut encoder chacune des mesures avec les notes des voies comme on le ferait en MML avec le PLAY du MSX Basic.
Il faudra prévoir aussi une init/config pour le morceaux (réglage des instruments par exemple).
Le tempo est géré au niveau des mesures par la commande Tn comme en Basic...
Ton code assembleur lit et interprète les données des mesures, un "Vn" change le volume de la voie considérée, "C4" calcule la fréquence de la note a jouer et établi la valeur a mettre dans les registre de frequences de la voie, le on/off de la note etc.. (Je ne sais pas si l'attack, le sustain et le decay sont géré par le PSG ou pas).
Voilà j'espère que j'ai pu t'apporter quelques pistes pour ton projet.
Ha! Oui j'oubliais, personnellement j'utiliserai des tables pré-calculées pour les notes et aussi je de compter ai pour chaque voie plutôt que de compter.
En gros quand on joue une note on va chercher sont équivalent de durée en nombre de VBL dans une table. On a trois voies ça nous donne 3 Variables compteur. On copie la valeur du nombre de VBL lu dans la table dans le compteur. A chaque VBL on décrémente les trois variable de 1. Quand un compteur arrive à zéro c'est que le temps de la note est écoulé et qu'il faut lire la suite de la mesure pour cette voies, etc
TurboR GT (1Mo), CANON V20! ( en kit, modif 2+ en cours)
Pas encore retrouvés: V9990, Grafx9000, SUNRISE IDE 2x CF, SUNRISE MOONSOUND, FM PAC, MUSIC MODULE, NMS8280, SD SNATCHER,...
Petit lien intéressant :
http://www.pianofacile.com/glossaire/
http://www.pianofacile.com/glossaire/
TurboR GT (1Mo), CANON V20! ( en kit, modif 2+ en cours)
Pas encore retrouvés: V9990, Grafx9000, SUNRISE IDE 2x CF, SUNRISE MOONSOUND, FM PAC, MUSIC MODULE, NMS8280, SD SNATCHER,...
metalgear2
Membre non connecté
Conseiller Municipal
z80 :
Petit lien intéressant :
<a href="">http://www.pianofacile.com/glossaire/</a>
<a href="">http://www.pianofacile.com/glossaire/</a>
La page est vierge !!!
Edit:
Je comprend mieux aprés avoir fait "CITER" Edité par metalgear2 Le 20/01/2015 à 20h38
Y a celui ci aussi:
http://blog.carpediese.fr/?p=393
http://blog.carpediese.fr/?p=393
TurboR GT (1Mo), CANON V20! ( en kit, modif 2+ en cours)
Pas encore retrouvés: V9990, Grafx9000, SUNRISE IDE 2x CF, SUNRISE MOONSOUND, FM PAC, MUSIC MODULE, NMS8280, SD SNATCHER,...
Musicfx.zip
Voila un exemple de code qui joue un fichier PT3 et permet de jouer en meme temps des effets sonores au format AY dans une ROM MSX (barre d'espacement pour active un effet). Les effets sonores sont crees avec l'editeur PC AY EDIT.
Dans le package d'installation de AY Edit il y a des exemples d'effets sonore de plusieurs jeux Spectrum et MSX. Les effets sonores sont dans le fichier afb. Edité par Maggoo Le 21/01/2015 à 03h06
Voila un exemple de code qui joue un fichier PT3 et permet de jouer en meme temps des effets sonores au format AY dans une ROM MSX (barre d'espacement pour active un effet). Les effets sonores sont crees avec l'editeur PC AY EDIT.
Dans le package d'installation de AY Edit il y a des exemples d'effets sonore de plusieurs jeux Spectrum et MSX. Les effets sonores sont dans le fichier afb. Edité par Maggoo Le 21/01/2015 à 03h06
metalgear2
Membre non connecté
Conseiller Municipal
Bonjour,
A mon avis, tu dois faire une mauvaise manip quelque part Z80, la page est aussi vierge.
1er lien :
http://www.pianofacile.com/glossaire/
2émè lien :
http://blog.carpediese.fr/?p=393 Edité par metalgear2 Le 21/01/2015 à 06h39
A mon avis, tu dois faire une mauvaise manip quelque part Z80, la page est aussi vierge.
1er lien :
http://www.pianofacile.com/glossaire/
2émè lien :
http://blog.carpediese.fr/?p=393 Edité par metalgear2 Le 21/01/2015 à 06h39
Je viens de cliquer longuement sur le lien N°2 et faire "ouvrir dans un autre onglet" sur mon NEXUS 5 et la page c'est chargée correctement...
TurboR GT (1Mo), CANON V20! ( en kit, modif 2+ en cours)
Pas encore retrouvés: V9990, Grafx9000, SUNRISE IDE 2x CF, SUNRISE MOONSOUND, FM PAC, MUSIC MODULE, NMS8280, SD SNATCHER,...
[url=http://www.pianofacile.com/alterations][/url]Le lien ci-dessous tu trouveras une explication des trois "b" en début de partition. En résumé tu joues les notes qui sont sur les même lignes que les "b" un cran en dessous. Sur le clavier d'un piano tu joue la note en appuyant sur la touche noire juste à gauche de la touche blanche que tu aurais dû jouer normalement.
<a href="http://www.pianofacile.com/alterations">http://www.pianofacile.com/alterations</a> Edité par z80 Le 21/01/2015 à 20h23
<a href="http://www.pianofacile.com/alterations">http://www.pianofacile.com/alterations</a> Edité par z80 Le 21/01/2015 à 20h23
TurboR GT (1Mo), CANON V20! ( en kit, modif 2+ en cours)
Pas encore retrouvés: V9990, Grafx9000, SUNRISE IDE 2x CF, SUNRISE MOONSOUND, FM PAC, MUSIC MODULE, NMS8280, SD SNATCHER,...
metalgear2
Membre non connecté
Conseiller Municipal
Bonsoir,
Bizarre ...
Même le lien sur ton dernier post me renvoit sur une page du Village
z80 :
Je viens de cliquer longuement sur le lien N°2 et faire "ouvrir dans un autre onglet" sur mon NEXUS 5 et la page c'est chargée correctement...
Bizarre ...
Même le lien sur ton dernier post me renvoit sur une page du Village
J'ai fait quelques petits calculs avec un tableur
Et je pense qu'un petit coup de rétro ingénierie du PLAY dans le BIOS du MSX serai un éclaircissement salutaire
En effet un gestion à la VBL près ne m'apparait pas comme suffisamment précise pour jouer des notes avec précision.
Voir le tableau EXCEL pour s'en rendre compte
A1 = 50Hz (mettre 60 si votre VDP est réglé pour des images en 60Hz)
A3:A123 = tempo de 60 à 180
colonne B à H les type de notes de ronde à quadruple croche avec en ligne 2 leurs durée par rapport à une noire (la noire vaut 1)
B3:B123 le nombre de VBL (intéruption VBL du VDP) qu'il faut pour joué la note au tempo donné
Exemple:
En D3 on a le nombre de VBL qu'il faut compter pour jouer un noire avec un tempo de 60 et un VDP à 50Hz. On obtient un résultat de 50.
Cela veut dire que pour jouer par exemple DO, RE, MI, FA, SOL, LA, SI avec un tempo de 60 et un VDP qui fait des images à 50Hz, il me faudra régler le PSG pour générer la fréquence du DO, mettre 50 dans ma variable COMPTEUR, et à chaque interruption du VDP je fais COMPTEUR = COMPTEUR -1.
Quand COMPTEUR =0, il me faudra régler le PSG pour générer la fréquence du RE.
Mettre 50 dans ma variable COMPTEUR, et à chaque interruption du VDP je fais COMPTEUR = COMPTEUR -1.
Quand COMPTEUR =0, il me faudra régler le PSG pour générer la fréquence du MI.
Mettre 50 dans ma variable COMPTEUR, et à chaque interruption du VDP je fais COMPTEUR = COMPTEUR -1.
Etc.
Note de musique.xls
Et je pense qu'un petit coup de rétro ingénierie du PLAY dans le BIOS du MSX serai un éclaircissement salutaire
En effet un gestion à la VBL près ne m'apparait pas comme suffisamment précise pour jouer des notes avec précision.
Voir le tableau EXCEL pour s'en rendre compte
A1 = 50Hz (mettre 60 si votre VDP est réglé pour des images en 60Hz)
A3:A123 = tempo de 60 à 180
colonne B à H les type de notes de ronde à quadruple croche avec en ligne 2 leurs durée par rapport à une noire (la noire vaut 1)
B3:B123 le nombre de VBL (intéruption VBL du VDP) qu'il faut pour joué la note au tempo donné
Exemple:
En D3 on a le nombre de VBL qu'il faut compter pour jouer un noire avec un tempo de 60 et un VDP à 50Hz. On obtient un résultat de 50.
Cela veut dire que pour jouer par exemple DO, RE, MI, FA, SOL, LA, SI avec un tempo de 60 et un VDP qui fait des images à 50Hz, il me faudra régler le PSG pour générer la fréquence du DO, mettre 50 dans ma variable COMPTEUR, et à chaque interruption du VDP je fais COMPTEUR = COMPTEUR -1.
Quand COMPTEUR =0, il me faudra régler le PSG pour générer la fréquence du RE.
Mettre 50 dans ma variable COMPTEUR, et à chaque interruption du VDP je fais COMPTEUR = COMPTEUR -1.
Quand COMPTEUR =0, il me faudra régler le PSG pour générer la fréquence du MI.
Mettre 50 dans ma variable COMPTEUR, et à chaque interruption du VDP je fais COMPTEUR = COMPTEUR -1.
Etc.
Note de musique.xls
TurboR GT (1Mo), CANON V20! ( en kit, modif 2+ en cours)
Pas encore retrouvés: V9990, Grafx9000, SUNRISE IDE 2x CF, SUNRISE MOONSOUND, FM PAC, MUSIC MODULE, NMS8280, SD SNATCHER,...
z80,
Pour séquencer une note, tu n'as pas le choix :
. soit tu utilises l'interruption du VDP à 50Hz ou 60Hz (il n'y a pas d'interruption hardware plus rapide dans un MSX)
. soit temporises dans le programme, par la succession des instructions. Plus précis et plus rapide, mais nettement plus compliqué.
Pour séquencer une note, tu n'as pas le choix :
. soit tu utilises l'interruption du VDP à 50Hz ou 60Hz (il n'y a pas d'interruption hardware plus rapide dans un MSX)
. soit temporises dans le programme, par la succession des instructions. Plus précis et plus rapide, mais nettement plus compliqué.
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)
Metalion :
z80,
Pour séquencer une note, tu n'as pas le choix :
. soit tu utilises l'interruption du VDP à 50Hz ou 60Hz (il n'y a pas d'interruption hardware plus rapide dans un MSX)
. soit temporises dans le programme, par la succession des instructions. Plus précis et plus rapide, mais nettement plus compliqué.
Pour séquencer une note, tu n'as pas le choix :
. soit tu utilises l'interruption du VDP à 50Hz ou 60Hz (il n'y a pas d'interruption hardware plus rapide dans un MSX)
. soit temporises dans le programme, par la succession des instructions. Plus précis et plus rapide, mais nettement plus compliqué.
Heu... ça je savais déjà
Mais c'est cool de confirmer
Mon questionnement est centré sur la dérive temporelle note à note et encore plus de mesure en mesure.
Les arrondis temporels lié à l'utilisation de la VBL comme unité de temps la plus fine nous amène à cumuler tant d'erreur qu'il faut le prendre en compte pour recaler le temps sur chaque voix mais aussi de veiller que les voix restent synchro à minima sur les mesures.
Sinon musicalement ça va être n'importe quoi après deux ou trois mesure.
Je pense même que dès le début de la deuxième mesure on devrait être capable d'entendre que quelque chose ne se passe pas bien.
D’où mon idée de regarder dans la ROM MSX comment ce problème est géré.
TurboR GT (1Mo), CANON V20! ( en kit, modif 2+ en cours)
Pas encore retrouvés: V9990, Grafx9000, SUNRISE IDE 2x CF, SUNRISE MOONSOUND, FM PAC, MUSIC MODULE, NMS8280, SD SNATCHER,...
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie