[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

Daniel
Messages : 10680
Enregistré le : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: [THOMSON] Jouer des MODs amiga

Message par Daniel » 19 oct. 2017 20:44

La lecture de la carte SD par le processeur 6809 n'est pas très rapide, je ne sais pas si on peut obtenir une fréquence assez élevée pour être inaudible.

Sinon il y le montage avec l'Arduino. Dans SDPLAY44 les échantillons sur 6 bits sont joués à 44,1kHz, et sur un bit on doit pouvoir aller nettement plus vite. Le streaming n'est pas un exploit technique comme celui que tu as réalisé, mais c'est nettement plus agréable à l'oreille :wink:

Toutefois, pour faire communiquer le MO5 ou le TO7 avec l'Arduino, il faut mettre un contrôleur SX90-018. Il a le CNA intégré, alors vouloir utiliser seulement le buzzer est une contrainte artificielle.

Image
Daniel
L'obstacle augmente mon ardeur.

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

Re: [THOMSON] Jouer des MODs amiga

Message par __sam__ » 19 oct. 2017 21:32

Le truc à voir avec le PWM, c'est qu'il coute très peu de cycles.

Regardons un PWM à 9 niveaux. Cela revient à choisir 8 états successifs pour le buzzer: 00000000, 10000000, 11000000,11100000, 11110000, 11111000, 11111100, 11111110, 11111111. Alors oui écrire dans le buzzer 8 fois pour ces 8 états coute beaucoup de temps CPU. Mais on peut être plus malin en n'écrivant pas les valeurs 1 et 0 à chaque fois, mais uniquement lors des transitions 1->0 ou 0->1. Ca veut dire qu'au lieu d'écrire 8 fois dans le buzzer, on écrit plus que 2 fois: 00------, 10------, 1-0------, 1--0----, 1---0---, 1----0--, 1-----0-, 1------0, 1-------1. Ca va 4 fois plus vite!

Au final, on perd très peu de cycles et cela ralenti à peine la vitesse de lecture initiale. On continue à lire la carte SD à 5khz, mais on arrive à faire un PWM 9 niveaux capable de changer d'état tous les 8*5=40khz. On a multiplié la vitesse par 8 (virtuellement). C'est ca le grand truc que j'utilise dans mon exercice de style sur le buzzer.

A noter qu'en changeant l'endroit des transitions 1->0 ou 0->1, on arrive facilement à envoyer la porteuse initiale sur sa fréquence double: 00--00--, 10--00--, 10--10--, 1-0-10-, 1-0-1-0, 1--01-0-, 1--01--0, 1--11--0, 1--11--1 (c'est à dire les motifs 00000000, 10000000, 10001000, 11001000, 11001100, 11101100, 11101110, 11111110, 111111111). Je viens de tester avec mon player et ca marche très très bien. (ne faites pas attention à l'erreur de typo)
porteuse 9khz.gif
porteuse 9khz.gif (357.38 Kio) Vu 827 fois
La porteuse est à présent à 9khz: on l'entends beaucoup moins! Je dirais même que je ne l'entends plus sur mon CRT car elle est couverte par le sifflement naturel du moniteur :D Mais par contre on a 4 changements d'état par cycle total. Le player est un peu ralenti à 4.6khz. Mais ca ne semble pas nuire à la qualité obtenue.
pwm_porteuse_9khz.zip
(192.36 Kio) Téléchargé 47 fois
Je suis content :mrgreen: car je pense avoir bien compris comment maitriser la porteuse quand on joue du PWM à fréquence basse: la théorie ci-dessus colle à la pratique :!: Du coup, si on avait un chouia de puissance en plus pour changer l'état du buzzer pour chaque top interne, on pourrait utiliser des motifs aléaloires de 1 et 0 présentant la bonne densité de 1 ce qui casserait la régularité du cycle, et donc la porteuse. Par exemple avec le niveau 50% on utilise par défaut 11110000, mais on pourrait utiliser 10101010 ce qui enverrait la porteuse à une fréquence 4 fois plus élevée dans le spectre. Le player à 5khz se retrouve grace au 2e motif avec une porteuse de 20khz, donc grandement atténuée.
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 : 455
Enregistré le : 05 oct. 2016 20:05
Localisation : Quelque part dans le 31

Re: [THOMSON] Jouer des MODs amiga

Message par jasz » 21 oct. 2017 17:54

Je m'interroge sur un fait: Les sons que produit l'instruction PLAY ne sortent pas via le CNA pourtant ils sont assez propre... Je veux dire par là pas de bruits ni de sifflements intempestifs :roll:

Daniel
Messages : 10680
Enregistré le : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: [THOMSON] Jouer des MODs amiga

Message par Daniel » 21 oct. 2017 18:41

Oui, c'est très propre, puisque l'instruction PLAY génère du "tout ou rien" : des fréquences pures avec des signaux rectangulaires. Pas de bruit ni de sifflements, mais deux niveaux seulement. La seule subtilité est le timbre, qui peut être modifié en faisant varier le rapport cyclique.
Voir les sources ici : http://dcmoto.free.fr/documentation/mon ... ik_src.txt
Daniel
L'obstacle augmente mon ardeur.

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

Re: [THOMSON] Jouer des MODs amiga

Message par __sam__ » 21 oct. 2017 18:52

Oui, si on sort un signal "rectangulaire" il n'y a aucun sifflement, cf les démo de forever 2013, 2014 et 2016: http://www.pouet.net/prodlist.php?platf ... son&page=1

Le sifflement vient du fait de vouloir faire sortir un truc pas rectanglaire comme le PCM des fichiers MOD par un dispositif audio ne supportant que du carré (i.e. le buzzer qui ne fait que du tout ou rien.)
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 : 455
Enregistré le : 05 oct. 2016 20:05
Localisation : Quelque part dans le 31

Re: [THOMSON] Jouer des MODs amiga

Message par jasz » 21 oct. 2017 21:53

Pourtant en changeant l'attaque de la note on peut faire varier le rapport en le transformant en signal triangulaire. Il me semble en avoir déjà discuté.

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

Re: [THOMSON] Jouer des MODs amiga

Message par __sam__ » 21 oct. 2017 22:01

Le rapport cyclique c'est le rapport du temps dans lequel le buzzer passe à l'état 1 par rapport au temps total d'un cycle. Sans filtre passe-bas (ou un passe-bas de fréquence elevée comme avec un buzzer piezzo-electrique), il faut travailler à très très haute fréquence pour transformer les créneaux en truc plus lisse type dent de scie ou même sinus si on est très très très haut en fréquence. Helas, avec la fréquence du 6809 on ne peut pas vraiment avoir un beau signal triangulaire bien propre avec le buzzer :( Il faut passer par le CNA pour avoir des formes d'ondes plus riche que les créneaux de base si on ne veut pas entendre la porteuse présente lors du dither.
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)

Daniel
Messages : 10680
Enregistré le : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: [THOMSON] Jouer des MODs amiga

Message par Daniel » 22 oct. 2017 09:38

jasz a écrit :
21 oct. 2017 21:53
Pourtant en changeant l'attaque de la note on peut faire varier le rapport en le transformant en signal triangulaire.
La variation du rapport cyclique ne change pas la forme du signal. Il reste rectangulaire et il est impossible de faire autrement, puisqu'il est généré par une sortie TTL. Pour tout comprendre lire les sources : http://dcmoto.free.fr/documentation/mon ... ik_src.txt

La technique PWM utilisée par __sam__ et par quelques logiciels Thomson (Karate, Vox MO5...) permet de simuler un signal modulé en jouant sur la bande passante limitée de l'oreille humaine ou l'inertie du haut-parleur, mais le signal de base reste toujours rectangulaire.
Voir https://fr.wikipedia.org/wiki/Modulatio ... 7impulsion
Daniel
L'obstacle augmente mon ardeur.

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

Re: [THOMSON] Jouer des MODs amiga

Message par __sam__ » 22 oct. 2017 15:06

Afin de trouver le noise-shaper le mieux adapté, je fais jouer tout à un volume nul,cad avec le motif 1100011000 sur le buzzer. Je m'attendais alors voir la porteuse à 9khz très propre, mais il apparait un truc tout à fait inattendu à 3khz
3khz.gif
3khz.gif (192.08 Kio) Vu 743 fois
Oui il y a un beau pic bien audible à 3khz. Je suis perplexe. D'où vient-il ? Il n'y a rien dans le code qui tourne à cette fréquence.

Etonnamment, ce pic à 3khz n'existe pas quand on refait passer le volume à sa normale. C'est étonnant, mais le plus surprenant c'est que c'est très exactement centré su 3khz. Pas un peu à coté, non pile à 3khz. Bizarre, vous avez dit bizarre, comme c'est bizarre!

D'où sort-il ??
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)

Daniel
Messages : 10680
Enregistré le : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: [THOMSON] Jouer des MODs amiga

Message par Daniel » 22 oct. 2017 15:41

Tu analyses la sortie son d'un émulateur ou de la vraie machine ?
Daniel
L'obstacle augmente mon ardeur.

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

Re: [THOMSON] Jouer des MODs amiga

Message par __sam__ » 22 oct. 2017 16:04

[EDIT] @Daniel De l'émulateur, et c'est là l'erreur.. Explications:
__sam__ a écrit :
22 oct. 2017 15:06
D'où sort-il ??
De l'émulateur!

En effet avec la dernière version de DCMoto qui échantillonne à 25khz au lieu de 22khz, ce pic à disparu!
plus_rien_3khz.gif
plus_rien_3khz.gif (154.77 Kio) Vu 731 fois
Comme par hasard passer de 22 à 25 repousse vers le bas de 3khz le spectre replié. Le pic passe alors de 3khz à 3-3=0khz. Disparu!

Donc ce pic correspond à un repliement autout de 22/2khz. Mais de quelle fréquence ? La porteuse est à 200000/208=9516hz. La 2e armonique est donc à 19230hz, et elle est repliée à 22-19=3khz!!! Bingo!!! Le pic qui aparaissait est très précisément la 2e harmonique. Or sur un signal carré, les harmonique ne décroissent pas vite (en 1/n). Son intensité est donc bien audible (environ la moitié de la puissance du fondamental à 9khz).

Bon, c'est donc la preuve qu'il faut se méfier avec les émulateurs quand on joue du signal échantilloné trop proche de la fréquence d'échantillonage/2: des sifflements artificiels apparaissent. DCMoto s'en sort pas trop mal avec l'échantillonage à 22khz (à part l'harmonique à 3khz), mais avec le filtrage à 25 dans la toute dernière version on a certe plus le pic à 3khz, mais d'autres harmoniques un peu partout. C'est logique le passage de 22 à 25 introduit 3khz de plus dispo pour laisser passer les harmoniques précédemment filtrées.

Ca se voit bien sur le milieu du graphe précédent: il n'y a plus le pic à 3khz, mais pleins de bruit un peu partout. Tu peux être cependant rassuré Daniel, car ce bruit n'est rien par rapport aux émulateurs qui ne filtrent pas les signaux à freq_échant/2. A titre d'exemple voici le spectre du même morceau avec TEO: on voit bien toutes les harmoniques repliées. Le silence théorique est là reproduit comme une multitude de sifflements. Affreux! :cry:
teo.gif
teo.gif (62.09 Kio) Vu 731 fois
Donc mon approche pour juger du meilleur noise-shaping n'est pas bonne en n'utilisant que des émulateurs. Il faudra passer par la vraie machine, mais là il faudrait faire ca avec du vrai matos de pro. En particulier un très bon micro. Du matos de pro en fait...

