Forums Casio - Actualités

Index du Forum | Actualités | La revue des projets - 95
-florian66-
Hors ligne
Rédacteur
Niveau: Aucun
Points: 2216
Défis: 19
Message
Posté le 05/03/2017 18:00

La revue des projets - 95 :

Ouverture de la Revue Des Projets NVMERO XCV !

En cette fin d'après-midi (ou début de soirée pour d'autres), retrouvons nos programmeurs en herbe pour ce rendez-vous hebdomadaire !

Cette semaine, nous avons deux articles très intéressants.
La parole est donnée donnée à Lephenixnoir qui nous présente un tout petit projet !

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 !

La parole est à Kirafi !

Kirafi a écrit :
Bonsoir !

Voilà où en est l'avancement de mon clicker .
Ah savoir, toutes les transitions son réglées, le moteur est terminé et peut gérer jusqu'à 500 pièces simultanément (gérer, pas "afficher" hein, j'ai optimisé pour que le jeu n'affiche pas les pièces qui sont cachées par d'autres ).

En gros il me reste à implémenter les formules de calculs des améliorations, l'interface de changement de monde, les ***** aussi (j'en parlerais plus tard), et tout ce qui est "dialogue" pour l'histoire .

Vidéo non contractuelle


Quelles réalisations techniques !

Voilà, cette news arrive à son terme ! Nous espérons que vous avez appréciés cette Revue.
Retrouvez-nous la semaine prochaine pour d'autres articles tout aussi somptueux !




Xavier59
En ligne
Membre de CreativeCalc
Niveau: Intermédiaire
Points: 1318
Défis: 12
Message
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
Dark storm
Hors ligne
Administrateur
Niveau: Aucun
Points: 9452
Défis: 170
Message
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 )
----------------------------------
Soutenez-les !





#YAPHPH
Lephenixnoir
En ligne
Administrateur
Niveau: Confirmé
Points: 9833
Défis: 130
Message
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.
----------------------------------
La sagesse est la prunelle de tes yeux, et la gloire l’enveloppe de ton cœur.
Kirafi
Hors ligne
Membre
Niveau: Confirmé
Points: 1993
Défis: 10
Message
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 ).
----------------------------------
iPod
Jusqu'où pourras-tu aller dans ce jeu "partie rapide" qu'est Dextris (élu Jeu Du Mois)
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)
Réussiras-tu à rendre uniforme la grille Spin (élu Jeu Du Mois)
Autres
Deviens l'amiral de la marine dans SeaRush (jeu concours) (é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)
L'adaptation du célèbre jeu de reflexion 2048 Tactile (élu Jeu Du Mois)
Remet de l'ordre dans cette mare à grenouille de délinquants dans Hopper
[/spoiler]
Dark storm
Hors ligne
Administrateur
Niveau: Aucun
Points: 9452
Défis: 170
Message
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.
----------------------------------
Soutenez-les !





#YAPHPH
-florian66-
Hors ligne
Rédacteur
Niveau: Aucun
Points: 2216
Défis: 19
Message
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
Legolas
Hors ligne
Rédacteur
Niveau: Confirmé
Points: 3225
Défis: 104
Message
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.
----------------------------------


Index du Forum | Actualités | La revue des projets - 95
Publicité et partenaires
Casio Education
Casio éducation

TI-Planet
Casiopeia
Casiopeia
CasioFan, la communauté ClassPad
CasioFan
CodeWalrus
CodeWalrus

Planète Casio v42 © créé par Neuronix et Muelsaco 2004 - 2015 | Il y a 79 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements
Rugby Manager | Jeu de basket | Jeu de handball | Jeu de tennis | Nova Raider | Réparation téléphone | Soccer Rush | Tasty Tale

Planète Casio est un site communautaire indépendant, géré bénévolement et n'est donc pas affilié à Casio | Toute reproduction de Planète Casio, même partielle, est interdite
Les fichiers, programmes et autres publications présents sur Planète Casio restent la propriété de leurs auteurs respectifs et peuvent être soumis à des licences ou des copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd