Comment nous avons joué de la musique avec les réseaux de neurones v 2.0

Salut, Habr.

Cet article explique comment nous avons introduit les réseaux de neurones dans la vraie vie. Si vous aimez la robotique appliquée et l'ingénierie, ou comme les neurones, ou si vous faites clignoter une LED sur Arduin, ce sera intéressant. Cependant, c'est une histoire sur la façon d'assembler de nombreux composants et technologies différents dans un seul ensemble et d'en faire une idée. Détails sous la coupe.

image

Il y a un an et demi, nous avons réalisé un projet où nous avons utilisé des réseaux de neurones récurrents pour générer de la musique. Il décrit comment c'était. Cette année, Eesti Kontsert (l'institution cible, le plus grand organisateur de spectacles du pays) a organisé une série de concerts "Technologie et Musique" et nous avons été invités à faire une performance au sein de cette série. Nous sommes le groupe MODULSHTEIN (Alexander Zhedelev, Marten Altrov et Alexei Seminikhin) , ainsi que Alexander Potuzhny, qui était engagé dans l'ingénierie mécanique, et moi, Alexander Tavgen, architecte logiciel de Playtech. Si dans le dernier projet, tout s'est passé à l'intérieur d'une machine et que les signaux des modèles ont été affichés sur des échantillons, alors l'idée de ce projet est de faire sortir les signaux et de les connecter à un instrument en direct. Et comme nous utilisons des modèles pour générer du rythme, l'instrument sur lequel la machine jouera est un tambour.

Le tambour que nous utiliserons fait partie des accessoires laissés par la présentation audiovisuelle IDEM .

image

Une petite introduction


La musique, comme la langue, en particulier la langue parlée, a une structure temporaire. C'est le rythme, les intervalles, la dynamique. Si nous simulons une séquence musicale comme un flux de certains symboles, alors pour simuler cette structure temporelle, les réseaux de neurones récurrents conviennent. Le célèbre article d' Andrej Karpathy est une excellente introduction aux principes qui sous-tendent les réseaux de neurones récurrents, et il existe de bons exemples. Quel est le seul réseau formé au code source Linux? Ou un modèle formé aux discours de Donald Trump.

Le protocole MIDI est idéal pour représenter la musique comme un flux de caractères. Ainsi, nous devons convertir les signaux MIDI en entrée pour les modèles et transformer la sortie du modèle en MIDI. Et puis le projet Magenta de Google vient à la rescousse, annoncé en 2016.

Essentiellement, Magenta fournit une interface MIDI pour les modèles TensorFlow. Les ports MIDI virtuels sont créés pour la réponse aux appels, en gros - entrée et sortie. Vous pouvez exécuter plusieurs ports parallèles. Vous pouvez connecter un modèle TensorFlow à chaque paire de ports. Le soi-disant fichier bundle est le point de contrôle de la formation et les métadonnées du graphique de TensorFlow. Vous pouvez donc décrire brièvement le processus d'interaction.

image

Je l'ai décrit en détail ici .

Mais si dans le projet précédent, nous avons affiché des signaux MIDI provenant des modèles vers les échantillons, cette fois-ci, nous devons les faire sortir et les connecter aux moteurs. Autrement dit, tout peut être représenté en quelque sorte comme ceci: Tensorflow-Magenta-MIDI-Serial-Microcontroller-Actuators. Les trois premières étapes ont déjà été franchies et toute l'attention s'est portée sur les trois derniers liens.

Avant de penser à la façon de convertir et d'envoyer des signaux de la machine, vous devez sélectionner un microcontrôleur qui recevra les signaux et contrôlera les actionneurs. L'option la plus simple est de prendre une plate-forme compatible Arduino, bien que tout contrôleur basé sur ATMega soit adapté.

Arduino peut lire Serial via USB, et la tâche consistait à convertir les signaux MIDI en protocole de port série. Il existe un projet ouvert hairless-midiserial projectgus.imtqy.com/hairless-midiserial , qui vous permet de convertir le MIDI en périphériques série, à la fois pour l'entrée et la sortie. La commodité du MIDI dans son ensemble est que vous pouvez contrôler et connecter de manière très flexible différents appareils.

image

Eh bien, alors vous devez obtenir les outils et commencer à essayer diverses options de conception.

Le premier prototype a dû être réalisé afin d'évaluer les éventuels retards et problèmes de synchronisation.

Le signal est allé à Arduino, où, selon la hauteur des notes, il a été affiché sur différentes sorties. Pour les tests, j'ai mis en place un circuit classique basé sur MOSFET. Le MOSFET est à peu près un transistor qui vous permet de contrôler les courants élevés; donnant un signal de commande, vous pouvez ouvrir et fermer le transistor.

image

Eh bien, quel genre de projet Arduino est sans LED clignotante. J'ai réglé la LED de sorte qu'en cas de problème, je comprenne où ils se trouvent, si le signal de l'Arduino va à l'entrée MOSFET. En général, ça ressemblait à ça, les chats ont vraiment aimé.



En général, il n'y a pas eu de retards importants ni de problèmes de connexion, mais les problèmes d'un plan différent ont été clarifiés. Les solénoïdes ne sont pas adaptés pour extraire le son de notre gros tambour, ils n'ont pas la force de l'impact. Les solénoïdes 5 volts eux-mêmes. Il a été décidé de rechercher quelque chose de plus puissant. Le prochain choix est les moteurs utilisés dans les serrures de voiture. Ils sont assez puissants, avec une bonne traction et bon marché.

