URL: https://linuxfr.org/forums/programmation-python/posts/creation-musicale-en-python Title: Création musicale en python Authors: Aluminium95 Date: 2014年06月13日T19:46:49+02:00 License: CC By-SA Tags: Score: 4 Bonjour, Dans le cadre d'un Travail Personnel Encadré de prépa scientifique, un de mes camarades a pour projet de faire de la musique (plus précisément des solos) générés par ordinateur. Pour le moment, l'algorithme est plutôt simpliste, bien que fonctionnel. Il utilise une table de transitions avec des probabilités de transition entre chaque note, et génère une séquence. Après avoir trouvé les notes il ajoute par dessus une rythmique (pas toujours très adaptée) puis l'écrit sous format lilypond afin de permettre de créer du MIDI ou d'imprimer la partition en pdf. Plusieurs solutions sont envisagées pour améliorer la qualité de la musique générée : * Générer des motifs par bloc, puis assembler ceux-ci de manière à avoir un tout « cohérent », mais cela demande de beaucoup plus intervenir « manuellement » dans la génération * Générer un rythme de manière procédurale, puis par dessus calquer des notes, ce qui permettrait d'ajouter dans les probabilités d'apparition, le temps durant lequel la note sera jouée * Utiliser une approche radicalement différente : * Un algorithme de type génétique (sur des séquences de notes) pour trouver une partition qui répond à des critères « esthétiques », mais cela centrerait tout le travail sur la génération de la fonction de fitness (ce qui n'est peut être pas souhaitable pour une présentation ultérieure du projet) * Générer au fur et à mesure toutes les possibilités de partition à chaque application de fonction. Pour limiter la taille des listes (qui explose très vite) on supprimerait au fur et à mesure les partitions impossibles ou jugées trop mauvaises. Je me rend compte que ce que je marque en dernier point n'est pas tres clair, mais un exemple devrait arranger cela : ```python p = [ ["la", "si", "do"], ["fa","la","sol"] ] def mafonction (partition): return [ [ "do", "re" ] , [ "mi", "fa" ] ] q = applique (mafonction, p) q == [ ["la", "si", "do", "do", "re"], ["fa","la","sol", "do", "re"], ["la", "si", "do", "mi", "fa"], ["fa","la","sol", "mi", "fa"] ] ``` Je demande à tout hasard si quelqu'un aurait un jour fait quelque chose de similaire, lu un article qui pourrait aider, ou aurait des idées et des méthodes miraculeuses ! Merci d'avance PS : le code est écrit en python pour des raisons de simplicité, et parce que c'est le langage choisi pour « l'info pour tous » en prépa scientifique.

AltStyle によって変換されたページ (->オリジナル) /