Chargement...
 
[Voir/Cacher menus de gauche]
[Voir/Cacher menus de droite]

6 - Le MIDI

> Forums de discussion > 6 - Le MIDI > [RESOLU] Randomisation de signal midi
Dernier post

[RESOLU] Randomisation de signal midi

zigmhount utilisateur non connecté
Bonjour à tous!

J'ai tenté hier soir de produire une note aléatoire avec mon setup Ray-Session+Carla+Seq64. L'idée sous-jacente est d'émuler la fonctionalité d'Ableton Live (Random Follow ) de choisir au hasard parmi un groupe de séquences à chaque lecture de boucle.

En première approximation, je me suis dit que je pourrais tester avec un plugin lv2 qui me randomise la note MIDI, et je suis tombé sur le plugin PSI Random MIDI qui fait ça assez bien! J'ai donc une boucle dans Seq64 avec juste une note (à terme j'aimerais avoir une séquence de notes), le plugin Random Midi choisit une note au hasard dans la gamme qui me plaît, c'est cool.

Mais la documentation sur ce site est un peu tristoune, le site officiel n'existe même plus, et j'ai bien du mal à comprendre ce que les champs "Random Lower" et "Random Upper" veulent dire (mais les notes choisies étaient souvent trop hautes). Jusqu'à ce que ça fasse crasher Carla, sans doute que j'ai mélangé des paramètres qui ne lui ont pas plu!
Quelqu'un ici a déjà utilisé ce plugin avec succès?

Peut-être qu'un mélange de x42 pour donner une vélocité aléatoire + convertir la vélocité en note, mais ça me semble compliqué pour un but tellement simple!

Pour aller plus loin, quelqu'un ici aurait-il une idée de comment émuler ce "Random Follow"? Peut-être un plugin d'arpegiateur comme Qmidiarp avec une fonction aléatoire? D'après ce que j'ai testé ce genre d'arpégiateurs aléatoires vont plutôt randomiser chaque note de l'arpège...

Merci de m'avoir lu jusqu'ici!

dawamss utilisateur non connecté France
utilser des 'environnements de programation' comme pure data, supercollider... te permet de créer ce genre d'outils midi sur mesure. Le midi est une trés bonne approche pour apprendre à faire des petits programmes.

zigmhount utilisateur non connecté
C'est pas faux, bonne idée merci ! J'ai déjà beaucoup appris en bricolant avec sendmidi et mididings entre autres, et je pense d'ailleurs que ce genre de plugin de randomization devrait être très facile à faire avec mididings aussi.
--> Qu'est-ce que tu penses être le plus adapté entre un script mididings, du pure data ou supercollider, pour me faire un plugin simple de ce style-là que je pourrais insérer avec Carla?


Bon, dans la suite je digresse, le home office c'est bien mais pas efficace tous les jours smile

Cela dit, je déplore passer beaucoup de temps sur l'aspect technique logiciel du setup et workflow, pour finalement en passer moins que je n'aimerais sur la création musicale en elle-même. En particulier, étant encore débutant en MAO, j'aimerais (j'aurais aimé) pouvoir expérimenter des workflows avec des outils tout prêts dans un gros DAW, et du même coup comprendre pourquoi les outils intégrés sont importants/utiles et comment les utiliser efficacement, avant de me mettre à cuisiner mes propres plugins aux petits oignons.

Pour la même raison j'ai même à un moment - ô sacrilège - songé à passer sur Bitwig pour progresser dans la composition à base de boucles midi (aucun DAW libre ne fait ça afaik), plutôt que de galérer avec des versions de développement de Seq64 et des plugins dans Carla qui font presque la même chose mais pas tout à fait...

Mais bon, c'est l'jeu ma pauv' Lucette, on peut pas avoir le beurre et l'argent du beurre, alors je reste du côté clair mais difficile de la force (100% libre) et je progresse un peu plus lentement!

olinuxx utilisateur non connecté France
Si tu veux quelque chose de tout fait avec des docs, et du support utilisateur, alors tu devrais aller voir du côté des solutions payantes.

zigmhount utilisateur non connecté
Maiiis je sais bien, j'accepte ça et je suis toujours en 100% libre et gratuit.

Bon finalement j'ai trouvé les instructions pour le plugin Random MIDI de Psi (j'en ai profité pour mettre à jour sa page) et ça roule.
Je reste à l'affût d'une solution pour le "random follow", peut-être en activant les boucles de Seq64 avec une note midi qui sera elle randomisée, ou avec une seule boucle sur Seq64 qui déclenchera un ou des arpégiateur en fonction de la note, qqch comme ça. Ça va être joli, je partagerai le résultat ici!

olinuxx utilisateur non connecté France
Merci pour la mise à jour de la page.

zigmhount utilisateur non connecté
Ça y est je m'en suis sorti ! Un petit script mididings dont je suis ma foi assez fier étant donné mon niveau de Python plus ou moins inexistant il y a quelques jours :-)

Je mets un résumé ici et je ferai ça un peu plus joli sur la page de ce site qui va bien.

Alors, d'abord, le set-up de Seq64: j'ai 4 séquences, chacune commence avec un CC#119 (peu importe la valeur):
Image
Celui du haut s'appelle Trigger, il n'est là que pour déclencher le "random follow".

Ensuite j'ai le script mididings:

from mididings import *
from mididings.event import *
from mididings.extra import Panic
from mididings.engine import switch_scene
from random import randint, sample

# The maximum number of input ports (in addition to ctrl_in)
NPORTS=5

# Build an array of input ports after the ctrl input
def buildportsarray(np):
    portsarray=["ctrl_in"]
    for p in xrange(0,np):
        portsarray.append("in_%d" %p)

    return portsarray

