Home Forums Macros Sortir d’une boucle DoRepeat Reply To: Sortir d’une boucle DoRepeat

#6400
Philippe OllivierPhilippe
Keymaster

Salut,
Oui, c’est possible.
C’est un peu complexe à mettre en œuvre, mais ça fonctionne bien.

Il faut utiliser BeginSignalCatchBlock, une variable, ici c’est $user_action_catched$ mais tu peux choisir un autre nom et la ligne
“EndSignalCatchBlock OnSignalCatched Do Set $user_action_catched$ = true”
qui change l’état de la variable $user_action_catched$

Tu trouveras un exemple ci-dessous :

//************************************************************************************************************************
//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
Declare int $Canal_a_distordre$ = 0

//Durée en milliseconde de l’insert pour un canal
Declare int $Duree_de_disto$ = 50

Declare int $init_de_coda$ = 0

//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
Declare 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
$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$ + “_DistoTrigger”} ON
Sleep $Duree_de_disto$
SFXSendMessage 1 {“” + $Canal_a_distordre$ + “_DistoTrigger”} 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
DoRepeat
Set $init_de_coda$ = {$init_de_coda$ + 1}
SFXSendMessage 1 $init_de_coda$ OFF
While {$init_de_coda$ < 10 } //************************************************************************************************************************

  • This reply was modified 6 months, 4 weeks ago by Philippe OllivierPhilippe.