Variables et Positionnement en LUA
Variables et Positionnement en LUA
Partie 4 : Les variables, types de template, classes de code, les opérateurs, blocs
de code, fonctions mathématiques, alternances notables, une initiation à la
programmation LUA et quelques exercices.
Remarque : Avant de commencer à voir les variables, il est nécessaire d’indiquer que toute les
variables intégrés dans Aegisub commencent par un dollar « $ ». Ils fonctionnement uniquement
dans les lignes de templates et pas dans les lignes de code. Vous pourrez cependant les utiliser dans
les blocs de code.
Les lignes ont des propriétés comme le temps de début, de fin ou leur durée. Ainsi il est naturel de
pouvoir avoir accès à ces variables pour la création d’effets.
L’image ci-dessus, nous montre à quoi correspond les variables « lleft, lcenter et lright » sur une
ligne. Elles sont situées respectivement à gauche, centre et à droite de la ligne. Ils correspondent à
des positions suivant l’axe X.
Pour celle-ci, nous mettons en évidence les variables « lbottom, lmiddle et ltop » sur une ligne. Si
nous commençons depuis le bas, nous pouvons distinguer le bas, milieu et haut de la ligne. Ils
correspondent à des positions suivant l’axe Y.
Cette image montre deux variables « lwidth et lheight ». La variable « lwidth » met en évidence la
largeur de la ligne et « lheight » la hauteur de la ligne.
Voici une liste de positions de ligne que vous pouvez avoir en les combinant :
Exemple : exemple_positionnement_lignes.ass
Remarque : Il est préférable d’utiliser les variables de position correspondant aux noms plutôt que
« lx » et « ly ». Cela vous permettra de mieux cerner ce que vous êtes en train de faire, et votre script
sera plus compréhensible.
Ici nous passons à l’intérieur des lignes. Cela nous donne accès à d’autres variables qui sont destinées
aux syllabes. Puisque les syllabes sont contenues à l’intérieur de lignes, vous pouvez toujours utiliser
les variables de ligne suivant vos besoins.
L’image ci-dessus, nous montre à quoi correspond les variables « sleft, scenter et sright » d’une
syllabe. Elles sont situées respectivement à gauche, centre et à droite de la syllabe. Ils correspondent
à des positions suivant l’axe X.
Pour celle-ci, nous mettons en évidence les variables « sbottom, smiddle et stop » d’une syllabe. Si
nous commençons depuis le bas, nous pouvons distinguer le bas, milieu et haut de la syllabe. Ils
correspondent à des positions suivant l’axe Y.
Cette image montre deux variables « swidth et sheight ». La variable « swidth » met en évidence la
largeur de la syllabe et « sheight » la hauteur de la syllabe.
Exemple : exemple_positionnement_syllabes.ass
Remarque : Il est préférable d’utiliser les variables de position correspondant aux noms plutôt que
« sx » et « sy ». Cela vous permettra de mieux cerner ce que vous êtes en train de faire, et votre script
sera plus compréhensible.
Il s'agit d'un ensemble de variables qui peuvent affecter à la fois les lignes comme les syllabes. En
clair vous n’avez pas besoin de préciser dans ces variables si vous utilisé des variables de ligne ou de
syllabe. Ils s’adaptent en fonction des templates que vous utilisez.
start Temps de début de la ligne/syllabe. Absolue pour les lignes et relatif pour les
syllabes.
mid Temps de milieu de la ligne/syllabe. Absolue pour les lignes et relatif pour les
syllabes.
end Temps de fin de la ligne/syllabe. Absolue pour les lignes et relatif pour les
syllabes.
dur Durée en millième de secondes de la ligne/syllabe.
kdur Durée en centième de secondes de la ligne/syllabe.
i Indice de la ligne ou syllabe.
Tutoriel par Spyne21
left Position gauche de la ligne/syllabe.
center Position du centre de la ligne/syllabe.
right Position droite de la ligne/syllabe.
top Position du haut de la ligne/syllabe.
middle Position du milieu de la ligne/syllabe.
bottom Position du bas de la ligne/syllabe.
x Position x de la ligne/syllabe lorsque vous utilisez l'alignement par défaut.
y Position y de la ligne/syllabe lorsque vous utilisez l'alignement par défaut.
width Largeur de la ligne/syllabe en pixels. C'est une valeur arrondi et peut ne pas
correspondre exactement avec les variables de positionnement.
height Hauteur de la ligne/syllabe en pixels. C'est une valeur arrondi et peut ne pas
correspondre exactement avec les variables de positionnement.
Remarques : Afin de faire la distinction entre variable de ligne et de syllabe, il est conseillé de
toujours utiliser les variables de ligne ou de syllabe et pas les variables automatiques. Ainsi vous
éviterez de confondre les notions et vous pourrez ainsi acquérir des bases solides. Il est préférable
d’utiliser les variables de position correspondant aux noms plutôt que « x » et « y ». Cela vous
permettra de mieux cerner ce que vous êtes en train de faire, et votre script sera plus compréhensible.
Les variables « $ » que nous avons vu précédemment, sont des variables ou l’écriture y est simplifié.
En effet les variables à l’origine sont sous la syntaxe d’écriture du langage LUA. Ainsi il peut être
courant de voir directement ce genre de variable dans les scripts ASS.
Variables de ligne
line.actor ⟺ $actor
line.style ⟺ $style
ou
line.styleref.name
line.layer ⟺ $layer
line.start_time ⟺ $lstart
line.end_time ⟺ $lend
line.duration ⟺ $ldur
line.i ⟺ $li
line.left ⟺ $lleft
line.center ⟺ $lcenter
line.right ⟺ $lright
line.top ⟺ $ltop
line.middle ⟺ $lmiddle
line.bottom ⟺ $lbottom
line.x ⟺ $lx
line.y ⟺ $ly
line.height ⟺ $lheight
Variables de syllabe
syl.start_time ⟺ $sstart
syl.end_time ⟺ $send
syl.duration ⟺ $sduration
syl.kdur ⟺ $skdur ⟺ $kdur
syl.i ⟺ $si
syl.left ⟺ $sleft - $lleft
syl.center ⟺ $scenter - $lleft
syl.right ⟺ $sright - $lleft
line.left + syl.left ⟺ $sleft
line.left + syl.center ⟺ $scenter
line.left + syl.right ⟺ $sright
syl.height ⟺ $sheight
syl.width ⟺ $swidth
Attention : « $li » ou « line.i » nous informe sur l’indice de la ligne en tenant compte de toute les
autres lignes du script avant celle-ci, à savoir les lignes d’informations et de styles du script ASS.
Afin de mieux comprendre les équivalences de position entre les variables « $ » et les variables LUA,
nous allons voir quelques images.
Cette liste n’est pas complètes, elle comporte seulement ceux que vous êtes susceptible d’utiliser ou
bien de rencontrer.
Variables de vidéo
Variables de style
Variables de ligne
Variables de syllabe
« i » : Représente l’indice de la syllabe. Vous pouvez être amené à utiliser « $si » (syl.i) ou « $syln »
(line.kara.n) en ajoutant « + ou - » « 1 ou n » comme indice.
Remarque : Les variables LUA sont à utiliser dans des blocs de code lorsque vous les écrivez dans
des templates. De plus ces variables peuvent être utilisés dans les différentes classes de code, ce qui
est impossible pour les variables « $ ». Nous verrons plus loin, comment utiliser ces variables dans
des blocs de code et dans les différentes classes de code.
Un « template », est un modèle de ligne. La ligne définis comme modèle, contient des \balises
permettant de générer des effets. Dès lors que vous écrivez template dans une ligne, l’option
d’application de template devient disponible.
Pour écrire un type de template dans une ligne, il faut l’écrire dans le cadre de la ligne dont vous
voulez qu’elle devienne le template :
Tutoriel par Spyne21
Il ne vous reste plus qu’à commenter la ligne, écrire ce que vous voulez avoir comme effet dans cette
ligne, et ensuite l’appliquer en cliquant ici sur « Appliquer le modèle karaoké » :
Vous pouvez retrouver aussi ces informations en allant consulter la première partie du tutoriel.
Remarques : Nous utiliserons le terme « template » plutôt que « modèle », tout simplement par
choix purement subjectif. Le slash « / » entre les termes, signifie que l’on peut utiliser les uns ou les
autres pour ce type de template.
template line/syl keeptags Permet de spécifier que les balises originales doivent être
conservées dans la syllabe après application du template.
Cela n'a aucun effet lorsqu'il est combiné avec char ou multi.
template pre-line Permet de spécifier que nous voulons produire une ligne
contenant le texte original sans les balises karaokés et avec
les effets définis, seulement en début de ligne.
template syl/char fx « nom » Permet d'appliquer le template seulement aux syllabes qui
ont le nom « nom » spécifié dans la ligne. L'ajout du nom
dans la ligne doit être de la forme « \-nom_de_l'effet », et
ou « nom_de_l'effet » est le même que celui définis dans le
template.
Ce nom affecte la syllabe ou il est placé et toutes les syllabes
qui le suivent jusqu'à la prochaine syllabe comportant un
autre nom.
template syl/char fury Permet de pouvoir positionner, spécifier des effets pour les
furigana.
{\kdurée_kanji}kanji|furigana{\kdurée_second_furigana}
#|furigana{\kdurée_troisième_furigana}#|furigana...n
template line/syl/char notext Permet de spécifier que le texte original ne sera pas ajoutée
la ligne de sortie après exécution du template. Ce type de
template est destiné à être principalement utilisé pour les
templates utilisant des balises de dessins et autres similaires
tel que les balises \clip vectoriels.
template pre-line/syl/char Permet de spécifier que le template ne sera pas appliqué aux
noblank syllabes qui sont considérés comme « blanc » (vide). une
syllabe est considérée comme « vide » si le texte sans les
balises se compose d'espace, de caractères d'espacement ou
bien vide. De plus elle peut être considérée comme « vide »
dès lors, que la durée de la balise karaoké est égale à zéro.
Les différents types de template peuvent se combiner entre eux. Cependant ce n’est pas forcement
toujours le cas pour tous.
Une classe de code est une ligne comme les templates, mais à la différence que nous ne pouvons
générer de template seul à partir de ces lignes. Elles servent à déclarer des variables, conditions,
boucles, fonctions en utilisant du code LUA.
Attention : Il n’est pas possible d’utiliser des variables « $ » dans ces lignes de code. Seul le langage
LUA est possible.
Remarque : Le slash « / » entre les deux termes, signifie que l’on peut utiliser l’un ou l’autre pour
cette classe de code.
code line Permet de définir du code LUA valable pour les lignes.
code syl Permet de définir du code LUA valable pour les syllabes.
code once/line/syl all Permet de définir du code LUA valable pour les lignes/syllabes
applicable à tous les styles.
Remarque : Comme vous avez pu vous en rendre compte, la classe de code pour les caractères
« char » n’existe pas !!!
De plus « code noblank » est possible d’utilisation, et correspond à la même chose que pour les
templates.
Les opérateurs mathématiques sont des outils permettant d'effectuer des opérations classique voir
plus complexe. En effet, il vous sera parfois nécessaire d'effectuer des calculs pour la création de vos
effets.
Opérateur Signification
+ Addition
- Soustraction
* Multiplication
/ Division
^ Puissance
% Modulo
Opérateur Signification
== Égal
~= Différent
< Strictement inférieur
> Strictement supérieur
<= Inférieur ou égal
>= Supérieur ou égal
Les opérateurs logiques sont « and », « or », et « not ». Ce sont des mots réservés. Comme les
structures de contrôle (if, while, etc.), tous les opérateurs logiques considèrent à la fois « false » et
« nil » comme faux et tout le reste comme vrai.
L'opérateur de conjonction « and » retourne son premier argument si cette valeur est « false » ou
« nil », ou son second argument dans le cas contraire.
L'opérateur de disjonction « or » retourne son premier argument si cette valeur est différente de
« nil » et « false », ou son second argument dans le cas contraire.
Un bloc de code est un bloc de code LUA dans une ligne de template. Les blocs de codes sont utilisés
pour insérer des calculs/chaînes de caractères à l'intérieur d'une ligne de template. Les blocs de code
doivent être des expressions LUA simple.
Vous pouvez créer un bloc de code en mettant des points d’exclamation entre ce que vous voulez
ajouter.
Exemple : {\t($start,!$mid+20!,\bord0)}
Remarque : Il est possible d’utiliser les variables intégrés (automatiques, de ligne ou de syllabe)
d’Aegisub dans des blocs de code.
La plupart des expressions mathématiques simples fonctionnent. Cela inclus les différents opérateurs
mathématiques, de comparaison et logique.
Un bloc de code doit toujours retourner une chaîne ou une valeur numérique. Si elle retourne un
booléen (true or false), un tableau ou autre chose, cela peut provoquer un avertissement/erreur de la
ligne. Il en résulte que le bloc de code de cette ligne ne sera pas interprété.
Pour créer une condition dans un bloc de code, vous pouvez utiliser les opérateurs « and » et « or ».
Voici une liste de fonctions mathématiques nous permettant d'effectuer des opérations mathématiques
complexes que nous ne pouvons pas faire (facilement) avec les symboles mathématiques seuls.
Fonction Signification
math.abs(n) Retourne la valeur absolue, ou la valeur
positive, de « n ».
math.acos(n) Retourne le cosinus inverse de « n ».
math.asin(n) Retourne le sinus inverse de « n ».
math.atan(n) Retourne la tangente inverse de « n ».
math.atan2(n,m) Retourne la tangente inverse du rapport
« n/m ».
math.ceil(n) Retourne le nombre entier au-dessus de « n ».
math.cos(n) Retourne le cosinus de « n ».
math.cosh(n) Retourne le cosinus hyperbolique de « n ».
math.deg(n) Retourne la conversion des radians (« n ») en
degrés.
math.exp(n) Retourne l'exponentiel de « n ». C'est
l'inverse du logarithme népérien.
math.floor(n) Retourne le nombre entier en-dessous de
« n ».
math.log(n) Retourne le logarithme népérien de « n ».
math.log10(n) Retourne le logarithme décimal de « n ». Le
nombre doit être positif.
math.max(n,m[,…]) Retourne la valeur maximum de « n,m » ou
d'une liste de longueur variable d'arguments.
math.min(n,m[,…]) Retourne la valeur minimum de « n,m » ou
d'une liste de longueur variable d'arguments.
math.mod(n,m) Retourne le reste de « n/m » (modulo).
math.pow(n,m) Retourne le résultat de l’opération « n^m ».
math.rad(n) Retourne la conversion des degrés (« n ») en
radians.
math.random() Retourne un nombre aléatoire entre 0.0 et 1.0.
math.random(n) Retourne un nombre aléatoire compris entre
« 0 » et « n ».
math.random(n,m) Retourne un nombre aléatoire compris entre
« n » et « m » avec « n<m ».
math.randomseed(n) La fonction utilise une base pour le générateur
pseudo-aléatoire. Les bases égales produisent
des ordres égaux de nombres.
math.sin(n) Retourne le sinus de « n ».
math.sinh(n) Retourne le sinus hyperbolique de « n ».
math.sqrt(n) Retourne la racine carrée de « n ».
math.tan(n) Retourne la tangente de « n ».
math.tanh(n) Retourne la tangente hyperbolique de « n ».
Ceci est une liste exhaustive. Elle ne contient pas toute les fonctions, mais seulement les plus
importantes. Par exemple, vous vous servirez beaucoup de la fonction « math.random ».
Tutoriel par Spyne21
Pour plus d’informations, consultez :
Le « compteur », représente une incrémentation de valeur positive partant pour la plupart du temps
de « 1 » jusqu’à « n ». Le compteur peut être l’index (la position actuelle) des lignes « $li » ou
« line.i » ou syllabes « $si » ou « syl.i », ou bien d’une boucle « j » vu précédemment.
Étant donnée les différentes équations, nous allons expliquer le fonctionnement de l’avant dernière
équation : « A + ((B-A)/2)*(1+(-1)^compteur) »
Afin de mieux comprendre cette équation, nous allons partir de la droite vers la gauche :
Il ne tient qu’à vous de retenir ces équations ou bien de savoir les retrouver. Cependant vous pouvez
aussi utiliser le « modulo ». Comme je vous aie expliqué dans le premier tiret de l’équation, le fait
que le compteur soit « pair » ou « impair » est la clé qui permet cette alternance.
Traduction : Si le reste de l’opération est égale à « 0 » alors nous choisissons « A », sinon nous
choisissons « B ».
Affichage : 1
Affichage : chaîne
Affichage : concatene
Affichage : ⌀
Affichage : 0
Affichage : mot
Affichage : 2
Affichage : 6
Condition simple
Condition multiple
Affichage : 1 ou 2 ou 3
Vous pouvez comparer autant de valeur que vous voulez, aucune limitation quant à l’utilisation de
« elseif ».
Boucle While
Affichage : 1,2,…,10
Affichage : 1,2,…,10
Fonction
Affichage : ⌀
Vous serez peut être amené à utiliser ces types avec les fonction de « chaîne » comme
« string.format() », « string.match » etc…
Exemple :
Attention : Il est nécessaire de mettre deux anti-slash « \\ » puisqu’en langage LUA, l’anti-slash est
un caractère spécial servant à plusieurs choses. De ce fait en ajoutant un second « \ », nous précisons
que nous voulons le caractère « \ ».
Exercices :
Pour tous les exercices, vous pouvez télécharger ce fichier et les faire directement à partir de celui-
ci : Exercice.ass
Exercice 1 :
Vous devez créer un template qui affichera après exécution, seulement l’indice des syllabes sans
ligne vide et sans la syllabe.
Remarque : Vous pouvez remarquer que même sans les vides apparents, ils sont quand même pris
en compte pour l’indexage des syllabes.
Exercice 2 :
Même exercice que le premier, sauf qu’ici, nous voulons avoir l’indice des lignes de dialogue et
seulement eux.
Remarque : Dans cette exercice, il n’est donc pas envisageable d’utiliser la variable d’indice de
ligne, puisqu’elle ne répond à l’exercice.
Exercice 3 :
Créer un template qui affichera seulement la première et dernière syllabe après exécution.
Exercice 4 :
Créer un template qui affichera seulement la syllabe « ni » après exécution. Les autres lignes devront
être vides.
Exercice 5 :
Créer une template de type pre-line, qui affichera la couleur secondaire du style
« line.styleref.color2 » en tant que couleur primaire du texte. La position de la ligne devra monter de
« 100 pixels » vers le haut pour la première ligne et « 100 pixels » vers le bas pour la seconde ligne,
en utilisant les variables. Le placement manuel n’est donc pas envisageable. Vous utiliserez la
méthode de bloc de code pour la position vers le haut ou le bas.
Créer un template qui affichera la couleur primaire « &H0000FF& » avant la moitié des syllabes de
la ligne puis « &HFEA32F& » après cette moitié. Vous devez utiliser seulement les blocs de codes.
Exercice 7 :
Même exercice que le précédent sauf qu’ici vous ne devez plus utiliser les blocs de codes, mais les
classes de codes.
Exercice 8 :
Nous désirons connaitre la position du centre de la prochaine syllabe. Vous devez donc créer un
template de type syl, qui affichera après exécution la position x. Attention à la dernière syllabe !!!
Exercice 9 :
Créer une fonction qui retourne la position « y+10 ou y-10 » suivant la parité de l’indice de la
syllabe. Le template affichera des syllabes après exécution. A l’intérieur du template syl, seule la
balise \pos vous sera demandé.
Remarque : Bien qu’il soit possible de le faire assez facilement avec des blocs de code sans avoir à
créer une fonction, cet exercice est juste là pour vous vous faire travailler plusieurs notions.
Exercice 10 :
Créer une fonction qui alterne la couleur en fonction de l’indice de la syllabe. Elle retournera la
couleur avec la balise « 1c ». De plus il faudra tenir compte des vides entres syllabes et faire attention
à ce qu’il n’y ait pas deux fois la même couleur qui ce suit. Enfin les couleurs devront être stockés
dans un tableau et renseigné lors de l’appel de la fonction.
Exercice 11 :
Nous disposons de 3 couleurs. Le but de cet exercice, est d’attribuer successivement les couleurs
définies dans un tableau, aux différentes syllabes.
Exemple : Première couleur du tableau, est assigné à la première syllabe, seconde couleur du
tableau, est assigné à la deuxième syllabe, troisième couleur du tableau, est assigné à la troisième
syllabe, première couleur du tableau, est assigné à la quatrième syllabe, etc…
Remarque : Vous pouvez vous service de cette structure, pour répéter des séquences de valeurs,
comme de chaînes.