[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 : Papy.G, fneck, Carl

jasz
Messages : 1313
Inscription : 05 oct. 2016 20:05
Localisation : Quelque part dans le 31

Re: [THOMSON] Jouer des MODs amiga

Message par jasz »

Je pense que l'on peut faire un petit peu mieux sans avoir à remplacer le 6809 par un 6309...
Daniel
Messages : 17316
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: [THOMSON] Jouer des MODs amiga

Message par Daniel »

Dans quel domaine ? Jouer des MODs amiga ou jouer de la musique sur 1 bit ou améliorer le code de __sam__ ? Peux-tu préciser ton idée ?
Daniel
L'obstacle augmente mon ardeur.
jasz
Messages : 1313
Inscription : 05 oct. 2016 20:05
Localisation : Quelque part dans le 31

Re: [THOMSON] Jouer des MODs amiga

Message par jasz »

Jouer?! Pas exactement et pour être franc je n'ai rien compris au listing de _sam_. Si! A part une chose! Il utilise des CMP pour savoir si le son est bouclé ou le boucler. La solution assez juste pour gagner quelques cycles serait de faire en sorte à ce que la longueur du sample soit négative ainsi en additionnant le pas on se rapproche de 0. Ce qui n'est pas négligeable car on évite la comparaison.
__sam__
Messages : 7923
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: [THOMSON] Jouer des MODs amiga

Message par __sam__ »

En fait la détection de la fin du son n'utilise plus de CMP à présent. Le gain en vitesse vient de là: On est bien obligé de virer des instructions pour aller plus vite que les 200µs précédents, et pour le coup j'ai été un poil malin et la détection de la fin d'un instrument ne coute plus rien. Au niveau optim j'ai même réussi à ré-utiliser les valeurs précédentes du canal quand le pointeur sample ne bouge pas (ca fait gagner encore quelques cycles.)

Tant est si bien que la gestion des canaux se fait dorénavant en 28 cycles. Et 28 cycles sur 6809 pour incrémenter un compteur, bouger le pointeur d'échantillon, tester le rebouclage et récupérer l'échantillon c'est très très peu. Je suis bien content d'avoir trouvé de nouvelles astuces pour faire tout ça (c'est ce qui m'amuse dans l'exercice :) .)
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
jasz
Messages : 1313
Inscription : 05 oct. 2016 20:05
Localisation : Quelque part dans le 31

Re: [THOMSON] Jouer des MODs amiga

Message par jasz »

Preuve que je n'ai pas très bien compris ton listing :oops: (Pour moi rptX voulait dire repeatX et par extension loopX que tu utilises deux fois dans ta routine et ce pour chaque pistes X, Y, U, S)

Mais ça prouve que tu as suivi l'idée que j'avais souligné plus haut :) J'avais donc RAISON de croire que l'on pouvais faire mieux :mrgreen:
__sam__
Messages : 7923
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: [THOMSON] Jouer des MODs amiga

Message par __sam__ »

Heuu.. il n'y a pas de loop_x dans le code. Sinon oui rptX c'est l'adresse où ecrire la valeur du pointeur échantillon à utiliser une fois arrivé au bout de l'instrument échantilloné. Dans cette version du code, avec une astuce, la detection de fin d'instrument est gratuite.

Une autre possibilité est de faire comme avec certains players ZX: ne tester la fin des échantillons que tous les 1/50e de seconde. Il faut alors prévoir une zone de silence entre les instruments pour éviter de jouer l'instrument d'après si ca deborde.

Il reste des astuces à exploiter....
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
jasz
Messages : 1313
Inscription : 05 oct. 2016 20:05
Localisation : Quelque part dans le 31

Re: [THOMSON] Jouer des MODs amiga

Message par jasz »

1/50e de seconde c'est l’équivalent d'une VBL du moins sur amiga et ST

PS loopX est fictif c'est par EXTENSION au rptX, histoire d'expliquer ce que j'ai compris ;)
__sam__
Messages : 7923
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: [THOMSON] Jouer des MODs amiga

Message par __sam__ »

jasz a écrit : 02 oct. 2017 23:24 1/50e de seconde c'est l’équivalent d'une VBL du moins sur amiga et ST
Oui c'est ca: on repousse le test de rebouclage qu'en fin de VBL plutot que de le faire pour chaque octet envoyé au CNA. Un canal peut donc déborder son rebouclage de 20ms, mais c'est suffisamment petit pour ne pas être trop remarqué. En revanche on gagne pas mal de temps puisque le test de rebouclage n'est plus effectué qu'à 0.25% du temps (en assumant une sortie son à 20khz.)
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
Fool-DupleX
Messages : 2284
Inscription : 06 avr. 2009 12:07

Re: [THOMSON] Jouer des MODs amiga

Message par Fool-DupleX »

Je trouve très astucieuse l'idée de ne tester la fin des samples qu'une fois de temps en temps. Quel est l'impact sur l'empreinte mémoire, ce serait faisable ?

Au risque de paraître lourd, je réitère ma demande d'avoir une ou plusieurs des musiques précédentes converties pour le nouveau player, parce que pump up the jam et compagnie, j'ai pas vraiment entendu le gain en qualité.
__sam__
Messages : 7923
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: [THOMSON] Jouer des MODs amiga

Message par __sam__ »

Fool-DupleX a écrit : 03 oct. 2017 11:14 Je trouve très astucieuse l'idée de ne tester la fin des samples qu'une fois de temps en temps. Quel est l'impact sur l'empreinte mémoire, ce serait faisable ?
Mettons que le player ainsi optimisé tourne à 10khz max, en 1/50e de seconde il aura au pire consommé 10 000/50 = 200 échantillons de trop.

Donc si on veut que le test en fin de VBL marche, il faut prévoir environ 200 octets de silence en fin d'instruments. A raison de 16 instruments maxi (car il y a 2 instruments par octets), ca engendrerait un sur-coût de 3ko environ. Suivant les circonstances ca peut-être acceptable ou pas (en pratique j'ai des morceaux d 42ko, cad que j'occupe l'essentiel de la ram "à plat" dispo. Ajouter 3ko ne sera pas facile.)

