Faire des routines dans les macros

Il est maintenant possible de faire des routines dans les macros de Logelloop.

Pour le faire, il y a 2 manières :

DoRepeat
// ce qui se trouve ici sera répété indéfiniment.
While true



ou :


RepeatWhile true
// ce qui se trouve ici sera répété indéfiniment.
EndRepeat

Si vous souhaitez contrôler le moment où la boucle revient au début, vous pouvez y insérer des attentes.

DoRepeat
// ce qui se trouve ici sera répété indéfiniment.
Sleep 10
// La ligne ci-dessus provoquera une attente de 10 millisecondes
While true

La boucle peut aussi attendre une intervention de l’utilisateur :

DoRepeat
// ce qui se trouve ici sera répété indéfiniment.
WaitUserAction
// La ligne ci-dessus fera que la boucle ne reviendra au début que lorsque l’utilisateur appuiera, sur le bouton Start de la macro.
While true

Enfin, la boucle peut se faire en fonction de l’avancement du métronome :

// N’oubliez pas de mettre en route l’écoute du métronome dans votre macro
MetroActivateEvents true


DoRepeat
// ce qui se trouve ici sera répété indéfiniment.
WaitMetroSomeBeats 1
// A chaque temps du métronome, la boucle fera un nouveau tour
While true

Le nombre de tours de boucle peut se faire en fonction d’un comptage :

Set $my_personnal_counter$ = 0


DoRepeat
Set $my_personnal_counter$ = {$my_personnal_counter$ + 1}
// à chaque tour, la variable de comptage sera incrémentée de 1
Message $my_personnal_counter$
Sleep 10
While { $my_personnal_counter$ < 40 }
// La répétition aura lieu jusqu’au moment où la variable $my_personnal_counter$ aura atteint 40

Les boucles peuvent s’enchaîner :

Set $my_personnal_counter$ = 0


DoRepeat
Set $my_personnal_counter$ = {$my_personnal_counter$ + 1}
// à chaque tour, la variable de comptage sera incrémentée de 1
Message $my_personnal_counter$
// la macro commande le mouvement du volume de la piste 1 (ascendant ici)
TrackVolume trk1 = {$my_personnal_counter$ – 76}
Sleep 10
While { $my_personnal_counter$ < 76 }


// La répétition aura lieu jusqu’au moment où la variable $my_personnal_counter$ aura atteint 76
DoRepeat Set $my_personnal_counter$ = {$my_personnal_counter$ – 1}


// à chaque tour, la variable de comptage sera décrémentée de 1
Message $my_personnal_counter$

// la macro commande le mouvement du volume de la piste 1 (descendant ici)
TrackVolume trk1 = {$my_personnal_counter$ – 76}

Sleep 10

While { $my_personnal_counter$ > 0 }
// La répétition aura lieu jusqu’au moment où la variable $my_personnal_counter$ sera revenue à 0


Éventuellement, la macro qui précède peut finir par un RestartMacro et continuera ainsi à jouer jusqu’au moment ou l’utilisateur l’arrêtera.

Grâce aux 2 types de routines, il est possible de faire des imbrications :

//Initialisation du compteur de piste
Set $my_track$ = 0


// Routine pour mettre à -76db tous les fader de pistes
DoRepeat
Set $my_track$ = {$my_track$ + 1}
//VarLoopTrack met trk_x à la valeur de la variable $my_track$
VarLoopTrack trk_x $my_track$
TrackVolume trk_x = -76
// La routine se répète jusqu’au la piste 10
While { $my_track$ < 10}


//remet le compteur de piste à 0
Set $my_track$ = 0


//lance la routine de remontée des faders
//La boucle RepeatWhile sert au changement de piste
RepeatWhile {$my_track$ < 10}
Set $my_track$ = {$my_track$ + 1}
VarLoopTrack trk_x $my_track$


Message $my_track$


//Remet la valeur qui servira au positionnement du fader à 0
Set $my_personnal_counter$ = 0


//La boucle DoRepeat sert à donner la valeur au fader
DoRepeat
Set $my_personnal_counter$ = {$my_personnal_counter$ + 1}



// à chaque tour, la variable de comptage sera incrémentée de 1
//Message $my_personnal_counter$
// la macro commande le mouvement du volume de la piste 1 (descendant ici)
TrackVolume trk_x = {$my_personnal_counter$ – 76}
Sleep 10



//While ferme la routine qui commence par DoRepeat
While { $my_personnal_counter$ < 76 }


// Dorepeat se reproduit jusqu’au moment où $my_personnal_counter$ atteint 76
//EndRepeat renvoie à RepeatWhile
EndRepeat

Un système permet de sortie d’une boucle au moment où l’utilisateur rappelle la macro. Cela permet de laisser tourner pendant un temps indéfini et ensuite, faire autre chose qui peut soit être une sorte de coda, soit être une ou plusieurs autres boucles.

//Cette macro est à utiliser avec le SFX Distortion inséré dans le slot 1
//Variable qui permet de choisir le canal dans lequel sera inséré la distorsion


Set $Canal_a_distordre$ = 0


//Durée en milliseconde de l’insert pour un canal
Set $Duree_de_disto$ = 100


//Routine de chenillard – met en route et arrête la distorsion cycliquement
//Cette variable servira à arrêter la macro si l’utilisateur relance la macro
Redeclare boolean $user_action_catched$ = false


//Il faut mettre ici la macro en attente d’une sollicitation de l’utilisateur (comparable à WaitUserAction, mais non bloquant)

BeginSignalCatchBlock


//Début de la boucle

DoRepeat
Set $Canal_a_distordre$ = {$Canal_a_distordre$ + 1}



//La condition IfThen permet de n’insérer la distorsion que sur les pistes dans lesquelles il y a du son

//La variable $current_full_tracks_count$ est interne et nous renseigne du nombre de pistes contenant du son

IfThen { $Canal_a_distordre$ > $current_full_tracks_count$ } Do Set $Canal_a_distordre$ = 1


//Insere la distorsion et attend un temps avant de l’arrêter pour cette piste
SFXSendMessage 1 $Canal_a_distordre$ ON
Sleep $Duree_de_disto$
SFXSendMessage 1 $Canal_a_distordre$ OFF
Sleep $Duree_de_disto$


//! indique que l’inverse donc !false = true
//Tant que l’utilisateur ne fait rien, $user_action_catched$ reste à false, donc la condition !$user_action_catched$ est true
While { !$user_action_catched$ }


//Cette ligne fait que si l’utilisateur relance la macro, $user_action_catched$ passe à true
//Si c’est le cas, la routine s’arrête et on passe à la suite
EndSignalCatchBlock OnSignalCatched Do Set $user_action_catched$ = true


//Lorsque l’on quitte la routine, on fait une nouvelle routine qui remet tous les inserts sur OFF
// cela permet de s’assurer qu’aucun canal ne reste en distorsion à la fin de la macro
Set $init_de_coda$ = 0


DoRepeat
Set $init_de_coda$ = {$init_de_coda$ + 1}
SFXSendMessage 1 $init_de_coda$ OFF
While {$init_de_coda$ < 10 }