ELEPHANT technologies, l’ESN locale et à taille humaine spécialisée sur 2 métiers : le développement et le pilotage autour de 4 expertises : hardware, embarqué, software et web

  

Aujourd'hui, retrouvez Anne-Camille notre elephantgénieur développeur fullstack (java, angular) qui nous parle d’une conférence qu’elle a particulièrement apprécié au Devfest : la présentation de Tommi Nieminen de Device Orchestra et son concept d'allier musique et technologies : https://www.youtube.com/@DeviceOrchestra

  

Let’s go ! 

 

 

Comment générer de la musique à partir d’une partition musicale ?

 

 

Pour les humains, la reproduction d’une musique passe par la lecture d’une suite de notes sur une partition, qui correspond à une note, et donc un son particulier.

https://www.youtube.com/c/DeviceOrchestra

 

L’idée de Device Orchestra est de produire de la musique à partir de plusieurs appareils et d’une partition musicale. On voit donc plusieurs problématiques à résoudre :

 

Comment interagir avec un appareil pour générer un son ?

Une partition est à destination des humains, or une machine n’est pas capable de la lire, il faut donc un langage compréhensible. L’objectif n’est pas de détailler ce facteur ici, mais nous ne communiquons pas de la même façon entre humains et appareils électroniques, il est donc important de trouver un moyen de fournir l’information à la machine. Le premier “pas” est de traduire la partition de musique en xml, langage de balisage extensible. MusicXML semble avoir résolu cette question, vous pouvez retrouver plus de détails dans l’article suivant : https://www.partitionnumerique.com/technos/musicxml/ .

Source : MusicXML

 

 

Quel langage choisir pour interagir avec un appareil ?

 

Choix de Device Orchestra :

Une fois le contenu en XML généré, il ne reste plus qu’à trouver comment l’exploiter. La solution trouvée par Device Orchestra est la génération d’un code Java, puis le traduire en C++ exploité par Arduino. C’était un choix personnel de la part de Tommi Nieminen, grâce son expérience et son affinité avec les langages.

Actuellement, les notes dans le code C++ sont écrites sous forme de nombres, qui représentent la fréquence en Hz, la durée des notes en millisecondes, etc. Java permet de lire le fichier MusicXML, où les notes sont écrites sous forme de texte, et Java permet également de combiner les informations pour connaître la fréquence et la durée d'une note.

 

Réflexion personnelle :

Mon expérience personnelle pencherait plutôt pour de la génération de code Python, plus propice pour de la gestion de calcul. Ce qui permettrait l’accès à des bibliothèques favorisant la création d’IA (intelligence artificielle), et une nouvelle vision pour la suite du produit. La librairie py2duino, développée par l'équipe Démosciences, permet également de communiquer en python avec une carte Arduino, ce qui aurait comme avantage d’éviter des “allers retours” entre langages.

Quel que soit le langage choisi il y a au moins deux étapes : l’interprétation du code XML et la traduction « note » --> « état machine » pour chaque bloc de la partition.

 

 

Quel nano-utilisateur (ou calculateur) utiliser pour interagir entre le code produit et la communication à l’appareil ?

 

Comme indiqué ci-dessous, Device Orchestra utilise Arduino, une plateforme de prototypage électronique open-source qui permet aux utilisateurs de créer des objets électroniques interactifs. Mais entre Arduino et Raspberry PI, lequel choisir ?

Source : Arduino, Raspberry PI

 

Arduino a des ressources matérielles limitées, c’est-à-dire moins de puissance de calcul et de mémoire. Ce qui rend donc plus difficile l'exécution de code lorsqu’il est plus compliqué. Actuellement, Arduino est suffisant car il permet l'exécution du code actuel, qui est plutôt « simple ». Pour faire grandir Device Orchestra, par exemple en faisant jouer de multiples appareils simultanément, il est possible d’ajouter des fonctionnalités telles que l'écoute MIDI ou bien l'analyse des entrées de l'accéléromètre.

 

La question se pose quant à l’utilisation d’une Raspberry PI, beaucoup plus performante. Celle-ci permet également de télécharger des fichiers rapidement et facilement sans câbles, ainsi qu’un contrôle à distance simplifié.

 

 

Comment choisir l’appareil pour produire un son ?

 

En fonction de votre choix, vous avez désormais un code capable de générer un son à partir d’une partition et un contrôleur qui communique avec un appareil. Un appareil produit un « son » qui est lié aux tours moteurs, aux frottements, aux engrenages, etc. Les « sons » sont différents en fonction de l’appareil choisi, qu’il s’agisse d’un épilateur, d’une brosse à dents électrique, etc. Le contrôleur va donc, en fonction du code, envoyer une information.

 

Avec un driver « microstepping » tel que l'A4988, celui-ci communique avec le moteur en faisant le lien entre ce dernier et le code.

⇒ ENABLE : entrée de validation, active à l'état logique haut permettant de commander l'alimentation de la carte (sinon le moteur reste maintenu dans un pas donné par les bobines et consomme du courant).

⇒ DIR : permet de spécifier le sens de rotation du moteur.

⇒ STEP : permet de spécifier le nombre de pas ou micro-pas à effectuer (le déplacement effectif du moteur dépendra du mode choisi : pas entier, demi-pas, etc.)

⇒ MS1 à MS3 permettent de choisir le mode de fonctionnement du moteur.

 

(Source fonctionnement A4988 :

https://eduscol.education.fr/sti/sites/eduscol.education.fr.sti/files/ressources/pedagogiques/7572/7572-modelisation-dun-moteur-pas-pas-v2.pdf )

 

On peut ainsi faire tourner le moteur dans un certain sens et à une certaine vitesse, attention cependant à bien identifier le type de moteur (moteurs asynchrones, moteurs synchrones, etc.)

 

 


🐘 Nous remercions Anne-Camille pour son article et nous vous laissons découvrir le travail de Tommi, qui est venu jusqu’à Nantes pour participer au KeyNote du Devfest 2022 ! Le lien juste ici : https://www.youtube.com/watch?v=mO9qbVavCuQ