[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

Fool-DupleX
Messages : 2284
Inscription : 06 avr. 2009 12:07

Re: [THOMSON] Jouer des MODs amiga

Message par Fool-DupleX »

Donc, non, la sortie analogique au sens ou tu l'entends n'a jamais existé sur Thomson, sur aucun modèle ni aucune extension officielle, hormis la synthèse vocale MEA8000.

Le développement chez Thomson a été fait de beaucoup de "si". On pourrait croire au souci de la rétro-compatibilité, mais au moins sur les TO8/8D/9+, il y a une plage supplémentaire d'I/Os située en $FFD0-$FFEF, largement suffisante pour rajouter un chip audio. Cette plage n'a jamais été exploitée par aucune extension. Comme beaucoup d'autres choses sur Thomson (ex: lecteur de code barre sur MO5), on ne saura sans doute jamais pourquoi.

Je me suis penché sur le code de Sam, car je voulais aussi faire du 6 bits. Honnêtement, je crois que c'est impossible. Le 4 bits qu'il a utilisé a de très bonnes raisons d'être, l'une d'entre elles étant la performance. On est déjà à peine à 5 KHz pour le mix, avec du 6 bits, tu descendras au moins à 3, ce qui n'a plus aucun intérêt en termes de dynamique.

Le mod player actuel est potentiellement compatible avec toutes les machines Thomson.
jasz
Messages : 1313
Inscription : 05 oct. 2016 20:05
Localisation : Quelque part dans le 31

Re: [THOMSON] Jouer des MODs amiga

Message par jasz »

Fool-DupleX a écrit :Je me suis penché sur le code de Sam, car je voulais aussi faire du 6 bits. Honnêtement, je crois que c'est impossible. Le 4 bits qu'il a utilisé a de très bonnes raisons d'être, l'une d'entre elles étant la performance. On est déjà à peine à 5 KHz pour le mix, avec du 6 bits, tu descendras au moins à 3, ce qui n'a plus aucun intérêt en termes de dynamique.
Il me semble que la raison pour laquelle __sam__ a utilisé 4 bits est plus certainement un souci d'espace car ainsi il pouvait coupler les samples sur 1 octet. Après si on utilise du 6 bits je ne pense pas que la performance puisse en souffrir. Certes, on entre dans un mixage sur 16 bits mais avec un peu d'astuce on peut y arriver. ;)
Daniel
Messages : 17316
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: [THOMSON] Jouer des MODs amiga

Message par Daniel »

Si chaque voix est sur 6 bits il faut 8 bits pour mixer les quatre voix, c'est physiquement impossible avec le CNA Thomson. Aucune astuce ne peut contourner les lois de l'informatique.
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 »

Daniel a écrit :Si chaque voix est sur 6 bits il faut 8 bits pour mixer les quatre voix, c'est physiquement impossible avec le CNA Thomson. Aucune astuce ne peut contourner les lois de l'informatique.
En théorie oui 64x4=256. Mais ça ne marche pas réellement comme ça.
Souviens toi
jasz, le 9 juin 2005 a écrit :Bon, je pense que beaucoup attendent la routine qui va créer le digit...

Alors c'est let's go :D

Alors posons les données:

X contient l'adresse du buffer pour stocker le digit
Cette routine est executée &hD8 fois
$table contient l'adresse de la table des volumes

PSHS X
LDD 4,Y
ADDD 8,Y
TFR D,X
LDA 12,X
LDB X
ADDD $table
TFR D,X
LDB X
PULS X
STB X

Explications. On commence par sauver X ensuite on charge l'adresse du spl (attention dans mon cas l'adresse représente celle de fin du spl en RAM). Ensuite on ajoute la position du curseur de lecture (cette position est forcement une valeur négative). X=D puis on charge le volume en A(commande C) et l'échantillon du sample en B. On récupère par la suite la valeur correspondante dans la table des volumes et on sauve le tout dans le buffer (sans inc pour la première piste).

Let's warp

LDD A,Y
ADDD 14,Y
STD A,Y
LDD 8,Y
BCS (1)
ADDD #1
(1) ADDD 16,Y
BLT (2)
LDD C,Y
STD 4,Y
LDD 10,Y
ADDD 16,Y
(2)STD 8,Y
RTS

