Cette semaine, nous avons deux articles très intéressants.
Lephenixnoir a écrit :Salut à tous bande de Casiofans !
La dernière rencontre IRL à Lyon, avec
Dark Storm,
Louloux,
-florian66- et moi a été particulièrement sympa et largement productive. Outre la v5, CreativeCalc et les blagues typiques sur la lenteur du Basic (je déconne, on ne les a pas faites celles-là), on a pas mal parlé de
son et comment en faire sur la calto.
Le port 3-pin que l'on connaît bien et auquel on a très envie de brancher un casque a plusieurs défauts : d'abord, seul le pin de transmission est utilisable pour envoyer du son. C'est parce que le pin de réception n'est pas vraiment supposé être manipulé par la calculatrice elle-même (mais par l'appareil qui est en bout), et du coup il a une latence très élevée. Résultat, la tension ne passe par entre 0 et 5V assez vite pour que le son puisse sortir de manière fluide. (Voyez
ce message de SimLo pour plus de détails. @-florian66- : si on utilisait le pin latent pour les basses ?)
L'autre limitation, c'est qu'un port série ça n'envoie que des bits, à savoir des 0 (0V) ou des 1 (5V). Le signal est nécessairement carré. J'imagine que vous savez que la musique 8-bits, c'est quand le signal est quantifié sur 256 valeurs différentes de tension ; et bien, là on a typiquement un son 1-bit : 2 valeurs de tension. C'est du carré, et c'est relativement moche à entendre. (Cette
vidéo de Dark Storm pourra convaincre ceux qui se posaient encore la question.)
Cette vidéo présente d'ailleurs la première des solutions à ce problème : de l'électronique. Pour ceux qui n'ont pas encore fait de filtrage ou ne connaissent pas la transformée de Fourier, sachez simplement que tout son périodique (comme une note jouée par un instrument de musique) peut être vu comme une somme de sinusoïdes oscillant à des fréquences toutes multiples d'une même fréquence dite
fondamentale (qui est celle de la note, par exemple 440 Hz pour un La 3). Les fréquences multiples (dites
harmoniques) sont plus ou moins présentes (leur amplitude est plus ou moins élevée) et peuvent être totalement absentes. Un son pauvre en harmoniques (c'est-à-dire, dont les harmoniques sont de faible amplitude voire n'existent pas), c'est typiquement le diapason. D'autres instruments comme un piano par exemple, ont des sons riches en harmoniques.
Quand vous voyez la forme d'un signal (un sinus, un triangle ou un carré), vous pouvez savoir lequel a le plus d'harmoniques : c'est en général celui qui est le plus discontinu (angles brutaux, lignes verticales, etc). Dans cet exemple, c'est dont le carré qui a le plus d'harmoniques, suivi par le triangle, puis le sinus. Ces discontinuités ont la mauvaise habitude d'être assez agressive ; c'est elles qui font que le son carré est désagréable à entendre. Pour les éliminer, Darks utilise un dispositif appelé
filtre (ici un condensateur, mais je n'en dirai pas plus) de type
passe-bas : il laisse passer les sinus de fréquences faibles et il
coupe les autres (il les bloque). Le signal carré envoyé par la calculatrice est appauvri en harmoniques car les harmoniques de fréquence élevée disparaissent. Il se trouve alors lissé (car, pour avoir des discontinuités, il faudrait qu'il ait beaucoup d'harmoniques) : c'est plus agréable à entendre ! On a pu constater ça quand il a fait marcher ce filtre en direct avec une enceinte faite main. (Voyez
cette photo !)
Le problème c'est que ce lissage ne peut pas (pour des raisons techniques) se comporter bien à la fois vis-à-vis des notes aiguës (dont la fréquence fondamentale est élevée) et des notes basses (dont la fréquence fondamentale est faible) : il gênerait toujours l'un des deux types. Pour pallier à ce problème, Darks a imaginé un système qui sépare les aiguës et les basses et les traite avec deux filtre adaptés, avant de les réunir. Avec ça, on doit pouvoir obtenir à la fois un son lissé et de jolies basses ! (Voyez le post
#148237 pour plus de détails.)
L'électronique n'est cependant pas la seule solution que l'on a abordée. Il est possible de faire des choses sans avoir à toucher au matériel, avec un simple convertisseur Jack pour brancher un casque. -florian66- avait déjà longuement travaillé sur des systèmes de synthèse de son à base de carrés suivants différents motifs pour tenter de varier la tonalité du signal (c'est le projet
Sound4Calc). J'ai implémenté des choses très similaires dans mes propres tests ; et nous avons bien dû reconnaitre que le résultat n'est pas exceptionnel : en fait le meilleur motif à l'écoute, c'est une simple alternance de 0 et de 1, et on a bien du mal à obtenir quelque chose du suffisamment différent. On sait également lire du WAV 8-bit (converti en 1-bit, puisqu'on ne peut envoyer que ça), et par moments ça rend pas trop mal, mais on ne sait pas encore exploiter ça pour faire des musiques.
On s'est alors penché sur le travail de Martin Poupe, qui prétend en effet créer du son 6-bit dans son programme
Simple Calculator Audio Player, ce qui a immédiatement attiré notre attention. Car, si on avait l'habitude de changer l'état de la sortie 440 fois par seconde pour jouer un La 3, ou 44100 fois par seconde pour jouer du WAV, on a été surpris de voir que lui la faisait changer plus de 1.8 million de fois par seconde. Autant vous dire que vous ne pouvez pas appeler à la main une fonction à cette fréquence pour exécuter cette tâche, le processeur n'arrive pas à suivre. Je n'ai personnellement jamais réussi à dépasser 96000 interruptions par seconde, et comme vous pouvez le voir on en est loin. Martin Poupe utilise du coup le module de communication série, qui s'occupe d'envoyer à une vitesse personnalisable des données qu'on lui fournit dans un buffer. Il suffit alors de lui fournir régulièrement des octets par paquets (par exemple de 50) et lui va s'occuper, de manière matérielle, d'étaler l'envoi des bits sur une durée appropriée (qui reste courte puisque c'est 1.8 Mbits/s). On n'a plus que 46000 exécutions de fonction par seconde, ce qui est gérable (éventuellement sans overclock, mais dans ce cas c'est limite).
C'est là que j'ai un peu plagié, puisque j'ai réimplémenté la méthode de Martin Poupe de manière expérimentale, empirique et relativement sale dans gint (à part ça c'était de la copie pure et simple). Je dis sale, mais lui faisait pas mieux : il utilisait la même méthode que Kucalc pour gérer ses timers et était obligé de reset la machine à la fin du programme (ah ben bravo !). Force a cependant été de constater, après quelques essais, que la méthode était sacrément efficace : on obtenait en sortie du son très joli (6-bit c'est déjà largement raisonnable) bien que le volume ait drastiquement chuté (et que la musique allait trop vite parce que j'ai codé ça comme un sagouin).
Vous vous souvenez du port latent dans la réponse de SimLo ? Ce que j'ai compris de sa méthode, c'est que Martin Poupe a utilisé précisément ça, mais avec le port « rapide ». En bourrinant à 1.8 Mbaud, il lui envoie des ordres de montée (des 1) et de descente (des 0) plus vite que le port ne peut le gérer. La tension se retrouve donc coincée à devoir monter et descendre en même temps... et du coup, elle se stabilise au milieu en faisait des petits sauts alternativement dans chaque direction. Et c'est gagné : on a réussi à obtenir en sortie du port autre chose que 0 ou 5V. En gérant bien le flux de bits qu'il envoie (ce que je n'ai pas encore analysé en détail), il arrive à ajuster différents niveaux de tension pour reproduire le signal encodé dans un fichier WAV. L'inconvénient est le volume du son : très faible. La raison en est assez simple : la tension stagne sur des valeurs moyennes et se déplace rarement voire jamais de 0 à 5 Volts d'un coup. Or la position de la membrane d'un casque est fonction de la tension : si la tension varie dans des plages serrées, la membrane se déplace peu donc le son est faible. C'est un compromis à faire !
Tout ce qu'on a évoqué est encore hautement expérimental, mais on a déjà quelques résultats sympa tant avec les solutions matérielles que logicielles. Et on espère bien qu'un jour on aura des jeux avec des OSTs géniales dans les programmes de Planète Casio (on sera peut-être les premiers :P ) et que vous pourrez écouter vos musiques favorites en cours de maths ! ... Nan, je déconne. Faut travailler les maths, c'est important.
Après cet article du travail réalisé depuis le début sur le son, nous en avons un deuxième provenant d'un habitué de la RDP !
Citer : Posté le 05/03/2017 18:20 | #
2 projets bien intéressant que je vais suivre avec beaucoup d'attention.
J'ai bien aimé les petits pic d'humour de lephé qui ont rendu son article un peu moins chiant à lire *sors*
Petite question cependant, est-ce que le format WAV est belle et bien la bonne solution ? Il est assez ancien et assez lourd ma foi. Sachant que la mémoire sur la calculatrice est assez limité ...
Sinon j'ai hâte que le clicker de Kirafi sorte
Citer : Posté le 05/03/2017 18:31 | #
J'adore les animations du jeu de Kirafi, ça a l'air sympa en effet
(Par contre, par pitié, pensez à scinder le code en plusieurs fichiers quand il devient trop grand, les trucs de 1500 lignes c'est franchement crade )
Citer : Posté le 05/03/2017 18:33 | #
Pff, il ne dépasse pas 450 et 650 lignes dans ses fichiers, c'est encore du jeu d'enfants tout ça
Bien joué Kirafi, les animations sont vraiment pas mal ! Espérons que la rémanence de la machine ne gênera pas le rendu.
Citer : Posté le 05/03/2017 18:47 | #
Bleh , j'ai 700 lignes dans le fichier "draw.c" (celui de droite), au vu des animations tu dois comprendre pourquoi .
et l'autre qu'on voit c'est "engine.c" avec 600 lignes.
Et avec ça j'ai encore 6 autres fichiers (on voit les onglets ).
Pourras-tu survivre plus de 20 secondes dans ce fameux tunnel appelé Graviton
Rebondis entre les murs en évitant les piques dans SpikeBird
Pourras-tu éviter de te faire écraser dans FallBlocs (élu Jeu Du Mois)
La version 2048 tactile amélioré au plus haut point : 2048 Delux !
Pars à la recherche des morceaux d'étoile dans Lumyce (élu Jeu Du Mois)
Citer : Posté le 05/03/2017 18:49 | #
Je sais pas, pour moi au-delà de 250-300 lignes, je préfère découper
Enfin chacun ses méthodes.
Citer : Posté le 05/03/2017 19:40 | #
En fait quand, c'est codé proprement et bien indenté, on peut faire un fichier un peu plus long
Citer : Posté le 05/03/2017 21:17 | #
Rah il utilise ST ! Utilisez Vim, c'est le meilleur !
Sinon je suis bluffé par les animations Kirafi, tu es toujours épatant pour les graphismes ! Et surtout pour les rebonds.
Pong400
PierrePaCiseaux (CP400)
Les Triangles
Menu
ASCII
Nombres premiers