Samuel Devulder a écrit:
Ca nous ferait un PWM à 6 niveaux (00000, 10000, 11000, 11100, 11110, 11111) dont chaque pulse 0 ou 1 dure 27µs, soit un sur-échantillonnage à ~37khz ce qui est clairement mieux que nos malheureux 8khz. Mais est-ce suffisant pour avoir quelque chose de qualité ? Je ne sais pas. Il faut expérimenter, et cela nécessite de ré-écrire complètement le player. Il me reste donc plein de travail à faire. J'espère au moins que la qualité sera là car ca m’ennuierait de tout détruire pour ne pas avoir beaucoup mieux au final.
Après pas mal de travail j'ai réussi à coder cet algorithme avec non pas 6 niveaux, mais 11 niveaux dont chaque puls dure exactement 18µs. Chacun des 11 niveau possibles pour le PWM est implémenté dans un "core" gérant chacune des 4 voix tout en positionant le buzzer à 1 pendant le temps désiré. Moralement c'est comme si on arrivait à changer l'état du buzzer à toutes les 18µs soit à peu près du
56khz. Cool, c'est carrément vachement plus que ce que je faisais avant avec les instruments déjà convertis sur 1 bit.
En travaillant en numérique le plus longtemps possible et en passant au 1 bit qu'en toute fin du traitement on arrive à gagner en vitesse. Ce qu'on atteint pas en traitant 1 bit à la fois plein pot, on le gagne en en faisant passer plus de bits (8 valeurs) par échantillon en une fois. Malin !
Oui mais attends, il y a 4 voix et chaque voix possède 2 positions où l'on peut modifier le buzzer. Ca ne fait pas 11 niveaux, mais 4*2+1=9 niveaux. Oui tout à fait, mais j'ai réussi à récupérer 2 niveaux corrélés dans la routine qui réalise le mélange de chacune des voix et le saut calculé vers le bon core. Par corrélé, je veux dire que dans cette partie de l'algo (les deux derniers tops d'horloge à 55khz) le buzzer doit forcément garder les mêmes valeurs. Du coup on ne peut avoir la séquence 0.9=11111111
10 car cela nécéssiterait de changer l'état du buzzer entre les deux derniers tops ce qui est impossible. On arrive à s'en sortir en introduisant un léger décalage de phase de 18µs à un moment (observer ce qu'il se passe avec le niveau 0.9): 0.0=00000000
00, 0.1=10000000
00, 0.2=11000000
00, 0.3=11100000
00, ..., 0.8=11111111
00,
0.9=0111111111, 1.0=11111111
11. C'est bien.
Bref, avec cette astuce on obtient un player PWM à 11 niveaux dans lequel une période dure 194µs (+7 pour le débug). Ca nous fait une fréquence de restitution effective à 5khz. Pareil que celle de la Forever 2017. Donc ca devrait être acceptable comme vitesse je pense. Vraiment ? Non je demande, parce qu'avant on se focalisait à sortir du 8khz sans y arriver et que là ca tourne à 5khz.. alors est-ce vraiment bon quand même?
VRAIMENT OUI! Voici d'ailleurs un petit patchwork de M0Ds que j'arrive à jouer avec ce player 100% 1bit. Il y a un peu de tout, du bon et du moins bon. J'ai juste mis dedans les premiers morceaux qui étaient convertis sans erreurs.
Fichier(s) joint(s):
Commentaire: PWM à 11niveaux utilisant le buzzer TOx et réalisant un cycle en 5khz.
pwm_5khz.zip [185.11 Kio]
Téléchargé 824 fois
Je suis content car cet algo et nettement plus robuste que les précédents. Pratiquement tous les morceaux passent (s'ils tiennent en ram.) Il y a même un effet de bord que j'ai gardé. Les couleurs du cadre sont pour le débug[*], et étonnamment ca ne rends pas mal du tout à l'écran.
Au début on entends la porteuse à 5khz, mais comme elle est très très propre (exactement à 5khz sans aucune variation autour à part l'IRQ timer qui tourne en tache de fond), le cerveau la gomme et la considère comme un simple bruit enrivonnant type sifflement du moniteur (en tout cas c'est l'impression que ca me fait chez moi.) En travaillant un peu plus, il y a peut-être moyen de masquer cette porteuse, mais je vous livre quand même cette version toute fraiche d'aujourd'hui tellement je suis content de pouvoir sortir du buzzer un truc pas trop dégeux. Ca roule!
NOTA: Si vous n'avez pas de machine ni d'émulateur sous la main, il y a un extrait MP3 que j'ai réalisé avec ce PWM et qui est dispo (pas longtemps) sur cjoint, >>
ICI<<.
Fichier(s) joint(s):
Commentaire: Source du convertisseur et du player PWM.
source.zip [21.27 Kio]
Téléchargé 805 fois
____
[*] Il y a un code couleur par core utilisé, cad une couleur par rapport cyclique du PWM. Plus c'est lumineux, plus le rapport cyclique est proche de 1. Si on est attentif aux couleurs des lignes du cadre de l'écran on arrive à "lire" le signal audio. Avec certains fréquences, on voit un motif stationnaire sur le coté. C'est hypnotique (mais attention si vous êtes épileptique.)