image

Mais il y a un point. Le moteur de la porte de la voiture a non seulement une course avant, mais aussi une course arrière. Pour les battre, vous devez effectuer un mouvement avant-pause-arrière très rapide, mais pour l'avant-arrière, vous ne pouvez pas faire un seul MOSFET, car vous devez changer la direction actuelle du moteur ( pont en H ) afin qu'il se déplace dans les deux directions, alors j'ai acheté Blindage moteur pour Arduino, compatible avec Adafruit. Ce type, uniquement sur une puce.

image

Voici la version déjà avec un pont moteur et un moteur d'une porte de voiture.


Et maintenant sur la mécanique générale


Les LED clignotantes sur Arduino sont une chose, mais nous avons dû construire un système qui jouerait l'heure du concert. Et voici les difficultés.

  1. Rigidité d'un dessin. Les moteurs sont suffisamment puissants et les supports sur lesquels ils doivent être montés doivent résister aux vibrations pendant une heure.


    image

    Nous avons essayé 3 ou 4 options de conception jusqu'à ce que nous en trouvions une acceptable. L'attelage avec le bâton ne doit pas être rigide, car le bâton doit avoir un rebond élastique du tambour, et un attelage rigide dégradera considérablement le son. Nous avons utilisé des chapes de construction.
  2. La mécanique de l'impact lui-même. Il consistait en un mouvement d'avance rapide, une pause et un mouvement de recul. Mais quelle doit être la taille des intervalles de ce mouvement? Cela ne peut être déterminé que de manière empirique. De plus, les intervalles dépendaient du lieu de fixation du bâton, des notes affichées. Nous avons déterminé les intervalles par essais et erreurs. Pour être clair, la partie du code Arduino responsable des coups ressemblait à ceci.

    image
  3. Tous les moteurs sont différents. Les moteurs eux-mêmes ont un entraînement mécanique et produisent donc un bruit assez perceptible. Mais le bruit devient beaucoup plus fort, si le moteur s'écarte de l'axe de l'impact, ce qui augmente le risque de panne moteur. Compte tenu des vibrations et des forces d'impact, nous nous sommes à nouveau appuyés sur la rigidité de la structure. Alexander Potuzhny a fait beaucoup ici pour améliorer les appareils.
  4. Réinitialisez le contrôleur contre les interférences parasites. Comme il y aura de nombreux appareils, des câbles autour et les moteurs eux-mêmes émettent du bruit.

Étant donné que les moteurs sont entraînés par la musique, il serait possible d'en faire des jouets sexuels. Il a mis en scène sa musique préférée, comme la Marche impériale, et ...

Montage et répétition


L'assemblée finale et les répétitions ont été jouées au studio de musique du Théâtre russe d'Estonie.

image



Le problème avec les répétitions avec un réseau de neurones est également que le réseau lui-même n'est pas déterministe. L'interaction se déroule dans un mode de réponse aux appels, et chaque fois que les réponses du réseau seront différentes - il est donc impossible de répéter la version finale.

Concept musical


Pour la performance, nous avons également préparé une vidéo. Initialement, nous avons pensé contrôler le flux vidéo via MIDI également, pour lire les superpositions et réduire la vidéo générée par GAN - mais nous n'avons pas réussi à créer un environnement pour la deuxième machine et à nous connecter aux modèles. Par conséquent, la vidéo de chaque partie de la performance a été pré-rendue; GAN et la gestion des superpositions ont été utilisées. Tout synchronisé avec le midi_clock principal.


Pour le live, j'ai utilisé VDMX5, à travers lequel le flux vidéo est allé.

image

Peu avant la représentation, ils ont fait une présentation à la télévision.


Et c'était très inhabituel de voir des affiches dans la salle de concert d'Estonie (c'est comme le Théâtre Bolchoï de Moscou).

image

image

Performances


La représentation elle-même a eu lieu sur la scène de Sõltumatu Tantsu Lava, c'est une petite salle (un peu plus de 100 personnes) dans le quartier créatif de Telliskivi dans le complexe de Vaba Lava. L'installation et la configuration de tout l'équipement ont pris plus de 4 heures. Entièrement connecté déjà presque la nuit.


Et déjà sans lumière.


La salle était pleine, malgré la publicité tardive. J'étais sur le côté de la scène et contrôlais le flux vidéo. Le concert lui-même a été un grand succès - comment le modèle a fonctionné, comment le son et la vidéo se sont déroulés. Le public a dit qu'ils avaient été envoyés au voyage quelque part en 10 à 15 minutes. :) Tout s'est avéré très atmosphérique.

image

image

image

image


image

www.Audiokinetica.com

Aleksandr Tavgen - Solution informatique, développement logiciel
Aleksandr Potužnoi - support technique

Modulshtein:
www.Modulshtein.com

Sur Spotify

Aleksandr Žedeljov alias FAERSHTEIN - guitare, Ableton, synthé analogique
Marten Altrov - clarinette, clarinette basse
Aleksei Semenihhin alias DJ Bandit - Fx, Samples, Scratches

Source: https://habr.com/ru/post/fr463237/


All Articles