Explications.On charge le compteur virtuel de la la fréquence et on ajoute la partie décimale de cette dernière (A,Y ne gère que le calcul de la partie décimale). Si il ya une retenue on ajoute 1 à la partie entière (comme pour pour un calcul normal en fait). On charge l'entier de la fréquence et on execute l'addition sur sa longueur (je rappele que le longueur est une valeur négative). Si la longueur n'atteint pas le 0 alors pas de problème on sauve la nouvelle variable. Au contraire on charge l'adresse du loop (toujours l'adresse de fin) qui devient celle du spl (4,Y) en suite celle de la longueur (8,Y)

Suis-je assez explicite 8o

A savoir que cette routine ne concerne qu'une voie.
Pour la deux et la trois il faudra prévoir un ADDB, X avant le STB, X et la quatrième remplacer le STB,X par un STB,X+

Cette routine est appelée comme les autres

par

LDY tampon_piste1
BSR digit_piste1
LDY tampon_piste2
BSR digit_piste2
LDY tampon_piste3
BSR digit_piste2
LDY tampon_piste4
...(dernière routine)

Voili
Après on peut très facilement adapter la table des volumes en 6 bits...

Maintenant avec le temps je m’aperçois que cette routine ne pourra jamais être employée sur un thomson du fait de sa longueur en TM (executée 216 fois). Mais elle offre une base pour expliquer le fonctionnement du mixage monophonique. Une piste à explorer :)
Daniel
Messages : 17316
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: [THOMSON] Jouer des MODs amiga

Message par Daniel »

Si j'ai bien compris, l'échantillon final, obtenu en additionnant 4 échantillons 6 bits, est ramené sur 6 bits en jouant sur la table des volumes. Il faut donc diviser le volume par quatre. C'est exactement pareil d'additionner 4 échantillons 4 bits sans diviser par quatre : les deux bits que tu crois avoir gagnés au début sont perdus à la fin. Aucune astuce ne peux contourner les lois mathématiques.
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 »

Non, ça ne fonctionne pas comme vraiment ainsi.

Pour rechercher la correspondance d'un échantillon dans la table nous avons besoin du volume auquel il doit être joué. Nous obtenons un mot qui contient le volume dans A et l'échantillon dans B. Ce mot va nous permettre de récupérer la valeur correspondante dans la table.
Ex: Si notre échantillon à une valeur de $#15 et qu'il doit être joué à un volume de $#40 nous obtiendrons dans $table+$#4015 $#7 et dans $table+$#4040 $#20...

Ces valeurs sont calculées selon une formule bien précise que je retrouverais car on peut les adapter en 6 bits...
__sam__
Messages : 7923
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: [THOMSON] Jouer des MODs amiga

Message par __sam__ »

sur 6809 si on a un échantillon unsigned sur 8 bits dans A (0..255) et dans B le volume de 0 à 64 (inclus sur amiga) le produit A*B donne dans A une valeur de 0 à 63 incluant la troncature et l'arrondi directement compatible avec le CNA.
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 »

Tout cela est fort joli, mais c'est trop lent pour obtenir une fréquence de mix suffisante. Les échantillons sur 4 bits c'est vrai que c'est pour la mémoire, mais c'est aussi pour économiser la division par 4, 4 cycles par sample, soit 20 ms par seconde ou 2% de temps CPU. Ca peut paraître peu, mais c'est loin d'être négligeable. Rajoute à cela que compte tenu de la place en mémoire prise par les echantillons (le double), tu vas soit avoir des echantillons vraiment courts soit devoir commuter les pages et là, t'es mort.

Peut-être que ça peut le faire pour un softsynth avec des echantillons type sinus, carre, triangle, des trucs qui prennent peu de place. Mais surement pas pour les morceaux de TO8 DeMODed.
jasz
Messages : 1313
Inscription : 05 oct. 2016 20:05
Localisation : Quelque part dans le 31

Re: [THOMSON] Jouer des MODs amiga

Message par jasz »

Fool-DupleX a écrit :Peut-être que ça peut le faire pour un softsynth avec des echantillons type sinus, carre, triangle, des trucs qui prennent peu de place. Mais surement pas pour les morceaux de TO8 DeMODed.
En effet, je parlais de soundship ;)
Fool-DupleX a écrit :Les échantillons sur 4 bits c'est vrai que c'est pour la mémoire, mais c'est aussi pour économiser la division par 4, 4 cycles par sample, soit 20 ms par seconde ou 2% de temps CPU.
Qui parle d'une division par 4 :?:

La définition sur 4 bits à tendance à "pixeliser" le son, ce qui fait que si ce dernier est riche en harmonique (forme ou la définition doit être plus importante), le son saccade. La définition 6 bits ne change rien au modplayeur de __sam__ c'est juste la table qui change et la forme d'adressage ;)
Daniel
Messages : 17316
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: [THOMSON] Jouer des MODs amiga

Message par Daniel »

Avec 4 voix sur 6 bits, le mixage (addition) donne un échantillon sur 8 bits. Pour le jouer avec le CNA 6 bits il faut le diviser par 4.
Avec 4 voix sur 4 bits, le mixage (addition) donne un échantillon sur 6 bits. La division par 4 est évitée

Dans le premier cas la division par 4 revient à supprimer les 2 bits supplémentaires de chacune des voix. Il n'y a donc aucune amélioration de la définition du signal, mais éventuellement un meilleur arrondi. Cette méthode consomme plus de cycles CPU et plus de mémoire. Le résultat est nettement moins bon, puisque que la fréquence de sortie est moins élevée (plus de cycles CPU) et la séquence moins longue (moins d'échantillons dans la même taille de mémoire).