# Define input and output ports
config(
    #backend='jack-rt',
    client_name = 'mdd-RandomFollowSeq',
    in_ports = buildportsarray(NPORTS),
    out_ports = [ 
	'out',
	]
)

# This script picks at random one of the incoming midi signals (in_1 to in_[NPORTS]) once it detects a CC#119 on the ctrl_in port, and lets that signal through to the output port. Signals coming into other input ports will not let be through.
# It will select only input ports on which a CC#119 is detected, so it won't let through an empty signal.
# The Control input ctrl_in can also be the first sequence of the set, provided it is connected both to ctrl_in and to in_1.

hook(
    )

# Returns a dictionnary of Scenes, one per input port minus the control (first) port
def routing_scenes(ports):
    return dict(
        (p, Scene("Port %d" % (p+1),
              PortFilter(p+1) >> Port(1)
        ))
        for p in range(1, ports+1)
    )

# Global variable for the scenes that are active, i.e. the ports on which there is a midi signal
ACTIVESCENES=set()
ACTIVESCENES.add(1)


# Activate scenes only once a CC119 is detected
def activatescene(ev):
    newscene=ev.port-1
    if 1 <= newscene <= NPORTS+1:
        if newscene not in ACTIVESCENES:
            ACTIVESCENES.add(newscene)
            print("activated scene %d" %newscene + " for port %d" %ev.port)


# Picks a random scene in the set of active scenes
def randscene(ev):
#    ev.port=randint(1,NPORTS)
    pickedscene=sample(ACTIVESCENES,1)[0]
    switch_scene(pickedscene)
    return ev
            
run(
# Create scenes for each port
    scenes=routing_scenes(NPORTS),
    control = [
        # activate a scene once CC119 is detected
                CtrlFilter(119) >> Call(activatescene),
        # Call random scene when the control port detects a CC119
                PortFilter(1) >> CtrlFilter(119) >> Call(randscene)
        ]
)


Et finalement les connexions qui vont bien dans Carla:
Image

J'imagine que le script est pas très propre ou optimisé, pour le moment ça fonctionne mais j'ai pas encore expérimenté les performances, toutes suggestions sont bienvenues !


Quelle section du site est la plus appropriée pour y documenter ça?

olinuxx utilisateur non connecté France
Chouette, un nouveau tuto !

Tu peux fabriquer un "Tuto" (en faisant une nouvelle page, voir le lien "Créer une page dans la bannière orange en haut du site lorsque tu es identifié), je l'intégrerai ensuite dans la documentation.

dawamss utilisateur non connecté France
Bien vu mididings ! je n'y pense jamais..

olinuxx utilisateur non connecté France
J'ai fait quelques modifs (des petites choses), elles te vont ?

zigmhount utilisateur non connecté
Yes parfait, merci beaucoup !

olinuxx utilisateur non connecté France
super alors

olinuxx utilisateur non connecté France
Je viens de faire l'intégration du tuto dans la structure de documentation du site.
J'ai fait quelques petites éditions, regarde si je n'ai pas fait de bêtises.

Au passage, il est super ce tuto. Merci beaucoup.

zigmhount utilisateur non connecté
Merci à toi! Je viens de survoler les changements et je n'ai pas remarqué d'erreurs.
Note que j'ai amélioré quelques bricoles depuis (plus besoin du port de contrôle, possibilité de n'utiliser qu'un seul port avec une variation de boucle sur des channels differents, arguments en ligne de commande pour la configuration), je prendrai peut-être le temps de mettre le tuto à jour à l'occasion.
Ça serait peut-être bien d'inclure le script complet pour référence en fin de page non (quitte à y mettre ma v2 même si je n'explique pas Léa changements en détail pour le moment)?

olinuxx utilisateur non connecté France
Ça ne me semble pas judicieux de mettre un script en commentaire de la page si ce script ne représente pas ce qui est décrit dans la page.

Pourquoi ne pas le mettre ici en attendant que tu mettes le tuto à jour ?

Afficher les articles :
Aller au forum :

Documentation [Afficher / Cacher]

Connexion
[Afficher / Cacher]



Mégaphone [Afficher / Cacher]

sub26nico, 00:37, jeu. 29 Oct 2020: Salut et bienvenue à JARED et sansphil :-)
sub26nico, 23:53, dim. 25 Oct 2020: Salut et bienvenue à RiQ :-)
olinuxx, 15:00, dim. 25 Oct 2020: Nouveautés LibraZiK pour le mois écoulé : [Lien]
olinuxx, 16:23, jeu. 22 Oct 2020: Bonjour et bienvenue à Sherkaan cool
CyrilRos, 23:43, mer. 21 Oct 2020: Le noyau temps réel passe en version 5.9 sur Tux|N|Mix [Lien]
calixtus06, 08:56, mer. 21 Oct 2020: Bienvenue à Akashbro120 :-)
olinuxx, 14:03, mar. 20 Oct 2020: Bonjour et bienvenue à rico211 cool
calixtus06, 10:46, mar. 20 Oct 2020: Bienvenue à toi fran_studio :-)
minimoineau, 15:20, lun. 19 Oct 2020: Salut à tous, on aurait besoin d'aide pour faire tourner une Saffire pro 26 dans le forum [Lien] svp!
calixtus06, 20:40, sam. 17 Oct 2020: Bienvenu à Dan.p :-)
olinuxx, 19:34, sam. 17 Oct 2020: Bonjour et bienvenue à Dan.p cool
calixtus06, 23:00, ven. 16 Oct 2020: Bienvenue à MorganeH :-)