Home › Forums › Macros › Sortir d’une boucle DoRepeat › Reply To: Sortir d’une boucle DoRepeat
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.