[THOMSON] Jouer des MODs amiga

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

Modérateurs : Carl, Papy.G, fneck

Répondre
__sam__
Messages : 3991
Enregistré le : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

[THOMSON] Jouer des MODs amiga

Message par __sam__ » 26 janv. 2017 17:24

Une petite info au passage pour ceux qui s'intéressent à la musique sur 8bits.

Je viens de réaliser une preuve de concept qu'il est possible de jouer des MODs (des... enfin un... et plutot chiptune) Amiga (ProTracker) sur thomson: ici. :D

[EDIT], vous vous souvenez de chuck-rock et de sa musique de folie ?
Image
Et bien le thomson sait ausi le faire!!! :D :roll: Cliquez sur l'image... ou poussez le volume de la video suivante
Modifié en dernier par __sam__ le 15 févr. 2017 12:42, modifié 1 fois.
Samuel.
A500 Vampire V2+, A1200(030@50mhz/fpu/64mb/cf 8go),
GVP530 (MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8. New Teo 1.8.4 8)

Avatar du membre
farvardin
Messages : 356
Enregistré le : 27 déc. 2014 16:07
Contact :

Re: Concours de musique 1-bit

Message par farvardin » 27 janv. 2017 22:52

Bravo. Du coup ça reste du 1-bit ou c'est autre chose ? La fiche wikipedia du TO8 indique que le générateur de son est 1bit, et le DAC est 6bit. Est-ce que ta routine simule le 4bit (valeur indiquée sur l'autre forum) via du 1bit ?

Pour info, Utz a réussi à faire aussi un lecteur de MOD sur zx spectrum (en pur 1bit) :
https://soundcloud.com/irrlicht-project ... zbmod-test

__sam__
Messages : 3991
Enregistré le : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: Concours de musique 1-bit

Message par __sam__ » 28 janv. 2017 08:04

J'utilise le DAC pour cette fois ci. Le DAC 6 bits est bien pour les MOD car 4 voix de 4 bits chacune font 6 bits au total. Pile poil la valeur du DAC.

Merci pour le lien. Il faudra que je regarde le travail de UTZ pour la conversion car je trouve que le format MOD n'est pas des plus propre. On trouve par exemple des effets qui débordent du pattern vers le pattern suivant. Résultat: le pattern qui suit ne sonne pas de la même façon suivant celui qui le précède. Ils ne sont pas complètement indépendants. Apparemment il a fait un convertisseur depuis le format XM. Peut-être que ce dernier est mieux ficelé...

On sait via les experiences de Daniel sur MO5 avec carte SD qu'il est aussi possible de produire autre chose que des BEEP avec le buzzer thomson. Mais ce n'est pas simple. L'éventuel player de MOD 1bit sur thomson ne sera pas pour tout de suite :)
Samuel.
A500 Vampire V2+, A1200(030@50mhz/fpu/64mb/cf 8go),
GVP530 (MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8. New Teo 1.8.4 8)

jasz
Messages : 362
Enregistré le : 05 oct. 2016 20:05
Localisation : Quelque part dans le 31

Re: musique 1-bit

Message par jasz » 29 janv. 2017 19:16

Bonjour Sam,

J'ai écouté ton preview laissé sur logicielsmoto (the beast) et je dois avouer que ce n'est pas si mal que cela. C'est même très bien pour un thomson. Le rendu sonore me fait penser aux premières routines sur Atari ST. Cela pourrait s'expliquer par une fréquence de sampling trop basse (autour de 8khz) ou d'une table d'échantillonnage mal ajustée.

Effectivement, les MOD sont très gourmands niveau pattern et pose un réel problème sur lequel je m'étais, il y a quelques années penché dessus. Une ligne comprend 4 piste sur 32 bits et un pattern compte 64 lignes (rude dilemme). Pour jouer une note, il faut 4 informations:
- Le code de la note (sur 2 o)
- Le numéro du sample (sur 1/2 o bits poids fort)
- L'effet à appliquer (sur 1/2 o bits poids faible)
- La valeur de l'effet (sur 1 o)

On pourrait rogner un o en créant une table de note (perte de TM)
On pourrait grider, c'est à dire que la lecture ne se ferait plus par ligne mais par piste en ajoutant une durée. (perte de TM aussi)
On pourrait aussi faire en fonction des évènements mais le pattern serait déstructuré et il faudrait créer une table supplémentaire. (La meilleur solution)
Ce n'est pas si simple en fait.

