Musique1-bit sur VG5000

Cette catégorie traite de développements récents destinés à nos vieilles machines, applications, jeux ou démos... Amis programmeurs, c'est ici que vous pourrez enfin devenir célèbres!

Modérateurs : Papy.G, fneck, Carl

Daniel
Messages : 17424
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: Musique1-bit sur VG5000

Message par Daniel »

Papy.G a écrit :y'aurait'il moyen, quand-même, d'obtenir quelques bruitages corrects sans ruiner la disponibilité processeur?
Non, le son 1 bit occupe 100% du processeur.
Il peut y avoir quelques cycles disponibles à chaque boucle, mais trop peu à la suite pour faire quoi que ce soit d'autre.
Daniel
L'obstacle augmente mon ardeur.
Avatar de l’utilisateur
Papy.G
Modérateur
Messages : 3054
Inscription : 10 juin 2014 13:40
Localisation : Haute-Garonne/Gers

Re: Musique1-bit sur VG5000

Message par Papy.G »

C'est ce que je craignais, donc, on ne peut faire de la musique ou des bruitages que lorsque il ne se passe rien d'autre. :?
Ce n'est utilisable que dans les jeux d'aventures textuels, à la rigueur… :)
Soyez exigeants, ne vous contentez pas de ce que l'on vous vend.
Demandez-en plus, ou faites-le vous-même.
__sam__
Messages : 7987
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: Musique1-bit sur VG5000

Message par __sam__ »

@farvardin: Tu fais de la musique. J'essaye de comprendre le player, et il y a un truc que je ne pige pas. Le code me semble faire kifkif la même chose entre les instruments normaux et les instruments "slides" (c'est juste des nop qui sont déplacés du milieu de boucle vers la fin). En fait ce que je ne comprends pas c'est cette notion de "slide". Qu'est ce que c'est au juste?

