Page 10 sur 10 PremièrePremière ... 678910
Affichage des résultats 91 à 100 sur 100

Discussion: Python et la musique

  1. #91
    rAKonteur Avatar de floyer
    Date d'inscription
    avril 2016
    Localisation
    Montigny le Bretonneux
    Messages
    1 119
    Citation Envoyé par deb76 Voir le message
    Ah, non, pas d'accord,
    Je ne comprends pas ton désaccord. Je te fais part d'un écart entre 2 modes de recherche : celui d'OpenOffice qui cherche partout, et d'OPMO qui ne recherche qu'au début (et peut-être à la fin), et tu me réponds avec une illustration où avec les codes de couleur tu mets en évidence cet écart ! (OPMO ne trouve que les verts). [Fait gaffe avec OpenOffice... en cherchant 0 3, tu trouves des 10 3 !!]

    La recherche d'OPMO est relativement simple :

    Code:
    sequence = [6, 3, 2, 5, 4, 8, 9, 10, 11, 1, 7, 0]
    pattern = [10, 11, 2, 1]
    
    pattern.sort()
    
    def norm(n):
        return n%12
    
    def neg(n):
        return (12-n)%12
    
    def analyse_p(seq,pat):
        pat.sort()
        for i in range(12):
            l1 = [norm(i+j) for j in seq]
            if sorted(l1[:len(pat)]) == pat:
                yield(i, l1[:len(pat)], l1[len(pat):])
            
    for i,l1, l2 in analyse_p(sequence,pattern):
        print ("P",i,l1,l2)
    
    for i,l1, l2 in analyse_p(list(map(neg,sequence)), pattern)):
        print ("I",i,l1,l2)
    Cela écrit :

    Code:
    P 8 [2, 11, 10, 1] [0, 4, 5, 6, 7, 9, 3, 8]
    I 4 [10, 1, 2, 11] [0, 8, 7, 6, 5, 3, 9, 4]
    Ce qui est le résultat d'OPMO. (A l'exception des R et RI, mais dans l'exemple montré, il ne s'agit que des mêmes résultats écrit à l'envers. (On pourrait utiliser l1.reverse() pour inverser une liste est afficher le résultat, mais il y a peu de plus-value).

    Le résultat (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))) me surprend : tu recherches 11 5 10, et cela isole 0 1 4. J'aurais proposé (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))) qui pour le coup reprend la logique.

    Ceci dit, en Python extraire les n derniers éléments s'écrit sequence[-n:] au lieu de sequence[:n]... adapter mon programme pour chercher une chaîne à la fin ne présenterait aucun problème.

    Adapter le programme pour chercher partout au milieu (à la OpenOffice) nécessiterait d'ajouter une boucle pour itérer au milieu, mais n'ajouterait que cette complexité.

    Ma question sur la plus-value résulte d'une comparaison entre (P9 ((3 0) (11 2 1 5 6 7 8 10 4 9))) et (R9 ((9 4 10 8 7 6 5 1 2 11) (0 3))) qui ne sont que deux présentations d'un même résultat. (L'un est la rédaction à l'envers de l'autre). C'est différent des P et I qui pour le coup sont deux résultats différents.

    --

    PS : Tu remarques que je n'essaye pas de trouver toutes les permutations (ce serait trop compliqué), mais cherche une chaine au début en comparant les versions triées. Tu noteras des notations très puissantes en Python. La notation [ f(x) for x in liste ] itère x dans une liste et retourne la liste des f(x). Plus puissant encore : la fonction "analyse_p" retourne plusieurs résultats à l'aide du mot clé yield. Cette fonction agit un peu comme return pour retourner un résultat mais n'arrête pas la fonction. AU final lorsque l'on appelle la fonction, on obtient un objet itérable (un peu comme une liste) avec tous les résultats trouvés. C'est plus élégant que d'initier un "result = []", d'ajouter des résultats au fil de l'eau "result.append(x)" et retourner le résultat à la fin "return result". Pour des grands résultats voire inifini, yield n'alloue pas de liste importante en mémoire, mais s'assure que la fonction appelante récupère les résultats au fil de l'eau.
    Dernière modification par floyer ; 03/05/2017 à 23h03.
    http://www.sinerj.org/~loyer/piano/
    It's never too late to learn to play the piano. (tip of the day)
    Avatar d'après une photo de David Maiolo (Creative Commons BY-SA 3.0)
    Yamaha CLP150, Reaper, Garritan CFX, plein d'autres pianos virtuels

  2. #92
    rAKonteur Avatar de Alain44
    Date d'inscription
    mars 2015
    Localisation
    Loire Atlantique
    Messages
    2 137
    Salut à vous deux,

    Développement passionnant, mais je ne suis pas tout (je le suis plutôt en tant que "curieux").

    Je remarque quelques soucis mineurs de compréhension …
    qui cependant empêchent un codage effectif.

    Courage.

    C'était juste pour dire que "certains vous lisent avec intérêt", même s'ils ne participent pas au sujet.
    KORG PA900, Nord Piano 2 HP, FocusRite Scarlett 6i6, 2xMonitors CM30, Lucas Nano 300
    Cheminer ou arriver: quel est mon but ? La musique est un chemin infini...

  3. #93
    rAKonteur Avatar de floyer
    Date d'inscription
    avril 2016
    Localisation
    Montigny le Bretonneux
    Messages
    1 119
    AU fait, je trouvais compliqué de sortir toutes les permutations d'une liste.

    Cela se fait en 9 lignes :

    Code:
    def toutes_permutations(l):
        if l == []:
            yield []
        for i in range(len(l)):
            l1 = l[:i]
            x = l[i]
            l2= l[i+1:]
            for permut in toutes_permutations(l1+l2):
                yield [x] + permut
    Ainsi :

    Code:
    In [119]: list(toutes_permutations( [4,8,9] ))
    Out[119]: [[4, 8, 9], [4, 9, 8], [8, 4, 9], [8, 9, 4], [9, 4, 8], [9, 8, 4]]
    (J'utilise encore yield) NB: On pourrais gagner 3 lignes sans les valeurs intermédiaires l1, x, l2, qui ne servent qu'à détailler ce que l'on fait.
    Dernière modification par floyer ; 03/05/2017 à 22h23.
    http://www.sinerj.org/~loyer/piano/
    It's never too late to learn to play the piano. (tip of the day)
    Avatar d'après une photo de David Maiolo (Creative Commons BY-SA 3.0)
    Yamaha CLP150, Reaper, Garritan CFX, plein d'autres pianos virtuels

  4. #94
    rAKonteur Avatar de floyer
    Date d'inscription
    avril 2016
    Localisation
    Montigny le Bretonneux
    Messages
    1 119
    Finalement le programme complet qui cherche n'importe où dans la matrice... et affiche 2 fois ce qu'il trouve (en normal et à l'envers) :

    Code:
    def norm(n):
        return n%12
    
    def neg(n):
        return (12-n)%12
    
    def neg_list(l):
        return list(map(neg,l))
    
    sequence = [6, 3, 2, 5, 4, 8, 9, 10, 11, 1, 7, 0] 
    pattern = [0,3]
    pattern.sort()
    
    def analyse_p2(seq,pat):
        pat.sort()
        lpat = len(pat)
        for i in range(12):
            l1 = [norm(i+x) for x in seq]
            for j in range(12-lpat):
                if sorted(l1[j:j+lpat]) == pat:
                    yield(i, l1[:j], l1[j:j+lpat], l1[j+lpat:])
    
    for i,l1, l2, l3 in analyse_p2(sequence,pattern):
        print ("P",i,l1,l2, l3)
        l1.reverse()
        l2.reverse()
        l3.reverse()
        print ("R", i, l3, l2, l1)
            
    for i,l1, l2, l3 in analyse_p2(neg_list(sequence), pattern):
        print ("I",i,l1,l2, l3)
        l1.reverse()
        l2.reverse()
        l3.reverse()
        print ("RI", i, l3, l2, l1)
    Ce qui donne :

    Code:
    P 9 [] [3, 0] [11, 2, 1, 5, 6, 7, 8, 10, 4, 9]
    R 9 [9, 4, 10, 8, 7, 6, 5, 1, 2, 11] [0, 3] []
    P 10 [4, 1] [0, 3] [2, 6, 7, 8, 9, 11, 5, 10]
    R 10 [10, 5, 11, 9, 8, 7, 6, 2] [3, 0] [1, 4]
    I 5 [11, 2] [3, 0] [1, 9, 8, 7, 6, 4, 10, 5]
    RI 5 [5, 10, 4, 6, 7, 8, 9, 1] [0, 3] [2, 11]
    I 6 [] [0, 3] [4, 1, 2, 10, 9, 8, 7, 5, 11, 6]
    RI 6 [6, 11, 5, 7, 8, 9, 10, 2, 1, 4] [3, 0] []
    Dernière modification par floyer ; 03/05/2017 à 23h21.
    http://www.sinerj.org/~loyer/piano/
    It's never too late to learn to play the piano. (tip of the day)
    Avatar d'après une photo de David Maiolo (Creative Commons BY-SA 3.0)
    Yamaha CLP150, Reaper, Garritan CFX, plein d'autres pianos virtuels

  5. #95
    Modérateur Avatar de deb76
    Date d'inscription
    janvier 2007
    Localisation
    Haute-Normandie
    Messages
    3 182
    Je ne comprends pas ton désaccord. Je te fais part d'un écart entre 2 modes de recherche : celui d'OpenOffice qui cherche partout, et d'OPMO qui ne recherche qu'au début (et peut-être à la fin), et te me réponds avec une illustration où avec les codes de couleur tu mets en évidence cet écart ! (OPMO ne trouve que les verts).

    Mon désaccord était sur cette phrase : "Du coup, on n'a pas à chercher partoit dans la matrice". Mais je viens de me rendre compte que tu avais répondu en tant que programmeur, et notamment sur la différence de recherche entre OMPM et Libre Office, alors que pour ma part, j'avais interprété cette phrase dans le cadre de l'analyse musicale, dans la nécessité pour moi de se référer à la matrice, avec l'aide ou non de l'ordinateur. Donc, ce n'était pas par rapport aux 2 modes de recherche.
    Pour le document de Libre Office, c'était à titre informatif, pour montrer ce que j'obtenais à partir de la même recherche avec OPMO. Et surtout dans mon esprit en un c'était montrer que pour Libre Office pour obtenir les recherches je dois passer par les quatre matrices alors que pour OPMO la recherche s'effectue dans une seule matrice; et en deux pour noter que Libre Office n'arrivait pas aussi à trouver la série 11 2 3 0 1 9 8 7 6 4 10 5.

    J'ai tardé à répondre car j'ai transcris une portion de partition sur laquelle je porte mes recherches et en ajoutant la notation numérique en entiers accolée à chaque note pour que tu comprennes concrètement comment je me sers des recherches à partir des segments afin d'identifier le tracé des séries :
    http://www.deb8076.eu/CAOAnalysesMusicales/ExOPMOop22Webern.pdf et que tu peux tester avec ta dernière version de ton programme.

    Et dont je vois que tu as peaufiné les critères de recherche avec en résultat un affichage qui prend en compte les quatre formes et je dois dire que je n'en espérais pas tant. Je viens de le tester rapidement avec quelques segments et globalement c'est très positif, ça permet d'obtenir des pistes de recherche. Par contre, selon la disposition du segment, et du segment lui-même les résultats vont jusqu'à 20 lignes. Mais ce n'est pas un problème, car dans ce cas, j'essaye de repérer une note supplémentaire afin d'affiner la recherche. Et puis, par ailleurs, cela peut-être intéressant pour trouver des segments semblables permutés ou non selon les différentes formes et ça peut dans ce cas permettre de mettre en exergue certaines particularités internes de certaines des formes dérivées. Je vais regarder ça dans la journée à tête reposée en effectuant une identification.

    Mais sinon, un grand bravo pour ce programme qui dans l'état va m'être très utile.
    Chroniques de la CAO (blog), Comprendre la Set Theory; Chroniques sur la découverte du Buchla200e; Bio Express (site);
    {CHARTE AK} {Mettre un avatar - tuto}

  6. #96
    Modérateur Avatar de deb76
    Date d'inscription
    janvier 2007
    Localisation
    Haute-Normandie
    Messages
    3 182
    Bonsoir Alain,
    Citation Envoyé par Alain44 Voir le message
    Salut à vous deux,

    Développement passionnant, mais je ne suis pas tout (je le suis plutôt en tant que "curieux").

    Je remarque quelques soucis mineurs de compréhension …
    qui cependant empêchent un codage effectif.

    Courage.

    C'était juste pour dire que "certains vous lisent avec intérêt", même s'ils ne participent pas au sujet.
    Pas de soucis. En plus, c'est une question très spécialisée. Mais le résultat est là et je suis très impressionné par le programme qu'a créé floyer. En tout cas, il va m'être très utile.
    Chroniques de la CAO (blog), Comprendre la Set Theory; Chroniques sur la découverte du Buchla200e; Bio Express (site);
    {CHARTE AK} {Mettre un avatar - tuto}

  7. #97
    rAKonteur Avatar de floyer
    Date d'inscription
    avril 2016
    Localisation
    Montigny le Bretonneux
    Messages
    1 119
    Une petite correction :

    for j in range(13-lpat):

    En effet, pour un échantillon de taille 1, il faut le chercher à 13-1 = 12 positions et non 12-1 = 11.

    Avant, le programme ne trouvait rien à la fin.
    http://www.sinerj.org/~loyer/piano/
    It's never too late to learn to play the piano. (tip of the day)
    Avatar d'après une photo de David Maiolo (Creative Commons BY-SA 3.0)
    Yamaha CLP150, Reaper, Garritan CFX, plein d'autres pianos virtuels

  8. #98
    Modérateur Avatar de deb76
    Date d'inscription
    janvier 2007
    Localisation
    Haute-Normandie
    Messages
    3 182
    Bonjour,
    Citation Envoyé par floyer Voir le message
    Une petite correction :

    for j in range(13-lpat):

    En effet, pour un échantillon de taille 1, il faut le chercher à 13-1 = 12 positions et non 12-1 = 11.

    Avant, le programme ne trouvait rien à la fin.
    J'ai fait la correction. Et puis j'ai testé ton programme sur quelques mesures en notant mes segments de recherche et leurs résultats pour l'identification des séries :
    http://www.deb8076.eu/CAOAnalysesMus...RowsMatrix.pdf
    Et de fait, ce programme de recherche dans une matrice P I R RI fournit une aide précieuse pour ce type d'analyse.
    Merci encore, car ça va bien m'aider.
    Chroniques de la CAO (blog), Comprendre la Set Theory; Chroniques sur la découverte du Buchla200e; Bio Express (site);
    {CHARTE AK} {Mettre un avatar - tuto}

  9. #99
    rAKonteur Avatar de floyer
    Date d'inscription
    avril 2016
    Localisation
    Montigny le Bretonneux
    Messages
    1 119
    Tu pourrais noter qu'en recherchant comme tu l'as fait un accord et son renversement, on trouve les mêmes résultats présentés différemment : à un P4 correspond un I8 car 4 et 8 sont complémentaires.

    Ce qui m'intrigue dans l'approche, c'est qu'une recherche de note dans la séquence de 12 peut retourner une occurence qui est à cheval entre deux fragments (la séquence de 12 étant une concaténation de fragments). Du coup, je suppose que tous les résultats ne sont pas forcément intéressant.

    Je note que la séquence se termine par un accord viennois. Un hasard ?

    PS: On peut facilement éviter de rechercher des permutations si cela génère trop de résultats (on enlève le tri des tableaux à deux endroits : sort et sorted). Mais comme OPMO le faisait, je me suis laisser entraîner.
    Dernière modification par floyer ; 04/05/2017 à 20h42.
    http://www.sinerj.org/~loyer/piano/
    It's never too late to learn to play the piano. (tip of the day)
    Avatar d'après une photo de David Maiolo (Creative Commons BY-SA 3.0)
    Yamaha CLP150, Reaper, Garritan CFX, plein d'autres pianos virtuels

  10. #100
    Modérateur Avatar de deb76
    Date d'inscription
    janvier 2007
    Localisation
    Haute-Normandie
    Messages
    3 182
    Citation Envoyé par floyer Voir le message
    Tu pourrais noter qu'en recherchant comme tu l'as fait un accord et son renversement, on trouve les mêmes résultats présentés différemment : à un P4 correspond un I8 car 4 et 8 sont complémentaires.
    Oui, sur le renversement c'est une des opérations utilisées dans le cadre de la Set Theory et du modulo 12 et qui s'illustrent bien dans une représentation circulaire :
    Code:
        
        0
    11 --- 1
    10 --- 2
     9  --- 3
     8  --- 4
     7  --- 5
        6
    Ce qui m'intrigue dans l'approche, c'est qu'une recherche de note dans la séquence de 12 peut retourner une occurence qui est à cheval entre deux fragments (la séquence de 12 étant une concaténation de fragments). Du coup, je suppose que tous les résultats ne sont pas forcément intéressant.
    Ca dépend de ce qu'on recherche et puis aussi des structure intervalliques des séries qui vont induire certaines propriétés internes.
    Si tu prends R7 tu as notamment ce partage de notes communes dans la même position:
    Code:
    R7   :  [7,  2,   8,  6  5,  4,  3,  11,  0,  9,  10,  1] 
    RI5  : [5, 10,   4,  6  7,  8,  9,   1,   0,  3,   2,  11]
     P1  :  [7,  4,    3,  6  5,  9, 10, 11,  0,   2,   8,  1]
     I11 : [5,  8,    9,  6  7,  3,  2,   1,  0,  10,  4,  11]
    
    ou 
     RI9 : [9,  2,  8,  10  11,  0,  1,  5,  4,  7,  6,  3]
     I3 :   [9,  0,  1,  10  11,  7,  6,  5,  4,  2,  8,  3]
    Je note que la séquence se termine par un accord viennois. Un hasard ?
    Non, si le 3-5 est appelé accord viennois c'est en raison de son utilisation par Schoenberg, Berg, Webern et puis ensuite par un grand nombre de compositeurs contemporains. Boulez a écrit qu'il était devenu un accord académique, mais il s'en est pas mal servi dans ses premières pièces.

    PS: On peut facilement éviter de rechercher des permutations si cela génère trop de résultats (on enlève le tri des tableaux à deux endroits : sort et sorted). Mais comme OPMO le faisait, je me suis laisser entraîner.
    Je préfère plus que moins, donc pas de problème.
    Dernière modification par deb76 ; 04/05/2017 à 23h31.
    Chroniques de la CAO (blog), Comprendre la Set Theory; Chroniques sur la découverte du Buchla200e; Bio Express (site);
    {CHARTE AK} {Mettre un avatar - tuto}

Page 10 sur 10 PremièrePremière ... 678910

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •