Du coup, je touche du bois, mais pour l'instant c'est fonctionnel sur PC avec MuseScore et sur Mac avec Finale Notepad.
Annonce
Réduire
Aucune annonce.
Python et la musique
Réduire
X
-
Invité
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.
-
Invité
Envoyé par floyer Voir le messageJe 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à.
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()
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()
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
-
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
-
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
[...]
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)
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
-
Envoyé par deb76 Voir le messageFaire 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 ?
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
-
Invité
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]))
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
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
? 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
-
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)))
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
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
-
Envoyé par deb76 Voir le messageConcernant 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.
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
-
Invité
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
-
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
-
Invité
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.
Commentaire
-
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 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
-
Invité
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.
(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 ?
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]
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?
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]
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
-
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
-
Invité
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
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.
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)
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 ?
"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
Commentaire