J'ai trouvé ca, mais ca ne concerne que la musique baroque, donc hors-sujet. Je suis perplexe. Bref: c'est quoi un "slide" ? (tu l'utilises dans ce commentaire là: http://randomflux.info/1bit/viewtopic.php?pid=502#p502)
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Avatar de l’utilisateur
farvardin
Messages : 436
Inscription : 27 déc. 2014 16:07
Contact :

Re: Musique1-bit sur VG5000

Message par farvardin »

Bref: c'est quoi un "slide" ?
@__sam__

En fait je n'avais pas trop compris sa réponse, à part que c'est prévu pour faire des basses. C'est surtout le nom que je ne comprenais pas non plus. Aussi je viens je faire un petit essai avec des notes similaires pour bien entendre la différence (voir fichier joint, à lire avec émulateur sinclair).

Dans la doc c'est indiqué ça "you can activate a fast pitch slide on one of the channels to produce percussive sounds.". Au début je pensais que ça pouvait glisser d'une note à l'autre, mais non, en fait je pense que le nom vient juste du fait que la hauteur varie très vite, entre très grave et la hauteur demandée, si bien que ça donne l'impression d'un coup porté (ça doit faire un peu la même chose quand on tape sur un tambour ?). J'ai ensuite testé entre plusieurs hauteurs de son "slide", et c'est C4 qui donne le plus l'impression d'un kick de batterie, sans doute parce que ça varie le plus par rapport à l'appel d'une note plus grave.

Je ne m'y connais pas en asm malheureusement, mais il doit y avoir plus que le retrait des "nop" pour faire la différence. Si je les rajoute ces 2 nop et que je recompile mon exemple, ça donne encore un peu son son caractéristique (mais ça désaccorde ensuite le reste). Le duty1b doit être altéré d'une autre manière. Tu peux essayer avec milkytracker et pasmo pour compiler ça.

Si le sujet vous intéresse, Utz a fait des tutoriels bien complets sur la création d'un moteur de son 1bit ici : http://randomflux.info/1bit/viewtopic.php?id=21

@Markerror et joaopa:
Pour l'export vers VG5000, merci des explications, je vais regarder. Pour le moment sur mon PC principal wine et cette cochonnerie qu'est pulseaudio me jouent des tours et ça provoque aléatoirement des grésillements qui dénaturent complètement le son de l'émulateur dcvg5k. Ça a bien fonctionné une fois, et plus maintenant. À suivre...
Pièces jointes
test_quattropic.zip
(5.33 Kio) Téléchargé 120 fois
__sam__
Messages : 7987
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: Musique1-bit sur VG5000

Message par __sam__ »

Merci... je vais creuser le sujet. (J'ai les doigts ASM qui me démangent, et certaines deadlines arrivent...)
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Avatar de l’utilisateur
yo_fr
Messages : 1337
Inscription : 13 août 2009 18:24
Localisation : 78...
Contact :

Re: Musique1-bit sur VG5000

Message par yo_fr »

[MODE INCRUST ON]
pour tester j'ai voulu passer ce programme dans Hector.
Moyennant quelques modif (syntaxe pour tniasm et pour la sortie HP les out en LD (1800h),a) et en modifiant le tempo (Hector a son Z80 à 5MHz au lieu de 3.5 sur le ZX => speed de 6 il passe à 10), on obtient le son joué !

le fichier est ici :
music.txt
(23.81 Kio) Téléchargé 59 fois
Merci joaopa de m'avoir fait découvrir ce programme Z80 :D
(je suis reparti de ta version pour VG)

Pour le lancer, utilisez la dernière version de VBHector qui émule mieux le son et après avoir lancé n'importe quelle machine (HRP -> MX80) dans le menu Mémoire, faite une compilation Z80. J'ai relogé également le programme en 6000 donc on peu lancer directement dans la boite après compilation sans modif.

[MODE INCRUST OFF]
(désolé joaopa :wink: )
joaopa
Messages : 512
Inscription : 14 sept. 2013 12:17

Re: Musique1-bit sur VG5000

Message par joaopa »

yo_fr a écrit :[MODE INCRUST ON] en modifiant le tempo (Hector a son Z80 à 5MHz au lieu de 3.5 sur le ZX => speed de 6 il passe à 10), on obtient le son joué !
Je suis perplexe. Comment as-tu calculé la vitesse =10?
__sam__
Messages : 7987
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: Musique1-bit sur VG5000

Message par __sam__ »

A propos de vitesse il y a un truc que je ne comprends pas dans l'algo. La valeur de vitesse (speed) est lue et stockée dans le registre c' en tout début de pattern. Ensuite l'algo décrémente c', jusqu'à 0, et il passe alors à 255. Donc la valeur de c fait 6, 5..2 1 0, 255 254 ... 2 1 0, 255 254 ... 2 1 0, etc. Combien de fois la partie 255..0 ? je trouve 256 fois puisqu'on itère sur b' =255..0 avec djnz. Bref le nombre de boucle de l'algo est 6+256*256.

Le fait que la vitesse (6) apparaisse comme constante additive me surprends. En toute logique elle devrait être une constante multiplicative (exemple: speed*256=6*256), puisque cela affecte l'ensemble des durées. Mais pour faire cela il faut ré-initialiser c' à 6 (speed) à chaque rebouclage sur b. Or, dans le code, c' n'est initialisé qu'une fois, en début de pattern et pas à chaque rebouclage sur b' et playRegular. Je suis perdu!

Quelqu'un qui connait les subtilités Z80 mieux que moi peut-il expliquer pourquoi mon analyse du code est forcément fausse?

Code : Tout sélectionner

rdptn0
;; sam: init pattern avec c'=(speed)

playRegular
	exx
	....
	....
;; sam: décrémente c'
	dec c			;4
;; sam: rebouclage si c' n'est pas nul
	jr nz,playRegular	;12
;; sam: ici, à la sortie c=0
	....
	....
;; sam: décrémente b, et retourne à playRegular avec c=0, et pas c=(speed).
;; sam: Ca fait (speed)+255*256 tours et pas (speed)*256 tours
	djnz playRegular
Est-ce que le exx de playRegular restore les registre b,c à la valeur initiale par magie ?? Qu'est-ce qu'il y a d'évident que je loupe??

[EDIT]c'est bon j'ai trouvé! Pour comprendre j'ai fait tourner DCVG5K.. et là j'ai compris que j'ai inversé le role de B et C (ce CPU est du mauvais Endian, le bougre). Du coup (speed) est dans B' et la boucle intérieure sur se déroule 256 fois (sur C). On obtient bien 256*(speed) tours de boucle ce qui fait du sens. Sachant que chaque tour de boucle coute 224 T-cycles, ca nous fait (speed)*14.3ms de durée par ligne du pattern (le canal 4 peut être stoppé plus tôt).
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Avatar de l’utilisateur
yo_fr
Messages : 1337
Inscription : 13 août 2009 18:24
Localisation : 78...
Contact :

Re: Musique1-bit sur VG5000

Message par yo_fr »

j'ai vu vite fais que le speed était une période d'attente et j'ai simplement fais 6 * 5 / (3.5). A 9 c'était trop rapide, j'ai mis 10.
Bref empirique... :oops:

De toutes-façon pour obtenir les bons sons exacts, il faut recalculer l'ensemble des datas pour passer de 3.5 à 5 Mhz...
__sam__
Messages : 7987
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: Musique1-bit sur VG5000

Message par __sam__ »

J'ai porté le player sur 6809 (lire ici), mais le résultat est désastreux. On a des sifflements parasites qui masquent l'ensemble des notes.

Pour comprendre ce qu'il se passe, j'ai fait un pattern simple "ptn" qui joue une note sur 2 voix, et celle un octave en dessus sur les autres voix. Le résultat est désastreux sous emul. La phase où les 2 premières voix donnent une valeur 1 quand les deux dernières voix donne 0 donne une alternance élevée de 0/1/0/1, ce qui fait un sifflement insupportable. Ok, la valeur moyenne est 1/2 comme attendu, mais le sifflement gâche tout :(
Image
C'est peut-être lié à l'échantillonage réalisé par l'émulateur, mais c'est moche quand même. Je n'arrive pas à comprendre pourquoi sur ZX ou VG5000 il n'y a pas du tout ce phénomène. Peut-être que leur buzzer est plus lent et moyenne mieux les choses. Il faut dire que leur boucle se déroule en 56µs alors que sur 6809 il faut 111µs (le double), ce qui fait un sifflement à 1000000/(111/2)=18khz quand les voix 1,2 et 3,4 ne donnent pas les mêmes valeurs. Sur Zx, ce sifflement est une octave plus haut à 36khz et là c'est complètement inaudible. Le facteur 2 que se prends le 6809 me semble être le mauvais coup.

Pfff.. dommage, vraiment. Il fallait que j'essaye. Si je veux eviter le sifflement, il faut passer par le CNA, mais là on a plus de la musique sur 1bit.
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Daniel
Messages : 17424
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: Musique1-bit sur VG5000

Message par Daniel »

Comme toujours il faut être prudent dans les conclusions tant que l'essai n'a pas été fait sur la vraie machine. L'émulateur n'est pas une référence, on ne le répètera jamais assez...
Daniel
L'obstacle augmente mon ardeur.
__sam__
Messages : 7987
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: Musique1-bit sur VG5000

Message par __sam__ »

Oui je sais, mais pour ZX et VG j'ai testé sur émulateur et ca ne fait pas ces sifflements. Il y a un truc que je ne comprends pas. Voici le même accord avec voix1,2=x hz, et voix3,4=2x hz.
C'est ecrit ZX, mais c'est sur VG5K.. le ZX c'est le CPU :)
C'est ecrit ZX, mais c'est sur VG5K.. le ZX c'est le CPU :)
Image2.png (8.44 Kio) Consulté 4033 fois
On observe bien les marches d'escalier attendues. Sur thomson, on a la marche haute, la marche basse, mais les valeurs médianes ne sont pas moyennées, et on observe les alternances 0/1/0/1/0/1.... (demi marche supérieure) puis 1/0/1/0/1/0... (demi marche inférieure).

Sans doute que le player thomson n'est pas assez rapide pour être filtré. En effet, le player ZX alterne 0/1 à 36khz... C'est très haut, bien au dessus de la fréquence de coupure de la carte son autour de la moitié de la fréquence d'échantillonnage (22khz je présume). Sur thomson l'alternance 0/1 est à 18khz, soit en dessous des 22khz. Les 0/1 passent intact j'imagine :(

Pour confirmation, est-ce que la routine son entre DCMOTO et DCVG5K sont les même (même fréquence d'échantillonnage, même intégrateur, etc) ?

[Edit] Je viens de faire une experimentation: Si je fais une boucle à 30khz sur thomson (2 voix au lieu de 4), on commence à voir les marches d'escalier. Donc c'est bien ca: le player est trop lent pour que le filtrage du buzzer ait lieu. :(
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Daniel
Messages : 17424
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: Musique1-bit sur VG5000

Message par Daniel »

Il y a de petites différences entre dcmoto et dcvg5k :

dcmoto : 22050 Hz sans filtre
dcvg5k : 20000 Hz avec le filtre passe-bas : sortie(n) = (echant(n) + echant(n-1)) / 2
J'ai ajouté le filtre à dcvg5k la semaine dernière. Je peux essayer d'ajouter le même à dcmoto.

La procédure d'intégration est identique : méthode des trapèzes entre chaque instruction, sauf que les instructions du Z80 n'ont pas la même durée que celles du 6809.
Daniel
L'obstacle augmente mon ardeur.
__sam__
Messages : 7987
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: Musique1-bit sur VG5000

Message par __sam__ »

As-t-on une idée de la bande passante audio d'une vieille TV qu'on utilisait à l'époque des 8bits? Si ca se trouve, les TV de cette époque coupent le son super bas. Déjà rien que le standard NICAM en audio a un spectre de 15khz... je ne serait pas surpris que les TV non NICAM coupent à 8-10khz.
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Avatar de l’utilisateur
farvardin
Messages : 436
Inscription : 27 déc. 2014 16:07
Contact :

Re: Musique1-bit sur VG5000

Message par farvardin »

__sam__ a écrit : Je n'arrive pas à comprendre pourquoi sur ZX ou VG5000 il n'y a pas du tout ce phénomène. Peut-être que leur buzzer est plus lent et moyenne mieux les choses.
À moins que tu parles d'autre chose, mais je ne pense pas que ça vienne de ça car sur spectrum on obtient du son dans le buzzer, mais également dans la prise mini jack (marquée "EAR") donc là il n'y a pas de membrane.
Répondre