Il faut bien comprendre qu'en informatique on raisonne sur des valeurs discrètes, pas sur des nombres réels.
Pour nous prouver le contraire il faudrait faire une démo avec les mêmes musiques que TO8deMODed.

[Edit]
Ajoutons que la restitution des harmoniques dépend plus de la fréquence d'échantillonnage que de la définition des échantillons. Avec une fréquence d'échantillonnage de 5000Hz la bande passante est limitée à 2500Hz, c'est très bas et c'est la cause principale de la disparition des fréquences aigues.
[/Edit]
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 »

Daniel a écrit :Avec 4 voix sur 6 bits, le mixage (addition) donne un échantillon sur 8 bits. Pour le jouer avec le CNA 6 bits il faut le diviser par 4.
Ben non! On utilise une table de correspondance :P Elle a l'avantage d'avoir une qualité nettement meilleure que si on utilisait un ASR ou un LSR.
Daniel a écrit :Le résultat est nettement moins bon, puisque que la fréquence de sortie est moins élevée (plus de cycles CPU) et la séquence moins longue (moins d'échantillons dans la même taille de mémoire).
Ce n'est pas vrai non plus puisque l'on garde la même frequence; 5Khz :roll:

Le seul truc c'est d'arriver à coller ça dans les 200 cycles de la routine de fabrication du digit du playeur de __sam__. Une dizaine de cycles tout au plus...
Daniel
Messages : 17316
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: [THOMSON] Jouer des MODs amiga

Message par Daniel »

Comme les explications ne servent à rien, j'abandonne. J'attends la démo qui prouvera cette théorie.
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 »

Daniel a écrit :J'attends la démo qui prouvera cette théorie.
Si __sam__ veut bien tenter l'affaire, je suis prêt à l'aider pour les tables...
Ajoutons que la restitution des harmoniques dépend plus de la fréquence d'échantillonnage que de la définition des échantillons. Avec une fréquence d'échantillonnage de 5000Hz la bande passante est limitée à 2500Hz, c'est très bas et c'est la cause principale de la disparition des fréquences aigues.
Cette théorie s'applique sur la restitution globale. Le problème rencontré sur certain module de demoded viens surtout de la définition de 0 à 15 des samples. Quand on octroie un volume de #$40 la courbe n'est plus linéaire mais étagée du style
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
2 2 2 2 2 2 2 2
3 3 3 3 3 3 3 3
etc... jusqu'a 15
au lieu d'avoir
0 1 2 3 4 5 6 7
8 9 A B C D E F
etc.. jusqu'a 63
C'est cet "étagement" que l'on entend dans certain cas (plus dans les harmoniques car l'étagement est plus importante) et ajouté à la faible fréquence de sortie, le rendu en patie.

Après si je vous fais profiter de mon experience sur les soundtracker, c'est pour aider. Maintenant si tout le monde campe sa position, on ne va pas aller bien loin...
__sam__
Messages : 7923
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: [THOMSON] Jouer des MODs amiga

Message par __sam__ »

Perso je suis un peu largué par tes explication jasz ;) ça semble très clair pour toi mais pas pour Daniel, Fool et moi-même.

En tout état de cause le payer actuel tourne à 200us et il n'y à pas la place pour ajoute
t des calculs en plus sans réduire se beaucoup la qualité audio. Par exemple à 250us soit environ 12 cycles de plus par voir on joue à 4khz ... En gros la qualité granded-ondes de la radio. C'est très mauvais!

La fréquence audio compte plus que le nb de bits. Le dithering palie très bien le manque de bits. Pour preuve les enreg actuels en studio se font sur 1 bit à très très haute fréquence. Avec ça la dynamique va bien au delà de ce Que un pauvre cd 16bits @44khz est capable de faire.

Pour améliorer la qualité du mixage sur thomson je n:ai qu'une idée: le faire faire par le hard et pas par le soft. En gros une fois traitée une voix on ne la réduit pas sur 4bits pour l'ajouter aux autres. Non. On laisse sur 6bits et on l'envoie au CNA sans attendre.

Le hard fera un mixage sur 6bits à 20khz pour nous.

nota: désolé pour les typo je suis sur une config de daube.
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
__sam__
Messages : 7923
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: [THOMSON] Jouer des MODs amiga

Message par __sam__ »

Quand on octroie un volume de #$40 la courbe n'est plus linéaire mais étagée du style
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
2 2 2 2 2 2 2 2
3 3 3 3 3 3 3 3
etc... jusqu'a 15
au lieu d'avoir
0 1 2 3 4 5 6 7
8 9 A B C D E F
etc.. jusqu'a 63
attention la valeur 63 sur lz CNA correspond à $40 sur les 4 voix. une voix seule ne peut aller que de 0 à 15 si on veut qu'elles soient toutes équivalentes en terme de volume.
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
Répondre