karaskel.lua El esqueleto del karaokeEsta es la primera y más fundamental librería que actúa sobre los subtítulos. Su trabajo es analizar cada línea de diálogo temporizada y convertirla en una estructura de datos rica y fácil de usar. Es el "esqueleto" sobre el que los efectos construirán las animaciones.
\k para obtener la duración y los tiempos de cada sílaba.line.kara, line.furi) que se pasa a las funciones de efectos, simplificando enormemente el acceso a datos como syl.width o syl.center.En resumen, karaskel hace todo el trabajo pesado de medición y posicionamiento inicial, para que los creadores de efectos puedan concentrarse en la animación.
Yutils.lua El motor de alto rendimientoEsta es una librería externa extremadamente potente, creada por "Youka" (Christoph Spanknebel). El Kara Effector la utiliza como su motor para muchas de las operaciones más complejas y computacionalmente intensivas. Es una dependencia crítica que le da al KE gran parte de su poder.
to_outline), aplanar (flatten), dividir (split) y detectar (detect) formas vectoriales a partir de datos de píxeles..bmp (imágenes) y .wav (audio), extrayendo datos que pueden usarse para crear efectos visuales.En esencia, Yutils es la "caja de herramientas de ingeniería" que permite a Effector-utils-lib-3.6 ofrecer funciones de tan alto nivel.
utils.lua y utils-auto4.lua Las bibliotecas puenteEstos archivos no contienen mucha lógica original. Su función principal es actuar como un "puente" o "adaptador". Cargan las librerías más modernas de Aegisub (como aegisub.util y effector-auto4) y crean versiones abreviadas o alias de sus funciones.
R, Rs, Rd, etc., que son en realidad llamadas a funciones más largas como ke4.math.R.aegisub.util estén disponibles bajo nombres más antiguos o convenientes, como table.copy.El propósito de estos archivos es hacer que el código del KE sea más limpio y fácil de leer para el autor, al tiempo que se aprovecha la potencia y eficiencia de las librerías estándar de Automation 4 de Aegisub.
Effector-newlib-3.6.lua Biblioteca personal de funcionesPropósito: Almacenar tus propias funciones y variables reutilizables.
Este archivo está pensado para que los usuarios avanzados añadan sus propias funciones de utilidad, variables globales o shapes personalizadas. Al mantener estas adiciones en un archivo separado, se evita modificar los archivos principales del Effector. Esto tiene dos ventajas:
Mantiene el código del Effector limpio y original.
Facilita la actualización del Effector en el futuro, ya que puedes reemplazar los archivos principales sin perder tus personalizaciones.
Effector-newfx-3.6.txt Biblioteca personal de efectos completosPropósito: Almacenar las configuraciones de los efectos que creas y guardas.
Cuando creas un efecto en la interfaz de "Modify" y lo guardas, su configuración se escribe en este archivo. Cada entrada es una llamada a la función effector.create_fx, que define el nombre del efecto y todos sus parámetros. Este archivo actúa como una base de datos de tus presets de efectos, que el Effector carga cada vez que se inicia.
Inicio: El script principal Effector 3.6.lua se ejecuta. Carga todas las librerías (karaskel, Effector-utils-lib-3.6, etc.) y los archivos de configuración (Effector-newfx-3.6).
Interfaz: Se muestra la GUI al usuario para que seleccione las líneas, el tipo de efecto y la configuración.
Pre-procesamiento: Al aplicar el efecto, karaskel.lua analiza las líneas seleccionadas y las convierte en estructuras de datos detalladas.
Ejecución del Efecto: La función del efecto seleccionado (definida a través de effector.create_fx) se ejecuta para cada sílaba/carácter/línea.
Cálculos Internos: Durante la ejecución, la función del efecto utiliza las herramientas de las librerías:
effector para la lógica principal.math, shape, text, color, etc. de Effector-utils-lib-3.6 para los cálculos.Yutils.lua para las operaciones más complejas.Salida: El resultado final es un conjunto de tags de ASS, generados por la librería tag, que se insertan en nuevas líneas de subtítulo en Aegisub.
Return[fx]: Para construir el texto o la forma final mediante un formato.Variables[fx]: Para definir valores personalizados que se usarán en otras cajas de texto.Add Tags[fx]: Para añadir efectos dinámicos basados en las propiedades del elemento.l.start_time (Tiempo Absoluto de la Línea):
l.start_time será 15000.syl.start_time (Tiempo Relativo a la Línea):
l.start_time). Es un valor relativo a la línea actual.15000 y la sílaba empieza medio segundo después, syl.start_time será 500. Su tiempo absoluto es 15000 + 500 = 15500.syl.syl_start (Tiempo Relativo al Efecto):
fx.start_time).\t(). Un efecto (como una entrada anticipada o lead-in) podría empezar antes que la línea original, por lo que necesitas un tiempo relativo a la nueva línea de efecto. Se calcula como: (l.start_time + syl.start_time) - fx.start_time.15000 (l.start_time).500 (syl.start_time). Tiempo absoluto: 15500.14800 (fx.start_time - 200).syl.syl_start será 15500 - 14800 = 700. Por lo tanto, \t(700, ...) se sincronizará perfectamente con la sílaba, pues le suma esos 200ms de ventaja que le dimos al efecto de lead-in y nosotros no tuvimos que calcularlo manualmente.line o l)| Variable | Abreviatura en do_fx |
Descripción |
|---|---|---|
line.start_time |
l_start |
Tiempo de inicio de la línea (en ms). |
line.end_time |
l_end |
Tiempo de fin de la línea (en ms). |
line.duration |
l_dur |
Duración total de la línea (en ms). |
line.mid_time |
l_mid |
El punto medio en el tiempo de la línea. |
line.i |
l_i |
Índice de la línea actual en la selección. |
line.n |
l_n |
Número total de líneas en la selección. |
line.text_stripped |
- | El texto de la línea sin ninguna etiqueta ASS. |
line.width |
l_width |
Ancho total de la línea en píxeles. |
line.height |
l_height |
Alto total de la línea en píxeles. |
line.left, line.center, line.right |
l_left, l_center, l_right |
Coordenadas X de la caja delimitadora de la línea. |
line.top, line.middle, line.bottom |
l_top, l_middle, l_bottom |
Coordenadas Y de la caja delimitadora de la línea. |
line.descent, line.extlead |
- | Métricas de la fuente: descenso y espaciado externo. |
line.styleref |
L |
Una referencia al objeto de estilo completo de la línea. |
line.hira, .kata, .roma |
line.hira, .kata, .roma |
El texto completo de la línea convertido a Hiragana, Katakana o Romaji. |
syl)| Variable | Abreviatura en do_fx |
Descripción |
|---|---|---|
syl.start_time |
syl_start |
Tiempo de inicio de la sílaba, relativo al inicio de la línea (en ms). |
syl.end_time |
syl_end |
Tiempo de fin de la sílaba, relativo al inicio de la línea. |
syl.duration |
syl_dur |
Duración de la sílaba (en ms). |
syl.mid_time |
syl_mid |
El punto medio en el tiempo de la sílaba. |
syl.i |
syl_i |
Índice de la sílaba actual en la línea. |
syl.n |
syl_n |
Número total de sílabas en la línea. |
syl.text_stripped |
syl.text |
El texto de la sílaba sin etiquetas. |
syl.width |
syl_width |
Ancho de la sílaba en píxeles. |
syl.height |
syl_height |
Alto de la sílaba en píxeles. |
syl.left, syl.center, syl.right |
syl_left, syl_center, syl_right |
Coordenadas X de la sílaba. |
syl.top, syl.middle, syl.bottom |
syl_top, syl_middle, syl_bottom |
Coordenadas Y de la sílaba. |
syl.prespacewidth |
- | Ancho en píxeles del espacio en blanco antes de la sílaba. |
syl.postspacewidth |
- | Ancho en píxeles del espacio en blanco después de la sílaba. |
word)| Variable | Abreviatura en do_fx |
Descripción |
|---|---|---|
word.start_time |
word_start |
Tiempo de inicio estimado de la palabra, relativo al inicio de la línea. |
word.end_time |
word_end |
Tiempo de fin estimado de la palabra. |
word.duration |
word_dur |
Duración estimada de la palabra. |
word.i |
word_i |
Índice de la palabra actual en la línea. |
word.n |
word_n |
Número total de palabras en la línea. |
word.text |
- | El texto de la palabra. |
word.width, .height |
word_width, word_height |
Dimensiones de la palabra. |
word.left, .center, .right |
word_left, word_center, word_right |
Coordenadas X de la palabra. |
char)| Variable | Abreviatura en do_fx |
Descripción |
|---|---|---|
char.start_time |
char_start |
Tiempo de inicio estimado del carácter, relativo al inicio de la línea. |
char.end_time |
char_end |
Tiempo de fin estimado del carácter. |
char.duration |
char_dur |
Duración estimada del carácter. |
char.i |
char_i |
Índice del carácter en la línea. |
char.n |
char_n |
Número total de caracteres en la línea. |
char.text |
- | El carácter actual (una cadena de un solo carácter). |
char.width, .height |
char_width, char_height |
Dimensiones del carácter. |
char.left, .center, .right |
char_left, char_center, char_right |
Coordenadas X del carácter. |
fx)Return[fx], Variables[fx], Add Tags[fx].| Variable | Descripción |
|---|---|
fx.start_time |
El tiempo de inicio real de la línea de efecto que se está creando (en ms). |
fx.end_time |
El tiempo de fin real de la línea de efecto que se está creando (en ms). |
fx.dur |
La duración real de la línea de efecto (fx.end_time - fx.start_time). |
fx.pos_x, fx.pos_y |
La coordenada central final (X, Y) del objeto, después de aplicar funciones paramétricas y desplazamientos. |
syl.syl_start |
Tiempo de inicio de la sílaba relativo al inicio del efecto. Esta es la variable clave a usar dentro de una etiqueta \t() para la sincronización de karaoke. |
syl.syl_end |
Tiempo de fin de la sílaba relativo al inicio del efecto. |
Return[fx], Variables[fx], Add Tags[fx].| Variable | Descripción |
|---|---|
j |
El contador del bucle principal (definido en la caja loop). Itera desde 1 hasta maxj. |
maxj |
El número total de iteraciones para el bucle principal. |
module |
La variable más importante para la animación. Representa el progreso del bucle j, normalizado de 0.0 a 1.0. Se calcula como (j - 1) / (maxj - 1). |
module1, module2 |
Módulos de progreso anidados, relativos al número de sílabas y al número de líneas, respectivamente. |
J |
El contador del bucle externo (definido por la función replay()). |
maxJ |
El número total de repeticiones del efecto. |
moduler |
El progreso del bucle J, normalizado de 0.0 a 1.0. |
meta, L)Variables[fx], Return[fx].| Variable | Abreviatura en do_fx |
Descripción |
|---|---|---|
meta.res_x, meta.res_y |
xres, yres |
La resolución X e Y del script de Aegisub. |
frame_dur |
- | La duración de un único fotograma de video (en ms). |
ratio |
ratio |
Un factor de corrección de la relación de aspecto, útil para adaptar efectos a diferentes resoluciones de video. |
L.color1, L.color3 |
l_color1, l_color3 |
Los colores primario y de contorno del estilo de la línea. |
L.alpha1, L.alpha3 |
l_alpha1, l_alpha3 |
Las transparencias primaria y de contorno del estilo. |
L.outline, L.shadow |
l_outline, l_shadow |
El grosor del contorno y de la sombra del estilo. |
L.fontsize, L.fontname |
l_fsize, l_fname |
El tamaño y el nombre de la fuente del estilo. |
$)**auto4 en la caja de etiquetas.| Variable | Equivalente en Lua | Descripción |
|---|---|---|
| Línea ($l...) | ||
$lstart, $lend, $ldur |
l_start, l_end, l_dur |
Tiempos de la línea. |
$li, $linen |
l_i, l_n |
Índice de la línea y total. |
$lleft, $lcenter, $lright |
l_left, l_center, l_right |
Posición X de la línea. |
$ltop, $lmiddle, $lbottom |
l_top, l_middle, l_bottom |
Posición Y de la línea. |
$lwidth, $lheight |
l_width, l_height |
Dimensiones de la línea. |
| Sílaba ($s...) | ||
$sstart, $send, $sdur |
syl_start, syl_end, syl_dur |
Tiempos de la sílaba. |
$si, $syln |
syl_i, syl_n |
Índice de la sílaba y total. |
$sleft, $scenter, $sright |
syl_left, syl_center, syl_right |
Posición X de la sílaba. |
| Carácter ($c...) | ||
$cstart, $cend, $cdur |
char_start, char_end, char_dur |
Tiempos del carácter. |
$ci, $charn |
char_i, char_n |
Índice del carácter y total. |
$cleft, $ccenter, $cright |
char_left, char_center, char_right |
Posición X del carácter. |
| Palabra ($w...) | ||
$wstart, $wend, $wdur |
word_start, word_end, word_dur |
Tiempos de la palabra. |
$wi, $wordn |
word_i, word_n |
Índice de la palabra y total. |
$wleft, $wcenter, $wright |
word_left, word_center, word_right |
Posición X de la palabra. |
| Furigana ($f...) | ||
$fstart, $fend, $fdur |
furi_start, furi_end, furi_dur |
Tiempos del furigana. |
$fi, $furin |
furi_i, furi_n |
Índice del furigana y total. |
$fleft, $fcenter, $fright |
furi_left, furi_center, furi_right |
Posición X del furigana. |
| Efecto ($fx...) | ||
$fxstart, $fxend, $fxdur |
fx_start, fx_end, fx_dur |
Tiempos de la línea de efecto generada. |
$fxi, $fxn |
fx_i, fx_n |
Índice del bucle actual (j) y total de iteraciones (maxj). |
$fxleft, $fxcenter, $fxright |
fx_left, fx_center, fx_right |
Posición X final del objeto del efecto. |
$fxtop, $fxmiddle, $fxbottom |
fx_top, fx_middle, fx_bottom |
Posición Y final del objeto del efecto. |
$fxwidth, $fxheight |
fx_width, fx_height |
Dimensiones finales del objeto del efecto. |
$fxx, $fxy |
fx_x, fx_y |
Posición de anclaje final del objeto del efecto. |
| General ($...) | ||
$start, $end, $dur |
val_start, val_end, val_dur |
Tiempos del elemento actual (depende del Template Type). |
$i, $n |
val_i, val_n |
Índice y total del elemento actual. |
$left, $center, $right |
val_left, val_center, val_right |
Posición X del elemento actual. |
$top, $middle, $bottom |
val_top, val_middle, val_bottom |
Posición Y del elemento actual. |
$width, $height |
val_width, val_height |
Dimensiones del elemento actual. |
$x, $y |
val_center, val_middle |
Posición de anclaje del elemento actual. |
| Estilo ($...) | ||
$scale_x, $scale_y |
l_scale_x, l_scale_y |
Escalado de la fuente del estilo. |
$angle |
l_angle |
Rotación del estilo. |
$outline, $shadow |
l_outline, l_shadow |
Grosor de contorno y sombra del estilo. |
$fontsize |
l_fsize |
Tamaño de fuente del estilo. |
$fontname |
l_fname |
Nombre de la fuente del estilo. |
$spacing |
l_spacing |
Espaciado entre letras del estilo. |
$color1 a $color4 |
l_color1 a l_color4 |
Los cuatro colores del estilo. |
$alpha1 a $alpha4 |
l_alpha1 a l_alpha4 |
Las cuatro transparencias del estilo. |
$align |
l_align |
El número de alineación del estilo. |
Variables[fx] y Return[fx] para usuarios avanzados que escriben código Lua complejo.| Variable | Descripción |
|---|---|
Objeto line |
|
line.kara |
La tabla principal que contiene todas las sílabas de karaoke procesadas. line.kara[i] es lo que se convierte en el objeto syl dentro de un efecto. |
line.kara.n |
El número total de sílabas en la línea. |
line.furi |
Una tabla separada que contiene todos los segmentos de furigana procesados. |
line.styleref |
Un objeto completo que contiene todas las propiedades del estilo de la línea (color, fuente, márgenes, etc.). La abreviatura L en los efectos apunta a esto. |
line.effect |
El texto original del campo "Effect" de la línea. |
Objeto syl (dentro de line.kara) |
|
syl.text |
El texto original de la sílaba, incluyendo cualquier etiqueta de formato. |
syl.text_spacestripped |
El texto de la sílaba sin espacios en blanco al principio o al final. |
syl.prespace, syl.postspace |
Los caracteres de espacio en blanco (" ", "\t") que estaban antes y después de la sílaba. |
syl.highlights |
Una tabla que contiene los tiempos para cada sub-resaltado en sílabas con múltiples tiempos \k (p.ej., {\k10\k20\k30}sílaba). |
syl.furi |
Una sub-tabla que contiene una referencia al furigana directamente asociado con esta sílaba. |
Objeto furi (dentro de line.furi) |
|
furi.text |
El texto del furigana. |
furi.syl |
Una referencia a la sílaba principal a la que este furigana está anclado. |
furi.isbreak |
Un booleano que indica si el furigana debe unirse visualmente con el anterior (false) o no (true), controlado por ! o < en el texto. |
furi.spillback |
Un booleano que indica si el texto del furigana puede extenderse a la izquierda de su texto base, controlado por <. |
Add Tags[fx] y Return[fx] (solo en Template Types).| Variable | Descripción | Ejemplo de Uso |
|---|---|---|
linefx[ii].syls |
Tabla con propiedades de todas las sílabas. | |
.syls.width[k] |
Ancho de la k-ésima sílaba. | linefx[ii].syls.width[syl.i] |
.syls.center[k] |
Centro de la k-ésima sílaba. | linefx[ii].syls.center[syl.i] |
.syls.start_time[k] |
Tiempo de inicio de la k-ésima sílaba. | linefx[ii].syls.start_time[syl.i] |
linefx[ii].words |
Tabla con propiedades de todas las palabras. | |
.words.width[k] |
Ancho de la k-ésima palabra. | linefx[ii].words.width[word.i] |
.words.center[k] |
Centro de la k-ésima palabra. | linefx[ii].words.center[word.i] |
.words.start_time[k] |
Tiempo de inicio de la k-ésima palabra. | linefx[ii].words.start_time[word.i] |
linefx[ii].chars |
Tabla con propiedades de todas los caracteres. | |
.chars.width[k] |
Ancho del k-ésimo carácter. | linefx[ii].chars.width[char.i] |
.chars.center[k] |
Centro del k-ésimo carácter. | linefx[ii].chars.center[char.i] |
.chars.start_time[k] |
Tiempo de inicio del k-ésimo carácter. | linefx[ii].chars.start_time[char.i] |
En resumen, solo puedes llamar a variables que existen y tienen un valor en el momento exacto en que tu código en la caja de texto de la UI es evaluado. Este momento es dentro de la función effector.do_fx, para una línea, sílaba e iteración de bucle específicas.
Aquí tienes una aclaración de las secciones y tipos de variables que NO puedes llamar directamente desde las cajas de texto de la UI de KE, y la razón.
Ejemplos:
effector.GUI_config, effector.GUI_modify, effector.GUI_karax, effector.GUI_shape, effector.GUI_trans, effector.GUI_add, effector.ipol_lines.effector.GUI_modify[29].items.Razón de la Inaccesibilidad:
Estas variables se usan antes de que tu efecto se ejecute para construir el diálogo. Cuando escribes en la caja Return[fx], la ventana ya existe. No puedes llamar a una variable que define la ventana desde dentro de esa misma ventana.
Estas son variables que el script principal (Kara Effector 3.6.lua) usa para gestionar su estado, contar cosas y almacenar datos globalmente mientras se ejecuta.
Ejemplos:
count_save: Un contador para archivos de autoguardado.
fx_box: La tabla que contiene la configuración del efecto actualmente seleccionado para mostrarlo en la UI de "Modify".
list_fx, list_library: Las tablas que contienen todos los efectos cargados, ordenados por categoría.
Razón de la Inaccesibilidad:
Son parte de la maquinaria interna y no son relevantes para el diseño de un efecto. Están fuera del ámbito de la función effector.do_fx que evalúa tu código. Permitir el acceso a ellas podría crear inestabilidad y resultados impredecibles. El script solo te proporciona la información que necesitas para la tarea actual, como los datos de la línea (l) o la sílaba (syl).
karaskel.lua)Ejemplos:
worksyl: Una tabla temporal que karaskel usa para agrupar sílabas con múltiples tiempos \k.cur_inline_fx: Una variable que almacena el último efecto en línea (\-) encontrado.lgroups: En la maquetación del furigana, es una tabla que agrupa sílabas para calcular su espaciado.toinsert: Una cola de estilos de furigana que necesitan ser añadidos al archivo.Razón de la Inaccesibilidad:
Son variables "locales" dentro de las funciones de karaskel. Una vez que una función termina su trabajo (p.ej., calcular las posiciones de todas las sílabas en una línea), estas variables se destruyen y su memoria se libera. Recibes el resultado final de estos cálculos (p.ej., syl.width, syl.center), pero no las variables intermedias usadas para llegar ahí.
Analogía: Es como pedir un plato en un restaurante. Recibes el plato terminado (
syl.width), pero no tienes acceso a los ingredientes a medio cortar en la tabla del chef (worksyl).
Yutils.lua, Effector-utils-lib-3.6.lua)Ejemplos:
Yutils.shape.split, la tabla new_shape mientras se está construyendo.shape.array, las tablas shape_radial, shape_rectangular, etc., mientras se están generando.effector.time, las variables Tim, Hor, Min, Seg.Razón de la Inaccesibilidad:
Este es un principio fundamental de la programación llamado "ámbito de función". Las variables declaradas dentro de una función solo existen mientras esa función se está ejecutando. Cuando la función te da un resultado (su valor de retorno), sus variables internas desaparecen.
aegisub y su Estado Internoaegisub.selected_lines_count: Una variable así no existe. Debes usar aegisub.get_dialog_selection().aegisub.main_window_handle: Punteros internos del programa.aegisub.undo_history_table: La lista de acciones para deshacer.aegisub.text_extents, aegisub.progress.set, etc.) por seguridad y estabilidad. No concede acceso directo a su memoria interna o al estado de la aplicación.| Categoría | Variables/Secciones de Ejemplo | Razón de la Inaccesibilidad |
|---|---|---|
| Configuración de UI | effector.GUI_config, effector.GUI_modify, fx_box |
Definen la interfaz gráfica; no son variables de datos de karaoke. |
| Motor del Script | count_save, list_fx, list_library, fx_box |
Son parte de la maquinaria interna del script, fuera del ámbito de ejecución del efecto. |
| Preprocesamiento | worksyl, cur_inline_fx (en karaskel.lua) |
Son variables temporales y locales que se destruyen una vez que su tarea ha finalizado. |
| Funciones de Librería | Variables internas de Yutils.shape.split o tag.oscill |
Son locales a las funciones. Solo recibes el resultado final que la función retorna. |
| Estado de Aegisub | El número de líneas seleccionadas, el historial de deshacer | Aegisub no expone su estado interno como variables, solo a través de una API basada en funciones. |