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..

Afficher les articles :
Aller au forum :

Documentation [Afficher / Cacher]

Connexion
[Afficher / Cacher]



Mégaphone [Afficher / Cacher]

sub26nico, 00:52, jeu. 09 Apr 2020: Salut et bienvenue à seblac et kekedo :-)
olinuxx, 15:01, mer. 08 Apr 2020: Bonjour et bienvenue à cledefa cool
olinuxx, 17:17, mar. 07 Apr 2020: Bonjour et bienvenu à Paco, SavageWolf/Savage_Wolf, et market cool
olinuxx, 17:14, mar. 07 Apr 2020: @pierrotlo : ba... si ? 7
pierrotlo, 11:13, mar. 07 Apr 2020: tiens, il n'y a plus le nimp ?
allany, 19:56, dim. 05 Apr 2020: :-D
r1, 19:56, dim. 05 Apr 2020: @allany : ouais !!! c'est noël ! Quelle équipe hallucinante ! :-D
allany, 19:28, dim. 05 Apr 2020: L'édito, c'est le bon topo, les cocos ! [Lien]
olinuxx, 21:36, mer. 01 Apr 2020: Bonjour et bienvenue à simon_martineau, martineau_simon, et à Roland57 cool
olinuxx, 20:13, mar. 31 mars 2020: Bonjour et bienvenue à sethi1cool
Nolwen, 22:46, lun. 30 mars 2020: Sortie d'Hydrogen 1.0.0-beta 2 ce 30 mars 2020. [Lien]
olinuxx, 17:39, lun. 30 mars 2020: Bonjour et bienvenue à JulienRadio cool