Home Forums Macros Sortir d’une boucle DoRepeat

Viewing 2 posts - 1 through 2 (of 2 total)
  • Author
    Posts
  • #6392
    WilliamNicolasWilliamNicolas
    Participant

    Salut,

    Avec quelle commande peut on sortir du boucle dans une macro pour faire jouer des actions écrites derrière le While true ?

    Merci !

    #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 } //************************************************************************************************************************

Viewing 2 posts - 1 through 2 (of 2 total)
  • You must be logged in to reply to this topic.