Historique: Script mididings pour Seq64 dans Carla
Aperçu de cette version: 5
note
Cette page présente les étapes à suivre pour mettre en place un script Mididings dans une configuration de boucles Midi avec Sequencer64, Carla et un synthétiseur virtuel.
attention
Page en cours d'écriture
Dernier edit par Zigmhount le 8/04/202
Dernier edit par Zigmhount le 8/04/202
Table des matières
Introduction
Dans une configuration de séquenceur en looping (live ou non), le logiciel propriétaire Ableton Live a une fonctionnalité appelée Random Follow expliquée par exemple dans cette vidéo, et qui consiste à préparer plusieurs boucles pour la même séquence que le logiciel va choisir aléatoirement, résultant en une suite aléatoire de ces boucles. Ceci peut donner par exemple de la variété dans une séquence de percussions, avec quelques coups supplémentaires de caisse ou de hi-hat, ou dans une ligne de basse, pour éviter que ce soit trop répétitif et devienne lassant.
Mon looper libre de prélidection, Sequencer64, ne présente pas cette fonction. Je n'ai pas trouvé non plus de plugin LV2 qui fasse ceci (il existe par contre PSI Random MIDI pour remplacer une note par une autre note choisie aléatoirement dans une certaine bande). Je me suis donc tourné vers Mididings pour randomiser les séquences.
Organisation de la session
Pour ce tuto j'utilise Ray Session et Carla, mais c'est bien sûr transposable sur d'autres outils.Seq64 est lancé depuis Ray Session, et des synthétiseurs virtuels tels que Fluidsynth ou Helm sont lancés dans Carla en tant que plugins lv2.
note
TODO: Ajouter une image de Carla
Le script mididings
Idée et réflexions préalables
note
TODO: trigger sur CC#119, nombre de ports, utiliser des scènes activées aléatoirement
Entrées et sorties
note
TODO: config(), fonction buildportsarray(), NPORTS
Copy to clipboard
# 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', ] )
Préparer les scènes
note
TODO: expliquer
Copy to clipboard
# 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) )
Fonctions pour activer une scène aléatoire
note
TODO: expliquer
Copy to clipboard
# 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
Le coeur du script
note
TODO: expliquer
Copy to clipboard
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) ] )
Intégration dans Carla et Ray Session
Lancer le script dans le terminal et tester dans Carla
note
TODO: lancer le script à la main, tester avec aseqdump