Publicité

Annonce

Réduire
Aucune annonce.

Python et la musique

Réduire
X
 
  • Filtre
  • Heure
  • Afficher
Tout nettoyer
nouveaux messages

  • #76
    Concernant Music21 sur le PC i7, ça tourne à nouveau. J'ai réinstallé Music21 et réinséré le script environment que j'avais sauvegardé. Mais je n'ai toujours pas compris ce qui s'est passé avec l'importation de Music21 que je n'arrivais plus à obtenir pour faire tourner les programmes.
    Du coup, je touche du bois, mais pour l'instant c'est fonctionnel sur PC avec MuseScore et sur Mac avec Finale Notepad.

    Commentaire


    • #77
      Envoyé par floyer Voir le message
      Je n'ai pas testé, mais pour les figures intégrées à Spyder, il utilise MuseScore2... mais dès que tu cherches à l'ouvrir à l'extérieur (chord.show('musicxml') par exemple... de mémoire), il utilise Finale NotePad 2014... il sufit peut-être d'installer ces deux là.
      Cette récente réponse de floyer concernait Music21 sur le Mac. Et sa phrase "Je n'ai pas testé, mais pour les figures intégrées à Spyder, il utilise MuseScore2" m'intriguait car jusqu'alors quand je lançais show() je n'obtenais aucun affichage dans la console de iPython, y compris aussi sur PC à partir d'un programme. Or, ce matin, j'ai compris pourquoi, et ce, sur les deux plateformes.
      Donc, j'ai essayé à partir des exemples sur cette page (http://web.mit.edu/music21/doc/tutorials/examples.html) les différents petits programmes pas à pas, c'est à dire en les lançant dans la console interactive alors que d'habitude je les lançais en créant un fichier programme :

      Je copie cette ligne de programme : o=corpus.parse('josquin/laDeplorationDeLaMorteDeJohannesOckeghem')
      len(o.scores) et le résultat "5" s'affiche.
      Puis j'ajoute : o.scores[0].measures(1,13).show() et là les mesures 1 à 13 de la partition s'affiche (sur Mac et PC).
      Je recopie ces deux commandes en tant que programme :
      Code:
      from music21 import *
      o = corpus.parse('josquin/laDeplorationDeLaMorteDeJohannesOckeghem')
      len(o.scores)
      o.scores[0].measures(1, 13).show()
      Mais les 13 premières mesures de la partition ne s'affichent pas contrairement avec la "iPython console". Mais comme, l'affichage est fonctionnel avec la console, je teste de lancer uniquement "o.scores[0].measures(1, 13).show()" et là, l'extrait de la partition s'affiche. Mais c'est peut-être dû à la résurgence du premier essai "pas à pas" ?
      Du coup, pour vérifier, je complète le programme avec la suite d'exemples sur la page tutorielle soit :
      Code:
      from music21 import *
      o = corpus.parse('josquin/laDeplorationDeLaMorteDeJohannesOckeghem')
      len(o.scores)
      o.scores[0].measures(1, 13).show()
      mergedScores = o.mergeScores()
      scoreExcerpt = mergedScores.measures(127, 133)
      scoreExcerpt.show()
      reduction = scoreExcerpt.chordify()
      for c in reduction.recurse().getElementsByClass('Chord'):
          c.closedPosition(forceOctave=4, inPlace=True)
          c.annotateIntervals()
          scoreExcerpt.insert(0, reduction)
      scoreExcerpt.show()
      Je lance le programme et je n'ai toujours pas d'affichage de partition.
      Puis dans la console j'insère scoreExcerpt.show() et je lance et j'obtiens ceci :

      Donc conclusion pour ma part, pour obtenir l'affichage dans la console interactive avec show(), on lance le programme puis on lance la commande show() associée bien entendu avec sa fonction comme scoreExcerpt.show(). floyer est-ce similaire pour toi ou obtiens-tu l'affichage directement à partir du programme ?

      Sinon, ce programme est plein de ressources et il faut être patient dans son apprentissage. Mais ça vaut le coup. Je suis tombé en effectuant des recherches sur ce Pdf concernant l'analyse musicale : "Modélisation et Visualisation des Schémas d'Analyse Musicale avec Music21" :
      http://jim2015.oicrm.org/actes/JIM15_Bagan_G_et_al.pdf et qui avait été présenté aux journées d'informatique Musicale en 2015, JIM 2015 qui avaient eu lieu à Montréal.

      PS : Les actes de conférence sont disponibles sur le site, il y a notamment celui-ci "Création Dynamique de Plugiciels avec le langage JS de Reaper et la librairie CookDSP (http://jim2015.oicrm.org/actes/JIM15_Belanger_O.pdf) qui a des chances d'intéresser floyer.

      Commentaire


      • #78
        Oui, la méthode show() doit être tapé à la main dans la fenêtre IPython.

        Merci pour les liens. Des filtres accessibles par simples appels de fonctions semblent intéressant pour Reaper... Dans les scripts fournit avec Reaper, on a des filtres codés à la main : calcul de chaque échantillons à la main. Pas forcément compliqué. Un passe-bas d'ordre 2 s'écrit comme un simple filtre IIR : "outputl = mA0*inputl + mA1*mX1l + mA2*mX2l - mB1*mY1l - mB2*mY2l;" où les mX.. et mY.. sont les signaux d'entrées et de sorties avec retard les mA.. et mB.. des coeffs calculés d'après la résonance et la fréquence de coupure (le calcul de ces coeffs est un peu plus compliqué !). Mais un filtre tout fait est tout de même plus pratique.
        Dernière modification par floyer, 20 janvier 2017, 19h09.
        http://www.sinerj.org/~loyer/piano/

        It's never too late to learn to play the piano. (tip of the day)

        Côté piano : Yamaha N1X, pianos VSL Syncron et Vienna Imperial, Garritan CFX, Bechstein Digital Grand, Ivory, Galaxy et beaucoup d’autres pianos virtuels - Côté synthé : Roland A-500 Pro, Native-Instruments Komplete 13, Arturia V Collection 9, Korg Collection 3, Air Music Technology plugins, OP-X Pro II, dexed (émulateur DX7 libre), Yamaha S-YXG50 - DAW : Reaper 6, Cubase Artist 9 - Interface audio : Steinberg UR22 - Casque : AKG K-702

        Commentaire


        • #79
          Pour illustrer ce que l'on peut faire avec Python en peu de lignes, mon tout dernier programme.

          Là, il est question de prendre un fichier texte copié-collé de la doc du Korg Pa4X qui donne la liste des instruments et leurs codes et d'en faire quelque chose d'utilisable pour Cubase :

          Typiquement :

          Sound CC00 CC32 PC
          Factory/Piano
          Concert Grand 121 13 0
          Pop Grand 121 12 0
          Warm Grand 121 10 0
          Jazz Piano 121 5 0
          Rock Piano 121 8 0
          [...]
          Je copie tout dans un fichier pa4x_raw.txt en supprimant les lignes "Sound CC00 CC32 PC".

          Ensuite, je laisse travailler dessus le programme suivant (où il faut changer les noms de répertoire) :

          Code:
          # -*- coding: utf-8 -*-
          """
          Created on Sat Apr 22 10:18:04 2017
          
          @author: Frédéric
          """
          
          import re
          
          ins_filename = "C:/Users/Frédéric/Downloads/pa4x_raw.txt"
          cubase_filename = "C:/Users/Frédéric/Downloads/pa4x.txt"
          
          work = {}
          
          with open (cubase_filename,"w") as cubase_file:
              print("[cubase parse file]", file=cubase_file)
              print("[parser version 0001]", file=cubase_file)
              print("[comment]Pa4X Device by Frederic Loyer 2017-04-23", file=cubase_file)
              print("[creators first name]Frederic", file=cubase_file)
              print("[creators last name]Loyer", file=cubase_file)
              print("[device manufacturer]Korg", file=cubase_file)
              print("[device name]Pa4X", file=cubase_file)
              print("[script name]Pa4X Device", file=cubase_file)
              print("[script version]version 1.00", file=cubase_file)
              print("[define patchnames]", file=cubase_file)
              print("[mode]Pa4X Voices", file=cubase_file)
              
              with open (ins_filename) as ins_file:
          
                  patch_re = re.compile("^(.*) (\d*) (\d*) (\d*)$")
          
                  for line in ins_file.readlines():
                      patch_match = patch_re.match(line)
                      if patch_match == None:
                          print ("[g1]", line, file=cubase_file)
                      else:
                          name = patch_match.group(1)
                          msb  = patch_match.group(2)
                          lsb  = patch_match.group(3)
                          pc   = patch_match.group(4)
                          print (name, msb, lsb, pc)
                          print ("[p2, {}, {}, {}] {}".format(pc, msb,lsb,name), file=cubase_file)
              print("[end]", file=cubase_file)
          Et cela me crée un fichier pa4x.txt que je n'ai qu'à copier dans un répertoire ad'hoc (chez moi C:\Users\Frédéric\AppData\Roaming\Steinberg\Cubase LE AI Elements 8_64\Scripts\Patchnames\inactive).

          Là, il suffit de faire "Périphériques / Manageur des appareils MIDI", puis "Installer appareil"... et le Pa4X apparaît !!

          Ici, la bibliothèque magique s'appelle "re" pour "regular expression". On lui donne une description de ce que l'on souhaite chercher dans chacune des lignes, et la bibliothèque 1/ vérifie si le critère s'applique, 2/ rend accessible ensuite les fragments trouvés dans l'analyse. Le fameux "^(.*) (\d*) (\d*) (\d*)$" s'analyse avec la convention "." => n'importe quel caractère, "*" => répété, "\d" => n'importe quel chiffre, et les parenthèses indiquent ce qui doit être isolé pour être retrouvé plus tard : le group(1) utilisé plus tard retourne ce qui correspond à la première paire de parenthèses. Un formalisme est "un peu" cryptique de prime abord, mais extrêmement puissant.

          PS : Le fichier résultant met tout dans une section "PA4X Voice"... pour parfaire le fichier, il faut ajouter la ligne "[mode 10]PA4X Drumkits" juste avant les drumkits : cela isole les banques et programmes correspondant dans une section PA4X Drumkits... et rend cette section active automatiquement lorsque le canal indiqué (10) est sélectionné.
          Dernière modification par floyer, 30 avril 2017, 16h12.
          http://www.sinerj.org/~loyer/piano/

          It's never too late to learn to play the piano. (tip of the day)

          Côté piano : Yamaha N1X, pianos VSL Syncron et Vienna Imperial, Garritan CFX, Bechstein Digital Grand, Ivory, Galaxy et beaucoup d’autres pianos virtuels - Côté synthé : Roland A-500 Pro, Native-Instruments Komplete 13, Arturia V Collection 9, Korg Collection 3, Air Music Technology plugins, OP-X Pro II, dexed (émulateur DX7 libre), Yamaha S-YXG50 - DAW : Reaper 6, Cubase Artist 9 - Interface audio : Steinberg UR22 - Casque : AKG K-702

          Commentaire


          • #80
            Envoyé par deb76 Voir le message
            Faire ma page en Htlm ne me pose aucun problème, j'ai tous les outils pour le faire, même chose pour la création des PDF, mais dans ce que tu proposes comment gères-tu les corrections et les ajouts de documents (textes, codes, copies d'écran) par la personne à qui j'envoie le document ?
            Je relance le sujet... comme moyens collaboratifs, je connais GoogleDoc, Une page Wiki... ou si j'osais, git utilisé pour la gestion de conf de Linux... c'est assez technique, fait pour travailler sur un fichier ou des fichiers texte comme LaTeX. Je l'ai découvert quand quelqu'un m'a proposé de travailler ensemble pour améliorer le style de ma traduction du Fundamentals of Piano Practice. Git est un outil en ligne de commande, mais il existe plein d'interfaces graphiques qui l'utilisent : https://git-scm.com/downloads/guis. Si le but est de produire en LaTeX, cet outil pourrait être le bon, même si manifestement plus complexe. NB: Pour des besoins simples, on peut se focaliser sur quelques commandes (accessible par interface graphique a priori) : 1/ Récupérer et fusionner les mises à jour du serveur, 2/ Enregistrer localement une modification, 3/ Renvoyer les modifications vers le serveur. + 0/ une mise en place un peu complexe, mais que l'on ne fait qu'une fois. [Peut-être faudrait-il ouvrir un sujet sur 1/ les outils collaboratifs ou plus spécialement git, 2/ le sujet qui l'a motivé à savoir la rédaction d'un tutoriel sur la Set-Theory]

            EDIT: J'ai essayé quelques outils graphiques : celui livré par défaut coince lorsque l'on a des conflits (on modifie séparément chacun de son côté la même ligne). Sinon, GitHub Desktop est vraiment bien conçu pour la synchronisation. On a l'envoi et la réception en un bouton (Sync). Le seul gag, c'est qu'il n'initialise que des projets stockés sur GitHub !! Mais il impose d'être loggué sur GitHub pour initialiser un projet issu d'un serveur. (Cela ne m'a pas gêné, il peut charger un projet initialisé par le premier outil sans contraintes).
            Dernière modification par floyer, 01 mai 2017, 08h26.
            http://www.sinerj.org/~loyer/piano/

            It's never too late to learn to play the piano. (tip of the day)

            Côté piano : Yamaha N1X, pianos VSL Syncron et Vienna Imperial, Garritan CFX, Bechstein Digital Grand, Ivory, Galaxy et beaucoup d’autres pianos virtuels - Côté synthé : Roland A-500 Pro, Native-Instruments Komplete 13, Arturia V Collection 9, Korg Collection 3, Air Music Technology plugins, OP-X Pro II, dexed (émulateur DX7 libre), Yamaha S-YXG50 - DAW : Reaper 6, Cubase Artist 9 - Interface audio : Steinberg UR22 - Casque : AKG K-702

            Commentaire


            • #81
              Bonjour floyer,
              Concernant Git, oui, j'en avais entendu parler. Mais bon, perso, je reste sur Scapple qui me donne toute satisfaction et avec lequel je peux travailler sur n'importe de mes documents sur tous mes ordinateurs (les 3 iMac et deux PC) via DropBox, de plus comme j'utilise aussi son grand frère Scrivener quand je prépare un projet, je reste sur ces deux logiciels qui me donnent entière satisfaction.
              Pour revenir à Python, je testerai ton programme plus tard car si j'ai bien compris, je peux le tester en créant un fichier txt en partant de ton exemple. En même temps, je n'ai pas de Korg Pa4x.

              En revanche, j'ai une question concernant Music 21 et une recherche dans une matrice de transposition 12x12 :
              Code:
              #!/usr/bin/env python3
              # -*- coding: utf-8 -*-
              """
              Created on Thu Mar  2 12:33:03 2017
              
              
              @author: didierdebril
              """
              import music21
              print ("================== Opus 22 Webern P I R RI série originelle============================")
              
              
              print (serial.rowToMatrix([6,3,2,5,4,8,9,10,11,1,7,0]))
              
              
              print ("==================== Opus 22 Webern PI R RI série rétrograde ==========================")
              print (serial.rowToMatrix([0,7,1,11,10,9,8,4,5,2,3,6]))
              En résultat, Python/music 21 me calcule les deux matrices :
              Code:
              ================== Opus 22 Webern P I R RI série originelle============================
                0  9  8 11 10  2  3  4  5  7  1  6
                3  0 11  2  1  5  6  7  8 10  4  9
                4  1  0  3  2  6  7  8  9 11  5 10
                1 10  9  0 11  3  4  5  6  8  2  7
                2 11 10  1  0  4  5  6  7  [B]9  3[/B]  8
               10  7  6  9  8  0  1  2  3  5 11  4
                9  6  5  8  7 11  0  1  2  4 10  3
                8  5  4  7  6 10 11  0  1  3  9  2
                7  4  3  6  5  9 10 11  0  2  8  1
                5  2  1  4  3  7  8  9 10  0  6 11
               11  8  7 10  9  1  2  3  4  6  0  5
                6  3  2  5  4  8  9 10 11  1  7  0
              ==================== Opus 22 Webern PI R RI série rétrograde ==========================
                0  7  1 11 10  9  8  4  5  2  3  6
                5  0  6  4  3  2  1  9 10  7  8 11
               11  6  0 10  9  8  7  3  4  1  2  5
                1  8  2  0 11 10  9  5  6  3  4  7
                2  [B]9  [U]3[/U][/B][U]  1  0[/U] 11 10  6  7  4  5  8
                3 10  4  2  1  0 11  7  8  5  6  9
                4 11  5  3  2  1  0  8  9  6  7 10
                8  3  9  7  6  5  4  0  1 10 11  2
                7  2  8  6  5  4  3 11  0  9 10  1
               10  5 11  9  8  7  6  2  3  0  1  4
                9  4 10  8  7  6  5  1  2 11  0  3
                6  1  7  5  4  3  2 10 11  8  9  0
              Ma question porte sur la recherche à partir de deux entiers conjoints comme
              et la sélection d'une ou plusieurs séries à partir de deux entiers conjoints style (9 3) ou trois comme (3 1 0). Avec le tableur Libre Office, celui-ci pointe les deux séries qui partage la dyade 9 3, et il pointe l'unique série (rétrograde) où il y a le tricorde {3, 1, 0}. Est-ce que cette recherche serait possible avec Python ?
              Je précise que suite à une de mes demandes pour une analyse musicale sur Webern, Janusz Podrazik (le créateur d'Opusmodus) a créé plusieurs fonctions de recherche à partir de la matrice originelle :
              Code:
                 I 
               
                         0  9  8 11 10  2  3  4  5  7  1  6 
               
                    0    6  3  2  5  4  8  9 10 11  1  7  0 
                    3    9  6  5  8  7 11  0  1  2  4 10  3 
                    4   10  7  6  9  8  0  1  2  3  5 11  4 
                    1    7  4  3  6  5  9 10 11  0  2  8  1 
                    2    8  5  4  7  6 10 11  0  1  3  9  2 
               P   10    4  1  0  3  2  6  7  8  9 11  5 10   R  
                    9    3  0 11  2  1  5  6  7  8 10  4  9 
                    8    2 11 10  1  0  4  5  6  7  9  3  8 
                    7    1 10  9  0 11  3  4  5  6  8  2  7 
                    5   11  8  7 10  9  1  2  3  4  6  0  5 
                   11    5  2  1  4  3  7  8  9 10  0  6 11 
                    6    0  9  8 11 10  2  3  4  5  7  1  6 
               
                                       RI
              Ainsi, à partir de cette fonction : (12tone-analysis '(6 3 2 5 4 8 9 10 11 1 7 0) '(10 11 2 1)), j'obtiens à partir de ma requête (10 11 2 1) ceci entre autres résultats utile à l'analyse :
              ? 12tone-analysis
              Form: (P8 ((2 11 10 1) (0 4 5 6 7 9 3 8)))
              (I4 ((10 1 2 11) (0 8 7 6 5 3 9 4)))
              (RI4 ((4 9 3 5 6 7 8 0) (11 2 1 10)))
              (R8 ((8 3 9 7 6 5 4 0) (1 10 11 2)))
              Ca me permet ainsi de retrouver ce tétracorde, permuté ou non, dans la matrice à partir d'une recherche effectuée horizontalement et verticalement. Et très concrètement, ça permet de rechercher des invariants, des permutations d'un segment dans la partition, et dans les méandres sinueux des séries de Webern de pouvoir identifier les séries, y compris à partir d'un segment situé dans le milieu de la série.
              Donc, est-ce possible avec Python ?

              Commentaire


              • #82
                La fonction rowToMatrix retourne directement une chaîne de caractères. On ne peut la parcourir comme une matrice.

                DU coup, on peut rechercher la chaîne de caractère " 3 1 0" et ajouter une étoile lorsqu'on la trouve si tu veux repérer quelque chose rapidement.

                Code:
                s1= "  3  1  0"
                s2 = '*' + s2[1:]
                
                a=music21.serial.rowToMatrix([0,7,1,11,10,9,8,4,5,2,3,6])
                print(s2.join(a.split(s1)))
                Et cela affiche :

                Code:
                  0  7  1 11 10  9  8  4  5  2  3  6
                  5  0  6  4  3  2  1  9 10  7  8 11
                 11  6  0 10  9  8  7  3  4  1  2  5
                  1  8  2  0 11 10  9  5  6  3  4  7
                  2  9* 3  1  0 11 10  6  7  4  5  8
                  3 10  4  2  1  0 11  7  8  5  6  9
                  4 11  5  3  2  1  0  8  9  6  7 10
                  8  3  9  7  6  5  4  0  1 10 11  2
                  7  2  8  6  5  4  3 11  0  9 10  1
                 10  5 11  9  8  7  6  2  3  0  1  4
                  9  4 10  8  7  6  5  1  2 11  0  3
                  6  1  7  5  4  3  2 10 11  8  9  0
                S'il faut trouver les index des lignes et des colonnes, c'est un peu plus compliqué, mais cela peut se faire aussi.

                De même, j'ai mis en dur la chaîne de caractère " 3 1 0". Si tu veux la calculer d'après une suite, tu peux faire :

                Code:
                s1 = ''.join(["{:3}".format(i) for i in (3,1,0)])
                s2 = '*' + s2[1:]
                http://www.sinerj.org/~loyer/piano/

                It's never too late to learn to play the piano. (tip of the day)

                Côté piano : Yamaha N1X, pianos VSL Syncron et Vienna Imperial, Garritan CFX, Bechstein Digital Grand, Ivory, Galaxy et beaucoup d’autres pianos virtuels - Côté synthé : Roland A-500 Pro, Native-Instruments Komplete 13, Arturia V Collection 9, Korg Collection 3, Air Music Technology plugins, OP-X Pro II, dexed (émulateur DX7 libre), Yamaha S-YXG50 - DAW : Reaper 6, Cubase Artist 9 - Interface audio : Steinberg UR22 - Casque : AKG K-702

                Commentaire


                • #83
                  Envoyé par deb76 Voir le message
                  Concernant Git, oui, j'en avais entendu parler. Mais bon, perso, je reste sur Scapple qui me donne toute satisfaction et avec lequel je peux travailler sur n'importe de mes documents sur tous mes ordinateurs (les 3 iMac et deux PC) via DropBox, de plus comme j'utilise aussi son grand frère Scrivener quand je prépare un projet, je reste sur ces deux logiciels qui me donnent entière satisfaction.
                  Du coup, cela limite la capacité à travailler sur le résultat final : entre le coût (54€) de Scrivener et surtout la limitation au Mac... J'ai compris que l'un des points fort du petit frère Scapple est de préparer ce que l'on fait avec Scrivener... si - faute de Mac - on n'a pas ça, cela perd un peut de l'intérêt.

                  J'ai un peu du mal à saisir pour dropbox : j'ai déjà des problème de synchronisation entre mon iPhone et mon PC (il faut qu'avant de modifier quelque chose sur mon iPhone, j'exporte depuis mon PC, j'importe sur l'iPhone... et rebelote dans l'autre sens). Je ne vois pas comment faire du collaboratif avec, sauf avec une application qui serait capable de faire un merge comme sait le faire git. Y aurait-il cette fonction sur Scapple ?

                  L'intérêt de git est dans une certaine mesure la gratuité. Le logiciel est gratuit, le serveur est gratuit pour des projets publics (Le business model de GitHub est de faire payer les espaces pour des projets privés). Et on peut aussi installer son propre serveur privé, ce que j'ai fait (j'ai donc gratuitement mon propre espace privé). Inutile de passer par GitHub. NB: Finalement, j'ai trouvé mon point de blocage avec gui-git qui est livré avec et permet de faire les tâches quotidiennes sans passer par la ligne de commandes. Et l'autre avantage est qu'il s'adapte à n'importe quoi saisi en mode texte (programme de génération de cercle chromatique, texte LaTeX en permettant la traçabilité - on a tout l'historique - avec une gestion croisée des échanges).
                  Dernière modification par floyer, 01 mai 2017, 21h33.
                  http://www.sinerj.org/~loyer/piano/

                  It's never too late to learn to play the piano. (tip of the day)

                  Côté piano : Yamaha N1X, pianos VSL Syncron et Vienna Imperial, Garritan CFX, Bechstein Digital Grand, Ivory, Galaxy et beaucoup d’autres pianos virtuels - Côté synthé : Roland A-500 Pro, Native-Instruments Komplete 13, Arturia V Collection 9, Korg Collection 3, Air Music Technology plugins, OP-X Pro II, dexed (émulateur DX7 libre), Yamaha S-YXG50 - DAW : Reaper 6, Cubase Artist 9 - Interface audio : Steinberg UR22 - Casque : AKG K-702

                  Commentaire


                  • #84
                    Bonsoir floyer,
                    Merci beaucoup pour le code. J'ai regardé, mais bon, en résultat c'est plutôt succinct comparativement à Opusmodus. Mais encore merci pour avoir regardé.
                    Pour Dropbox, chez moi, ça fonctionne impeccablement, ça me permet d'avoir une base commune pour les dossiers que je souhaite partager. Concernant Scrivener, il y a aussi une version pour windows : http://literatureandlatte.com/scrive...p?platform=win
                    Mais je comprends que si tu n'as pas l'utilité de travailler avec, ça aucun intérêt pour toi.

                    Commentaire


                    • #85
                      Mon usage de dropbox est peut-être lié à l'usage d'une application pour iPhone où l'import n'est pas automatique. Et j'ai tendance à copier sur le PC à la main, ce qui n'est pas prévu pour. (NB: je crois avoir confondu avec OneDrive, mais m'attends à un service proche. En tout cas mon iPhone gère pareil).

                      Par contre, pour du collaboratif, je note qu'il gére la concurrence d'accès. https://www.dropbox.com/help/business/badge-collaborate mais c'est plutôt un verrouillage : on prévient l'autre qu'il n'a pas intérêt à travailler.

                      -

                      Pour le code, l'idéal serait de voir si music21 retourne à l'aide d'une autre fonction la matrice et non sa forme texte. (Ou a défaut recalculer les valeur, ce n'est peut-être pas si difficile, mais j'ai du mal à cerner la logique de tes exemples, ce qui n'aide pas : comment déduit-on les résultats attendus de la matrice?). Mais s'il y a un besoin, je pourrais coder le numéro de ligne et de colonne (on peut le faire directement sur le texte), mais je préfère commencer à le faire avec un besoin clairement défini.

                      De toute façon, tu as vu avec quelle concision on peut coder le calcul d'une forme normale...
                      Dernière modification par floyer, 01 mai 2017, 22h44.
                      http://www.sinerj.org/~loyer/piano/

                      It's never too late to learn to play the piano. (tip of the day)

                      Côté piano : Yamaha N1X, pianos VSL Syncron et Vienna Imperial, Garritan CFX, Bechstein Digital Grand, Ivory, Galaxy et beaucoup d’autres pianos virtuels - Côté synthé : Roland A-500 Pro, Native-Instruments Komplete 13, Arturia V Collection 9, Korg Collection 3, Air Music Technology plugins, OP-X Pro II, dexed (émulateur DX7 libre), Yamaha S-YXG50 - DAW : Reaper 6, Cubase Artist 9 - Interface audio : Steinberg UR22 - Casque : AKG K-702

                      Commentaire


                      • #86
                        Bonjour floyer,
                        Pour le code, l'idéal serait de voir si music21 retourne à l'aide d'une autre fonction la matrice et non sa forme texte. (Ou a défaut recalculer les valeur, ce n'est peut-être pas si difficile, mais j'ai du mal à cerner la logique de tes exemples, ce qui n'aide pas : comment déduit-on les résultats attendus de la matrice?). Mais s'il y a un besoin, je pourrais coder le numéro de ligne et de colonne (on peut le faire directement sur le texte), mais je préfère commencer à le faire avec un besoin clairement défini.
                        Je t'ai fait un PDF pour te montrer comment je travaille avec les matrices de transposition 12 x 12 P I R RI afin d'entrer dans une partition comme l'Opus 22 d'Anton Webern et d'identifier les séries écrites par Webern et surtout leur parcours sinueux dans la partition :

                        Commentaire


                        • #87
                          Le hic, c'est que tu écris :

                          Ainsi, à partir de cette fonction : (12tone-analysis '(6 3 2 5 4 8 9 10 11 1 7 0) '(10 11 2 1)), j'obtiens à partir de ma requête (10 11 2 1) ceci entre autres résultats utile à l'analyse :
                          ? 12tone-analysis
                          Form: (P8 ((2 11 10 1) (0 4 5 6 7 9 3 8)))
                          (I4 ((10 1 2 11) (0 8 7 6 5 3 9 4)))
                          (RI4 ((4 9 3 5 6 7 8 0) (11 2 1 10)))
                          (R8 ((8 3 9 7 6 5 4 0) (1 10 11 2)))
                          Je ne comprends toujours pas ce que signifie "(P8 ((2 11 10 1) (0 4 5 6 7 9 3 8)))", donc me vois mal proposer un code qui retrouve ce résultat.

                          Je note aussi que tu proposes plusieurs matrices plus haut : celle de music21/Python qui commence "par principe" par 0, et la matrice originale qui commence par la première note (6). Quelle matrice faut-il prendre ?

                          NB: Maintenant que j'ai le principe de calcul de la matrice, l'exprimer en Python est trivial. La première ligne est la version en 0, l'autre commence par la première CH (à la Janusz Podrazik) :

                          Code:
                          [ [ (12+x-y)%12 for x in l] for y in l]
                          [ [ (12+l[0]+x-y)%12 for x in l] for y in l]
                          --

                          Au delà de ce que tu souhaites voir recherché par Python, je me pose des questions sur la démarche. On part de P={1, 10, 9} et donc I={11, 2, 3}, souhaitons ajouter {0,1, 9}, préférons I pour éviter des répétitions. Que ce serait-il passé avec {4, 5, 6} éligible au deux listes? Si l'on fait une recherche de {3, 0} dans la matrice, quel sens aurait le résultat {11, 2, 3, 0,1, 9} où le 3 et le 0 sont issus de séquences de notes différentes dans la partition.
                          Dernière modification par floyer, 02 mai 2017, 21h45.
                          http://www.sinerj.org/~loyer/piano/

                          It's never too late to learn to play the piano. (tip of the day)

                          Côté piano : Yamaha N1X, pianos VSL Syncron et Vienna Imperial, Garritan CFX, Bechstein Digital Grand, Ivory, Galaxy et beaucoup d’autres pianos virtuels - Côté synthé : Roland A-500 Pro, Native-Instruments Komplete 13, Arturia V Collection 9, Korg Collection 3, Air Music Technology plugins, OP-X Pro II, dexed (émulateur DX7 libre), Yamaha S-YXG50 - DAW : Reaper 6, Cubase Artist 9 - Interface audio : Steinberg UR22 - Casque : AKG K-702

                          Commentaire


                          • #88
                            J'essaye de te répondre à partir de tes remarques :
                            Je ne comprends toujours pas ce que signifie "(P8 ((2 11 10 1) (0 4 5 6 7 9 3 8)))", donc me vois mal proposer un code qui retrouve ce résultat.
                            C'est la réponse à la recherche entreprise à partir de ma requête de recherche d'un segment éventuel (2 11 10 1) sur la base de la série 6 3 2 5 4 8 9 10 11 1 7 0 : (12tone-analysis '(6 3 2 5 4 8 9 10 11 1 7 0) '(10 11 2 1)). En fait OPMO me propose des pistes :Form: (P8 ((2 11 10 1) (0 4 5 6 7 9 3 8)))
                            (I4 ((10 1 2 11) (0 8 7 6 5 3 9 4)))
                            (RI4 ((4 9 3 5 6 7 8 0) (11 2 1 10)))
                            (R8 ((8 3 9 7 6 5 4 0) (1 10 11 2)))
                            où il a trouvé le segment recherché mais en ordre permuté dans les séries I4, RI4 et R8.

                            Je note aussi que tu proposes plusieurs matrices plus haut : celle de music21/Python qui commence "par principe" par 0, et la matrice originale qui commence par la première note (6). Quelle matrice faut-il prendre ?
                            Peu importe, car seul change l'ordre des formes, mais les séries sont les mêmes. D'ailleurs, je note que si je calcule les matrices à partir des séries (6 3 2 5 4 8 9 10 11 1 7 0) et (1 10 9 0 11 3 4 5 6 8 2 7) l'ordre sera différent, la première série étant celle avec le calcul est fait :

                            Code:
                            
                            
                            Code:
                            [I]0   9   8  11 10  2   3   4    5   7  1  6[/I]
                            [FONT=Helvetica]      [I]0 [/I]    [B] 6   3   2   5   4   8   9  10  11  1  7  0[/B] [/FONT]
                            [FONT=Helvetica]      [I]3 [/I]     9   6   5   8   7  11   0   [B]1[/B]    2  4 10  3 [/FONT]
                            [FONT=Helvetica]      [I]4 [/I]   10   7   6   9   8   0    1   [B]2[/B]    3   5 11  4 [/FONT]
                            [FONT=Helvetica]      [I]1[/I]      7   4   3   6   5   9  10  [B]11[/B]   0   2   8  1 [/FONT]
                            [FONT=Helvetica]      [I]2[/I]      8   5   4   7   6  10  11   [B]0[/B]   1   3   9  2 [/FONT]
                            [FONT=Helvetica] P   [I]10[/I]    4   1   0   3   [B]2[/B]    6   7   8   9  11   5 10        R  [/FONT]
                            [FONT=Helvetica]     [I] 9[/I]      3   0  11   2   [B]1 [/B]   5   6   7   8  10   4  9 [/FONT]
                            [FONT=Helvetica]      [I]8[/I]      [B]2  11 10   1 [/B]  [B]0[/B]    [U]4   5   6   7   9    3  8[/U]  <= R8[/FONT]
                            [FONT=Helvetica]      [I]7[/I]      [B]1  10   9   0  11   3   4   5   6   8    2  7 [/B][/FONT]
                            [FONT=Helvetica]      [I]5[/I]    11    8   7  10   9   1   2   3   4   6    0  5 [/FONT]
                            [FONT=Helvetica]     [I]11[/I]      5   2   1    4   3   7   8   9  10  0    6 11 [/FONT]
                            [FONT=Helvetica]      [I]6 [/I]     0    9   8   11 10  2   3   4    5  7    1  6 [/FONT]
                            
                            [FONT=Helvetica]                                  RI
                            [/FONT]
                            Par contre, avec (print (serial.rowToMatrix [1,10,9,0,11,3,4,5,6,8,2,7])) et print (serial.rowToMatrix([6, 3, 2, 5, 4, 8, 9, 10, 11, 1, 7, 0]))
                            on obtient le même résultat, la même matrice. Donc, pour Python, peu importe.
                            Code:
                             [FONT=Helvetica]0   9   8  11  10   2   3   4   5   7   1   6[/FONT][FONT=Helvetica] 3   0  11   2    1   5   6   7   8  10  4   9[/FONT]
                            [FONT=Helvetica] 4   1   0    3    2   6   7   8   9  11  5 10[/FONT]
                            [FONT=Helvetica][B] 1  10  9    0   11   3  4    5   6   8  2   7[/B][/FONT]
                            [FONT=Helvetica] 2  11 10   1    0    4  5    6   7   9  3   8[/FONT]
                            [FONT=Helvetica]10   7  6    9    8    0  1    2   3   5  11 4[/FONT]
                            [FONT=Helvetica]  9   6  5    8    7   11  0   1    2   4 10  3[/FONT]
                            [FONT=Helvetica]  8   5  4    7    6   10 11  0    1   3   9  2[/FONT]
                            [FONT=Helvetica]  7   4  3    6    5     9 10  11  0   2   8  1[/FONT]
                            [FONT=Helvetica]  5   2  1    4    3     7  8    9  10  0  6 11[/FONT]
                            [FONT=Helvetica]11   8  7  10    9     1  2    3    4   6  0  5[/FONT]
                            [FONT=Helvetica]  [B]6   3  2    5    4     8  9  10   11  1  7  0[/B]
                            [/FONT]
                            Au delà de ce que tu souhaites voir recherché par Python, je me pose des questions sur la démarche. On part de P={1, 10, 9} et donc I={11, 2, 3}, souhaitons ajouter {0,1, 9}, préférons I pour éviter des répétitions. Que ce serait-il passé avec {4, 5, 6} éligible au deux listes?
                            Le but de cette recherche dans mon exemple, c'est de l'effectuer à l'aveugle. J'entends par là que dans les mesures 22 et 23 il y trois séries imbriquées et 9 couples de dyades et 4 tricordes. Et à ce stade, je ne sais pas si d'une part ma recherche est posée en bon terme dans la mesure où dans le même tricorde une des notes peut appartenir à une série différente. N'oublie pas que ce que je demande c'est une aide à l'identification. Dans certain cas, le résultat indiqué me donnera la bonne direction, et dans d'autres, il va falloir que je me repère dans le dédale des notes, mais j'aurais une indication pour ma recherche.
                            Qu'entends-tu par éligible aux deux listes pour le {4, 5, 6} ? Ca m'intrigue d'ailleurs, car la recherche avec OPMO ne me donne rien. Est-ce le fait que le segment est situé dans le milieu de la série ?
                            Code:
                            [COLOR=#3E3E3E]Si l'on fait une recherche de {3, 0} dans la matrice, quel sens aurait le résultat {11, 2, [/COLOR][U]3, 0[/U][COLOR=#3E3E3E],1, 9} où le 3 et le 0 sont issus de séquences de notes différentes dans la partition.[/COLOR]
                            Je ne saisis pas ce que tu veux dire par "où le 3 et le 0 sont issus de séquences de notes dans la partition ? " D'autant que c'est le point de départ de la série renversée I (11 2 3 0 1 9 8 7 6 4 10 5). Sinon, en recherche avec (3 0) :
                            Avec (12tone-analysis '(6 3 2 5 4 8 9 10 11 1 7 0) '(3 0)), qui est une recherche élargie j'obtiens :
                            Form: (P9 ((3 0) (11 2 1 5 6 7 8 10 4 9)))
                            (I6 ((0 3) (4 1 2 10 9 8 7 5 11 6)))
                            (RI6 ((6 11 5 7 8 9 10 2 1 4) (3 0)))
                            (R9 ((9 4 10 8 7 6 5 1 2 11) (0 3)))
                            Et avec (12tone-analysis '(6 3 2 5 4 8 9 10 11 1 7 0) '(3 0) :order t) qui est une recherche plus resserrée :
                            Form: (P9 ((3 0) (11 2 1 5 6 7 8 10 4 9)))
                            Et là aussi, comportement étrange, il ne trouve pas la série (11 2 3 0 1 9 8 7 6 4 10 5).

                            En fait, dans la matrice, la recherche doit se faire en horizontale pour les séries P et I et et en verticale pour R et RI. Alors, est-ce compliqué pour l'ordinateur, pour trouver le bon code pour obtenir tous les résultats ? Je ne sais pas. Mais si j'obtiens des pistes, c'est déjà pas mal. Toutefois, je note qu'avec Libre Office si je crée 4 matrices à partir des séries P, I, R, RI, afin d'avoir une recherche horizontale, Libre Office m'affiche les résultats regroupés dans une petite fenêtre tout en soulignant les séries obtenues, ce que ne fait pas Excel a priori.
                            Dernière modification par Invité, 03 mai 2017, 01h34.

                            Commentaire


                            • #89
                              Je note que :
                              1/ la recherche de 0 3 ne retourne pas P10 ou pourtant on voit du 0 3 en milieu de ligne. Du coup, c'est une recherche différente de celle que tu proposais avec OpenOffice. Du coup, on n'a pas à chercher partoit dans la matrice.
                              2/ La recherche de 10 11 2 1 trouve - en début de ligne - la permutation 2 11 10 1... du coup, le programme doit rechercher toutes les permutations.

                              A priori, il y a 4 programmes à faire, mais je suppose qu'on peut n'en faire qu'un est l'utiliser :
                              P/ avec la séquence cherchée,
                              I/ avec son inversion : le I4 (10 1 2 11) aurait pu être déduit d'une recherche (-2 -1 -10 -1) qui retourne P8 que l'on a plus qu'à inverse (4 = -8)

                              Pour les R et RI joker, je ne sais ce qu'afficherait une recherche de 11 5 10 que l'on trouve en fin de tableau et non en début... faut-il chercher uniquement en début ? Ou aussi à la fin ? D'ailleurs, je suis surpris par "(R8 ((8 3 9 7 6 5 4 0) (1 10 11 2)))" qui n'est qu'une présentation de la même occurrence que P8. Quelle plus-value ?
                              Dernière modification par floyer, 03 mai 2017, 08h06.
                              http://www.sinerj.org/~loyer/piano/

                              It's never too late to learn to play the piano. (tip of the day)

                              Côté piano : Yamaha N1X, pianos VSL Syncron et Vienna Imperial, Garritan CFX, Bechstein Digital Grand, Ivory, Galaxy et beaucoup d’autres pianos virtuels - Côté synthé : Roland A-500 Pro, Native-Instruments Komplete 13, Arturia V Collection 9, Korg Collection 3, Air Music Technology plugins, OP-X Pro II, dexed (émulateur DX7 libre), Yamaha S-YXG50 - DAW : Reaper 6, Cubase Artist 9 - Interface audio : Steinberg UR22 - Casque : AKG K-702

                              Commentaire


                              • #90
                                Bonjour floyer,

                                Bon, déjà, en tout premier lieu, ma question concernant les recherches avec Python était avant tout informative, à savoir si Python pouvait effectuer des recherches dans une seule et unique matrice, en verticale et en horizontale comme peut le faire partiellement Opusmodus, mais je ne voudrais abuser de ton temps, dans la mesure où entre OPMO, Libre Office et Open Music, avec lequel je me suis créé des outils d'aide pour l'analyse (tout comme avec OPMO) pour décortiquer des partitions dodécaphoniques ou sérielles.

                                Je note que :
                                1/ la recherche de 0 3 ne retourne pas P10 ou pourtant on voit du 0 3 en milieu de ligne. Du coup, c'est une recherche différente de celle que tu proposais avec OpenOffice. Du coup, on n'a pas à chercher partoit dans la matrice
                                Ah, non, pas d'accord, si tu as dans la partition plusieurs séries dérivées qui sont écrites dans la partition et qui empruntent des chemins sinueux. Sans la matrice, on ne peut pas se repérer pour déterminer à quelles formes (P I R RI) elles appartiennent. En clair, si je n'obtiens pas de résultats avec la recherche "computationnelle", j'effectuerai ma recherche visuellement à partir des quatre matrices afin d'avoir une lecture horizontale, et plus simple pour se repérer.


                                Concernant les recherches avec 0 3, j'ai effectué deux recherches conjointes, celle avec OPMO qui me donne comme résultats complets obtenus avec la fonction recherche : "(12tone-analysis '(6 3 2 5 4 8 9 10 11 1 7 0) '(3 0)) "
                                "? 12tone-analysisOriginal Prime Order: (6 3 2 5 4 8 9 10 11 1 7 0)
                                Pitch Row: (fs4 eb4 d4 f4 e4 gs4 a4 bb4 b4 cs4 g4 c4)
                                Set: (3 0)
                                Pitch Set: (eb4 c4)
                                Complement: (1 2 4 5 6 7 8 9 10 11)
                                Pitch Complement: (cs4 d4 e4 f4 fs4 g4 gs4 a4 bb4 b4)
                                PCS: (2-3 10-3)
                                Form: (P9 ((3 0) (11 2 1 5 6 7 8 10 4 9)))
                                (I6 ((0 3) (4 1 2 10 9 8 7 5 11 6)))
                                (RI6 ((6 11 5 7 8 9 10 2 1 4) (3 0)))
                                (R9 ((9 4 10 8 7 6 5 1 2 11) (0 3)))"
                                et je les ai comparés avec la recherche avec Libre Office. Ce qui permet de voir en encadré en vert les résultats communs, en encadré bleu, les résultats complémentaires obtenus par Libre Office et en encadré rouge ce que ni OPMO ni Libre Office n'ont pas trouvé. Outre la série rétrograde R 10 5 11 9 8 7 6 2 3 0 1 4, tout comme OPMO, Lib.Office ne trouve pas la série renversée I : 11 2 3 0 1 9 8 7 6 4 10 5. Ca m'intrigue, car là je ne vois pas où se trouve la difficulté dans le positionnement du segment.
                                2/ La recherche de 10 11 2 1 trouve - en début de ligne - la permutation 2 11 10 1... du coup, le programme doit rechercher toutes les permutations.
                                Oui, c'est pour ça que j'indiquais dans la réponse précédente, des résultats permutés.
                                A priori, il y a 4 programmes à faire, mais je suppose qu'on peut n'en faire qu'un est l'utiliser :
                                P/ avec la séquence cherchée,
                                I/ avec son inversion : le I4 (10 1 2 11) aurait pu être déduit d'une recherche (-2 -1 -10 -1) qui retourne P8 que l'on a plus qu'à inverse (4 = -8)
                                C'est une possibilité mais que je ne retiens pas pour ma part car cette notation inversée je l'utilise dans le cadre d'une analyse de la structure intervallique que j'effectue d'une part avec le nombre exact de demi-tons. Ainsi, si j'analyse la série originelle de l'Opus 22 :
                                gb3 eb3 d3 f3 e4 g#3 a3 bb2 b3 c#3 g3 c4 => -3 -1 3 11 - 8 1 -11 13 -10 6 5 et en notation modulo 12 =>
                                -3 - 1 3 -1 4 1 1 1 -10 6 -7.
                                Pour les R et RI joker, je ne sais ce qu'afficherait une recherche de 11 5 10 que l'on trouve en fin de tableau et non en début... faut-il chercher uniquement en début ? Ou aussi à la fin ? D'ailleurs, je suis surpris par "(R8 ((8 3 9 7 6 5 4 0) (1 10 11 2)))" qui n'est qu'une présentation de la même occurrence que P8. Quelle plus-value ?
                                Pour 11 5 10, j'obtiens avec OPMO :
                                "Form: (R10 ((10 5 11 9 8 7 6 2 3) (0 1 4))) (P10 ((4 1 0) (3 2 6 7 8 9 11 5 10)))
                                Et Libre Office ne pointe que 4 1 0 3 2 6 7 8 9 11 5 10.
                                Pour R8 ((8 3 9 7 6 5 4 0) (1 10 11 2))), c'est le rétrograde de 2 11 10 1 0 4 5 6 7 9 3 8, et qu'on lit de droite à gauche. Pour le renversement, I, on lit dans la colonne de haut en bas et pour le rétrograde du renversement RI dans la colonne de bas en haut. Pour la lecture des matrices, tu as cette matrice de l'Opus 33 de Schoenberg qui est très bien expliqué, avec notamment la précision sur les nombres en demi-tons situés en haut et à gauche de la matrice "The numbers on the left and top refer to the distance
                                in half steps of the first note in the row from Bb (the startingpitch in the "prime" row). For example, F is seven half stepsup from Bb. D# is five half steps up from Bb. "
                                Concernant la plus value, c'est la possibilité d'avoir un réservoir de séries dans un ordre différent pour l'écriture et qui permet notamment à Webern d'écrire des contrepoints, des canons multiples, imbriqués, tel un kaléidoscope.

                                Commentaire

                                Chargement...
                                X