A noter: cette technique ne donnera de bons résultats que si les instruments sont non-bouclants. S'il le sont, le blanc en fin de boucle, contrairement à ce que je disais, s'entendra à 50hz. En effet, je viens de tester er on entend finalement assez bien à cette fréquence qui est partout autour de nous.
Au risque de paraître lourd, je réitère ma demande d'avoir une ou plusieurs des musiques précédentes converties pour le nouveau player
Pour le reste, un peu de patience... ;) c'est pas aussi simple qu'il n'y parrait car les instruments passant de 5khz à 7khz voient leur volume augmenter de 40%. Or comme ils occupaient déjà toute la ram dispo, à 7khz ils ne rentrent plus en mémoire. Pour qu'ils rentrent il faut descendre la qualité à 5khz, ce qui est contre-productif. Peut-être qu'un meilleur encodage de la partie "pattern" ferait gagner de la place en mémoire. J'y réfléchis...
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
Fool-DupleX
Messages : 2284
Inscription : 06 avr. 2009 12:07

Re: [THOMSON] Jouer des MODs amiga

Message par Fool-DupleX »

Pour les instruments bouclants, y'a pas moyen de repeter le debut a la fin au lieu de mettre du blanc et de ressauter en + offset plutot qu'en 0 ?

Edit : le + offset va varier en fait ... Il faudra le recalculer, ce qui peut être coûteux.
__sam__
Messages : 7923
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: [THOMSON] Jouer des MODs amiga

Message par __sam__ »

Oui voilà: l'offset fixe est le soucis. Il faut faire une règle de 3 entre l'offset, la fréquence jouée et celle de l'instrument. Règle de trois signifie faire une multiplication 8bits x 8bits ce qui est facile, mais ensuite il faut faire une division 16bits / 8bits, et là ca ramme :'(

Une solution est d'avancer la date de rebouclage de 1/50 de sec. L'idée est que si on détecte la date, ca signfie que l'on devra boucler au cours des 20ms suivantes. Mais au lieu d'attendre, on boucle avant. Autant un blanc de 20ms doit s'entendre, alors qu'une légère avance dans les échantillons peut-être pas. Il faut experimenter.
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
Fool-DupleX
Messages : 2284
Inscription : 06 avr. 2009 12:07

Re: [THOMSON] Jouer des MODs amiga

Message par Fool-DupleX »

La, je comprends pas bien pourquoi un calcul si complexe. A la place du blanc a la fin, tu mets un bout du debut. Quand tu t'apercois que t'as depasse la fin du sample, en toute logique, tu sais de combien. ne suffit-il pas de faire la soustraction position actuelle- position fin du sample et de rajouter ca au debut pour retomber sur le même sample ? Enfin je sais pas si je me fais comprendre ...
__sam__
Messages : 7923
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: [THOMSON] Jouer des MODs amiga

Message par __sam__ »

Hum.. oui tu as raison. La règle de 3 ne s'applique que si on change la fréquence entre temps. Or cela ne se produit qu'en fin de "row" soit au bout de plusieurs VBL. Donc oui on peut reprendre avec un offset correspondant à la quantité de dépassement.

Hum.. il faudra que je teste ça à l'occasion. Sans doute quand je reprendrai le 1bit pour avoir la fréquence la plus élevée possible (à priori 133cycles pour 4 voix sur 1 bit si je me débrouille bien avec de belles astuces 6809. Reste à avoir une conversion 1 bit qui ne soit pas toute moche.)
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
jasz
Messages : 1313
Inscription : 05 oct. 2016 20:05
Localisation : Quelque part dans le 31

Re: [THOMSON] Jouer des MODs amiga

Message par jasz »

Il y a aussi une autre solution que j'avais déjà évoquée.

Utiliser une longueur de sample NEGATIVE. Ainsi en additionnant le pas de la fréquence on se rapproche de 0 et si on dépasse c'est facile à tester. Ainsi on conserve le débordement que l'on ajoute ensuite à la nouvelle longueur(en NEGATIF elle aussi) s' il y a Looping. En gros ce ne sont que des additions ;)
Répondre