Mais je pense que tu y as déjà réfléchi.


En attendant je vous souhaite à tous tout mes voeux pour 2017
Modifié en dernier par jasz le 30 janv. 2017 11:08, modifié 2 fois.

__sam__
Messages : 3991
Enregistré le : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: musique 1-bit

Message par __sam__ » 29 janv. 2017 19:31

Merci.

C'est même pire que ça car outre les 4x32 bits par lignes, il y a entre chaque lignes environ 6 lignes intermédiaires (les frames: une toutes les 20ms en fait), ça fait vraiment beaucoup de données à traiter, en plus de la génération/mixage du son. C'est un sacré taf, et mon player hyper optimisé carbure à seulement 5khz. Je pense qu'il sera difficle d'aller plus vite étant donné tous les effets à supporter. Pour relativiser j'ai lu que les player PROTRacker sur Amiga peuvent mettre jusqu'à 10raster-lines (0.64ms) pour traiter les effets d'une frame. Imagine faire ça avec un CPU 16x plus lent (à minima)

Il faut surveiller logicielsmoto. J'y publie mes résultat intermédiaires, et il y a des trucs surprenant (par exemple le proto de musique pour lemmings par psygnosis :P )
Samuel.
A500 Vampire V2+, A1200(030@50mhz/fpu/64mb/cf 8go),
GVP530 (MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8. New Teo 1.8.4 8)

jasz
Messages : 362
Enregistré le : 05 oct. 2016 20:05
Localisation : Quelque part dans le 31

Re: musique 1-bit

Message par jasz » 29 janv. 2017 19:41

J'avais dans le temps soulevé la question sur logicielsmoto et sur le site de louis. Seul regret, les sources postées (adapter d'un player que j'avais réalisé sur Atari) ont disparues. Il suffit que je remette la main sur la disquette pour désassembler tout ceci et l'adapter (à nouveau) sur TO. A moins que quelqu'un avais récupéré mes sources. Ce qui est moins sûr

__sam__
Messages : 3991
Enregistré le : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: musique 1-bit

Message par __sam__ » 29 janv. 2017 20:13

Oui la pérennité des trucs qu'on met sur le web n'est jamais garantie. :(
Samuel.
A500 Vampire V2+, A1200(030@50mhz/fpu/64mb/cf 8go),
GVP530 (MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8. New Teo 1.8.4 8)

jasz
Messages : 362
Enregistré le : 05 oct. 2016 20:05
Localisation : Quelque part dans le 31

Re: musique 1-bit

Message par jasz » 30 janv. 2017 10:08

Je viens de retrouver une trace de mes travaux sur le site de Daniel

http://dcmoto.free.fr/forum/messages/592819_0.html

Peut-être cela pourra t'aider. Il y a le source du traitement de la partition et celui de la création du digit en page 2. Le tout commenté :D

Edit:

J'en profite pour répondre à Fool-duplex (vaux mieux tard que jamais :oops: ):
Avec cette routine, je visais les 10-11khz mais la routine de création du digit risque de ruiner cet espoir alors contentons nous de 8khz. Ce serait déjà pas si mal. ;)
Pour info, cette routine est la copie conforme de celle que j'ai codé pour la gamme st-stf. Elle est inspirée du code de la demo froggies over the fence d'OVR (celui du menu). Elle joue la partition à 21khz en utilisant que la moitié de la tm contre 17khz pour l'originale :). J'ai pu la monter jusqu'à 23khz avec un cycle machine complet... Mais pas plus :? Pour un simple st dépourvu de blitter c'est déjà pas si mal. Comme sur Thomson, la création du digit prend beaucoup de temps à la machine et plus la fréquence est grande et plus il faut de temps. Donc, la routine a été optimisée au maximum (du moins sur Atari). Le traitement des samples est légèrement différent que sur un player mod traditionnel pour justement gagner un peu de temps. ;)

Pour les commandes, il n'est pas nécessaire de toutes les exporter. Les commandes classiques suffisent amplement dans un premier temps: 1, 2, 3, 4, 6, A, C, D, et F. Les commandes E sont des extensions aux commandes classiques et se traitent de la même manière. Peu utilisées du reste. ;)
A ce propos on pourrait s'inspirer de cette commande pour grappiller quelques octets sur la partition. On aurait donc 3 octets par pistes à traiter au lieu de 4.
Le schéma deviendrait alors:
numéro de commande (1/2 o poids fort)
note (1/2 o poids faible + 1 o)
numéro du sample (1/2 o poids fort)
valeur de la commande (1/2 o poids faible)
Cela déstructure le pattern mais la chose n'est pas impossible. Seul défaut pour le volume (commande C). Il se retrouve codé sur 4 bits et prend donc une valeur de 0 à 15. Il faut voir si c'est pertinent.

__sam__
Messages : 3991
Enregistré le : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: musique 1-bit

Message par __sam__ » 30 janv. 2017 16:13

Il y a quand même des trucs bizzares dans le format ProTracker. Tu va peut-être pouvoir m'expliquer.

Sur le morceau "dream off (mco)" de hmc (marco schindler) pour le cracktro de Pinball Fantasies par le groupe SkidRow (disponible sur cette page), au pattern 06, row 03, canal 3, je trouve: C#6 17...902, qui dit jouer le sample #17 à partir de l'offset 2*256 (effet 902) à la hauteur DO de l'octave 6. Ok jusque là tout va bien, sauf que le sample #17, fait 324 octets, ce qui est moins que l'offset de 512 demandé!!!

C'est quoi cette blague?!?

Qu'est-ce qu'on est supposé jouer quand l'offset déborde de l'instrument?
Samuel.
A500 Vampire V2+, A1200(030@50mhz/fpu/64mb/cf 8go),
GVP530 (MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8. New Teo 1.8.4 8)

jasz
Messages : 362
Enregistré le : 05 oct. 2016 20:05
Localisation : Quelque part dans le 31

Re: musique 1-bit

Message par jasz » 30 janv. 2017 16:24

En fait, la valeur de l'offset est multipliée par 128 et non par 256. Et pour répondre à ton interrogation, si l'offset "déborde" il n'est tout simplement pas joué. Selon les players, soit le sample est muté soit il est joué normalement ;)

Exemple:

Code : Tout sélectionner

PT_sampleoffset
	   move.b  PTv_SampleOffs(a6),d0
		lsl.w	#7,d0
		cmp.w	PTv_SmpLength(a6),d0
		bge.s	PT_sofskip
		sub.w	d0,PTv_SmpLength(a6)
		add.w	d0,d0
		add.l	d0,PTv_SmpStart(a6)
		rts

PT_sofskip
  	 move.w  #$0001,PTv_SmpLength(a6)
		rts
Dans cet exemple, le sample est muté car sa longueur si débordement est passée à 1. La longueur reprendra sa valeur à la prochaine note. Sinon faire comme si la commande n'existait pas, il suffit de faire le branchement directement sur rts.

J'en profite pour rebondir sur ce ci contre
pulkomandy sur logicielsmoto a écrit :Pour le vibrato, c'est une "vibration" de la fréquence autour de celle de la note, plus ou moins forte selon le paramètre de l'effet. Donc au lieu d'être à 440Hz, la fréquence est à 440, puis 441, puis 442, puis 441, 440, 339, 338, 339, ...
C'est vrai... J'ajoute que pour ceci on utilise normalement une table des sinus comme pour le tremolo ;)

Code : Tout sélectionner

PT_vibratotable	
		dc.b	000,024,049,074,097,120,141,161
		dc.b	180,197,212,224,235,244,250,253
		dc.b	255,253,250,244,235,224,212,197
		dc.b	180,161,141,120,097,074,049,024
Modifié en dernier par jasz le 30 janv. 2017 17:55, modifié 1 fois.

__sam__
Messages : 3991
Enregistré le : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: musique 1-bit

Message par __sam__ » 30 janv. 2017 17:52

Tu es sur du x128 ? Dans la doc PMT ils disent

Code : Tout sélectionner

9xx 	Sample Offset 	Yes 	Starts playing the sample at the position xx × 256 (instead of position 0). This effect does not do anything if there is no note in the same pattern cell. 
et dans cette discussion sur pouet.net ils indiquent
9xx starts the sample at xx00, i.e. FF00 = 65280 samples is the highest possible start value in MOD / XM.
Enfin dans ce player en C, la routine once_upon_src/cool_mzx/pt.c:pt_play() contient

Code : Tout sélectionner

                        switch (cmdprm) /* komentojen käsittely, 1. kerta */
                        {
.../...
                                case 0x900: sd_setoffset((int)prm<<8); break;
Donc c'est bien x256 dans tous ces cas là.

Le seul truc que je vois qui fait x128 c'est dans le code ASM d'un vieux replayer ProtTracker:

Code : Tout sélectionner

pt_SampleOffset
	MOVEQ	#0,D0
	MOVE.B	n_cmdlo(A6),D0
	BEQ.B	pt_sononew
	MOVE.B	D0,n_sampleoffset(A6)
pt_sononew
	MOVE.B	n_sampleoffset(A6),D0
	LSL.W	#7,D0<=== ICI
Mais c'est peut-être un bug. La valeur x256 pour moi a du sens puisqu'un sample fait max 0xFFFF.

Pfff... alors x128 ou x256? Ce qui est sur c'est que x128 éviterait le débordement pour skidrow.

[Edit] j'ai essayé les deux, et bizzarement x128 ne sonne pas bon du tout malgré l'absence de débordement.
Modifié en dernier par __sam__ le 30 janv. 2017 18:03, modifié 1 fois.
Samuel.
A500 Vampire V2+, A1200(030@50mhz/fpu/64mb/cf 8go),
GVP530 (MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8. New Teo 1.8.4 8)

jasz
Messages : 362
Enregistré le : 05 oct. 2016 20:05
Localisation : Quelque part dans le 31

Re: musique 1-bit

Message par jasz » 30 janv. 2017 17:59

Regarde le code que j'ai joint et constate la différence avec le tiens ;) Mais je suis formel, on fait bien un lsl #7
Modifié en dernier par jasz le 30 janv. 2017 18:14, modifié 2 fois.

__sam__
Messages : 3991
Enregistré le : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: musique 1-bit

Message par __sam__ » 30 janv. 2017 18:11

Punaise, ya un truc alors.. parce que sur les échantillons sans débordement ca tombe bien avec le x256. Avec le x128 ca tombe trop tot dans l'instrument.

Dans ce tuto

le gars dit dans la description
Additional stuff: To calculate the offset you take the first two hexadecimal numbers from the position from where in the sample you want to start. Therefore FF00 (65280) becomes the maximum offset which is very close to the maximum length for a sample (65535) so half way through that would translate to 80(hex).
Serait-ce une différence entre le format orginel et ce qu'il est devenu au fil du temps ? (comme par exemple l'usage de la note B-3 qui fait planter le chipset amiga mais qui est utilisé sur les players d'autres plateformes)
Modifié en dernier par __sam__ le 30 janv. 2017 18:15, modifié 1 fois.
Samuel.
A500 Vampire V2+, A1200(030@50mhz/fpu/64mb/cf 8go),
GVP530 (MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8. New Teo 1.8.4 8)

jasz
Messages : 362
Enregistré le : 05 oct. 2016 20:05
Localisation : Quelque part dans le 31

Re: musique 1-bit

Message par jasz » 30 janv. 2017 18:14

Je m'explique. Pourquoi 128, simplement parce que c'est le maximum que l'operateur lsl accepte. Ensuite on compare si débordement. Si c'est le cas on skip sinon on soustrait le résultat D0 à la longueur du sample. Ce résultat D0 est ensuite multiplié par 2 (voici les 256 :) ) et ajouté à l'adresse de début de sample.

__sam__
Messages : 3991
Enregistré le : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: musique 1-bit

Message par __sam__ » 30 janv. 2017 18:52

Je suis un peu perdu, mais ce que je comprends, c'est que c'est 256 en octet parce que dans le ProTracker il faut tout (les longeurs, les indexes, etc) multiplier par deux à cause du fait qu'il travaille en interne sur des words 16bits. Apparemment ce serait lié inialement au fait que le chipsets l'amiga ne travaille que sur des multiples de words 16bits. Du coup le LSL#7 devient un x256 quand on compte en octet.
Samuel.
A500 Vampire V2+, A1200(030@50mhz/fpu/64mb/cf 8go),
GVP530 (MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8. New Teo 1.8.4 8)

Répondre