Ce qui serait cool, ce serait de pouvoir choisir la fréquence d'échantillonnage des émulateurs. S'il fonctionnait à 2x48=96khz on aurait pas ce soucis de repliement tant qu'on ne s'approche pas des 48khz, ce qui n'est pas pour demain la veille.
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)

Daniel
Messages : 10680
Enregistré le : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: [THOMSON] Jouer des MODs amiga

Message par Daniel » 22 oct. 2017 17:44

Dans dcmoto la fréquence de sortie de son a longtemps été limitée à 22kHz car au-delà les PC un peu lents avaient du mal à suivre la cadence. Aujourd'hui on pourrait l'augmenter, ou au moins la rendre paramétrable. Par exemple donner le choix, dans les options, entre 25kHz et 50kHz.
Est-ce intéressant pour les essais de PWM ? Si oui, ce n'est pas difficile d'ajouter l'option.

Il faudrait aussi améliorer le filtrage des aigus pour s'approcher de la restitution par un téléviseur des années 1980.
Daniel
L'obstacle augmente mon ardeur.

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

Re: [THOMSON] Jouer des MODs amiga

Message par __sam__ » 22 oct. 2017 18:38

Intéréssant ? possible...

Ca fait plusieurs fois autour du PWM qu'on trouve la sortie pas bonne avec un émulateur, alors qu'en fait c'est juste lié au fait qu'on soit trop près de la moitié de la fréquence d'échantillonage et que la 2e harmonique est envoyée en plein spectre audible (disons <= 10khz). La rendre paramétrable peut-être intéréssant si l'utilisateur sait ce qu'il fait. Et c'est là que le bât blesse. 99% des gens n'ont strictement aucun idée sur ce qu'est un repliement de spectre et des théorèmes de Shannon.

Le mieux serait que l'émul détecte que la fréquence de changement du buzzer est trop proche de la fréquence critique et augmente de lui-même la fréquence d'échantillonnage. Petit calcul: soit fe la fréquence d'échantillonage de l'émulateur. Pour être "sécure" disons qu'on veut que la 2e harmonique ne soit pas audible. Ca veut dire que si le buzzer joue à la fréquence f, la 2e harmonique est à 2f.
  • 1) Il y a repli de l'harmonique si 2f >= fe/2.
  • 2) Elle sera repliée à fe-2f, qu'on veut voir au dessus de 10khz (marge de sécurité: on peut prendre plus si on veut, genre 15khz)
En equation ca signifie fe >= 10khz + 2f.

Il faudrait donc échantillonner à au moins 2 fois la fréquence du buzzer + la marge si la fréquence du buzzer est plus grande que fe/2. Ca n'est pas forcément très simple à mettre en oeuvre, je ne sais pas, car je me suis même peut-être trompé dans le calcul de tête. (je pense au fait qu'il faut aussi éviter le repli du fondamental aussi: bref que f soit éloigné de fe/2 d'une certaine marge aussi. Mais je pense que la contrante fe>=2f+marge couvre les autres.)
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
yo_fr
Messages : 1321
Enregistré le : 13 août 2009 18:24
Localisation : 78...
Contact :

Re: [THOMSON] Jouer des MODs amiga

Message par yo_fr » 22 oct. 2017 20:17

Sur mon émulateur, le son est joué à 176 400 hz. Cela ne change rien à l'exécution de l'émulation, c'est DirectX qui joue le sample.
Ceci est aussi bien valable en C qu'en VB et même sous Linux avec SDL !

Daniel
Messages : 10680
Enregistré le : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: [THOMSON] Jouer des MODs amiga

Message par Daniel » 22 oct. 2017 21:00

J'ai compilé vite fait une version de dcmoto (pas complètement testée) avec une option 50kHz. Si ça permet d'améliorer la restitution en PWM je la garderai dans la prochaine version. Sinon je reviendrai à l'ancienne fréquence (25kHz).
dcmoto_20171022.zip
(845.7 Kio) Téléchargé 15 fois
Daniel
L'obstacle augmente mon ardeur.

Répondre