Tasker Para hablar de todo lo relacionado con la aplicación tasker

Respuesta
 
Herramientas
  #1  
Viejo 17/02/14, 02:24:31
Array

[xs_avatar]
Caravantes Caravantes no está en línea
Usuario muy activo
· Votos compra/venta: (1)
 
Fecha de registro: feb 2011
Mensajes: 2,200
Modelo de smartphone: Samsung Galaxy S9
Tu operador: Lowi
Leer Inglés, tareas complejas y detallistas

Hoy traigo un proyecto que he hecho para ayudarme con el aprendizaje del idioma inglés. Aviso de que esto puede ser un poco pesado (largo) y además no creo que tenga interés directo para nadie más que para mí. Lo muestro porque los más apasionados de Tasker quizá puedan sacar de aquí algunas ideas para exportar a otras tareas, y también para que veáis que se pueden construir cosas muy retorcidas y puntillosas.

En cierto modo, esto es continuación y profundización de una tarea anterior que ya publiqué: Tarea para escuchar un texto largo, una y otra vez http://www.htcmania.com/showthread.php?p=11745482

Hace algunos meses comencé a estudiar inglés con el método de Duolingo.com . Al poco tiempo pensé que era buena idea ir anotando en un archivo cada frase que estudio con ese sistema, al estilo siguiente:
--The man has a wallet. El hombre tiene una cartera.
--What is in the box? ¿Qué hay en la caja?
Luego se me ocurrió que el smartphone podría ayudarme a repasar esas frases. Así pues me puse a trabajar en una tarea que me leyera esas frases. La versión que tengo de Android (puro Google) incluye motor de voz (Síntesis de Google) para diferentes idiomas, entre los que se incluyen el inglés-USA y el español. Por tanto, Tasker podía pronunciar la primera frase en inglés y la segunda en español. Al mismo tiempo, podía mostrar las frases por medio de una escena.

LeerIngles.jpg

Disclaimer: soy muy consciente de que los motores de voz tienen fallos significativos, pero hablan inglés bastante mejor que yo y también mejor que la señora Botella, así que me doy por contento.

He tenido bastante trabajo afinando un montón de detalles para que este tinglado funcione de forma correcta. Voy a explicar a grandes rasgos cuáles han sido los problemas y cómo los he resuelto.

En primer lugar he preparado las tareas importantes para que puedan ejecutarse como subtareas y de esa forma puedan procesar cualquier fichero de texto. La referencia del fichero es recibido como primer parámetro por la subtarea principal, llamada LeerIngles. En realidad, esta subtarea y las otras relacionadas también pueden probarse de forma individual: si no reciben un parámetro 1, establecen un nombre de fichero para funcionar en modo de prueba.

Una dificultad importante ya la habíamos descubierto en la conversación anterior (ya enlazada) respecto a que Tasker reconozca dónde acaba una frase y comienza la siguiente, cosa necesaria para saber cuáles palabras deben pronunciarse en inglés y cuáles en español. Hay que usar la acción DIVIDIR VARIABLE, pero no siempre se puede elegir el mismo carácter separador porque hay frases que no acaban con un punto sino con una interrogación/admiración, y por otro lado hay puntos que no son indicativos de final de frase (punto decimal para separar cifras, puntos suspensivos, etc).

En su momento, el compañero Maid450 propuso resolverlo con una expresión regular que era tan breve como prometedora pero luego la probé en diferentes condiciones y no funcionó siempre bien. Decidí hacerlo muy paso a paso, aunque eso me llevase un buen puñado de acciones, como era fácil suponer. Por ese motivo separé esas acciones en una tarea independiente. La (sub)tarea “principal” se llama LeerIngles, y cedía el control a una subtarea de segundo nivel, pasándole como primer parámetro el nombre del fichero.

Esta segunda subtarea usa bastantes acciones para analizar muy detalladamente los signos de puntuación del texto, eso le permite terminar haciendo la división de frases de la forma correcta. Tras cada frase, la tarea inserta un carácter ¥ (YEN) que luego puede usarse más fácilmente como un separador certero y rápido sin tener que volver a preocuparse de todos los detalles de las puntuaciones.
--The man has a wallet.¥ El hombre tiene una cartera.¥
--What is in the box?¥ ¿Qué hay en la caja?¥
Además, la tarea guardaba este nuevo texto “codificado” en un fichero que he llamado “ficheroYEN” (tiene el mismo nombre que el fichero de texto original, pero añadiendo YEN como “sufijo” del nombre). Cada vez que se ejecuta, la tarea comprueba si existe el ficheroYEN y si tiene una fecha de modificación que sea posterior a la fecha de modificación del fichero que contiene el texto original. En caso afirmativo basta leer el ficheroYEN y así nos encontramos con esta codificación ya preparada. En caso negativo hay que analizar detalladamente los signos de puntuación y grabar el ficheroYEN.

Todas las tareas de este proyecto tienen un nombre que comienza con el prefijo Leer, y esta tarea que divide las frases con el carácter YEN se llama LeerCodificarYEN.

Luego pensé que en algunos casos tal vez me interese utilizar textos que primero tuviesen todas sus frases en inglés y luego llevase un segundo bloque con esas mismas frases traducidas al español. Para esto, completé la tarea LeerCodificarYEN añadiendo otro conjunto de acciones: si en el archivo original se detectaba la palabra clave FININGLESINICIOESPANISH (Fin Inglés Inicio Espanish) había que reorganizar las frases intercalando una del primer grupo (inglés) y otra del segundo (español). Funciona como se ve en el siguiente ejemplo.
One.
Two. Three. Four.
FININGLESINICIOESPANISH
Uno. Dos.
Tres.
Cuatro.

One.¥ Uno.¥
--Two.¥ Dos.¥
--Three.¥ Tres.¥
--Four.¥ Cuatro.¥
Una vez que esta subtarea LeerCodificarYEN ha terminado su labor, devuelve a la (sub) tarea principal LeerInglés una matriz con un conjunto de variables, donde cada elemento es una línea que incluye una pareja de frases: primero la que está en inglés y luego la traducción al español.

Entonces, la tarea LeerInglés va cogiendo esos elementos de la matriz recibida, divide cada elemento en sus dos componentes (inglés y español) y los muestra en la escena. A continuación vocaliza dos veces la frase inglesa y lo hace lentamente para que pueda ser entendida por alguien que tiene bajo nivel de inglés. Luego vocaliza una vez la frase española (a velocidad normal). Finalmente vocaliza de nuevo la frase inglesa, también dos veces, pero ya a velocidad estándar, para irme familiarizando con una conversación normal. Y luego pasa al siguiente elemento de la matriz para continuar con otra pareja de frases.

Después de usar este sistema durante un tiempo me di cuenta de que estaba progresando mucho con la traducción directa de las frases, pero no estaba reforzando la traducción inversa (del español al inglés). Pensé que la tarea debería de elegir al azar algunas frases para presentarlas en traducción inversa. Introduje una variable %tradinversa para indicar el porcentaje de frases que deben ser traducidas de forma inversa. La tarea puede recibir un segundo parámetro con una expresión como TRADINVERSA=25 . Eso pondría la variable %tradinversa a 25 para que la traducción inversa se utilice en el 25 por ciento de las frases (se puede usar cualquier otra cifra entre 0 y 100). La tarea, a la hora de procesar cada pareja de frases, genera un número aleatorio con valores entre 1 y 99 y lo guarda en una variable llamada %traddirecta. A continuación se comparan las variables %traddirecta y %tradinversa: gana la que tenga un valor mayor.

Cuando se usa la traducción inversa lo que ocurre es lo siguiente: la escena no muestra la frase inglesa, solo muestra la frase española. Vocaliza la frase española, una sola vez. Vocaliza la frase inglesa una vez a velocidad lenta para que se entienda bien. Luego muestra la frase inglesa en la escena y finalmente la vocaliza por última vez pero a velocidad normal.

Ahora mismo tengo un fichero con más de 700 líneas, cada una con su frase en inglés y la traducción. Y lo habitual es que cada vez yo solo tenga diez o quince minutos para escuchar las frases; en ese tiempo solo me permite oír treinta o cuarenta parejas de frases. Había que darle a todas las frases la misma oportunidad así que añadí la posibilidad de que la lectura no comenzara en la primera línea sino en otra cualquiera. Para ello se puede añadir al segundo parámetro la palabra SALTOINICIAL; la tarea elegirá al azar un número de línea (dentro de los que hay en el archivo) y comenzará procesando esa línea para seguir con las siguientes.

Luego añadí la posibilidad de que las líneas no sean procesadas de forma secuencial sino aleatoriamente. Para eso, la palabra clave es ALEATORIOPONER, y con eso la tarea establece la variable %aleatorio a 1. En esas circunstancias, cuando se termina una línea no se busca la siguiente sino cualquiera elegida al azar.

Pensé que también sería buena idea admitir esos "comandos" entre las líneas del archivo de texto. Así, el archivo puede incluir líneas que contengan “órdenes” del tipo
ALEATORIOPONER, ALEATORIOQUITAR, ALEATORIOCAMBIAR, SALTOINICIAL y TRADINVERSA=XX

Esto me da más flexibilidad. Por ejemplo, puedo poner al principio del archivo las 20 líneas que tienen frases nuevas con las que quiero comenzar las sesiones de repaso de esta semana. Tras eso, en el archivo añado un ALEATORIOPONER y la tarea continuará eligiendo más líneas de manera aleatoria.

Dentro del archivo también se admite el “comando” NOLEER que indica a la tarea que no debe procesar esa línea. Lo uso cuando quiero añadir en el fichero algún comentario o explicación, y termino dicha línea con esa palabra clave para que la tarea busque otra línea.

Desde la escena también se pueden manejar algunas cosas. En la imagen siguiente he coloreado las tres zonas sensibles.

LeerEscena.jpg

En la zona izquierda (roja), una pulsación breve hará que la tarea vuelva a procesar la línea anterior (cuyo número ha sido memorizado); esto me permite volver a escuchar una pareja de frases.
En la zona izquierda (roja), una pulsación larga hará que la línea sea añadida a un fichero de errores, y eso lo hago cuando me doy cuenta de que esa línea contiene algún error (mecanográfico o de traducción) y en otro momento lo corregiré. En el fichero de errores se anota también la fecha y hora, así como el nombre del archivo que contiene la línea errónea, el número de la línea y su texto.

En la zona derecha (verde), una pulsación breve hará que la tarea deje las frases actuales y vaya a procesar otra línea con otras dos frases.
En la zona derecha (verde), una pulsación larga solo funcionará si está establecido el modo secuencial; sirve para saltar unas cuantas frases (150) de forma que continuaremos en otra zona del fichero.

En la zona inferior (marrón), una pulsación larga hará el equivalente al comando ALEATORIOCAMBIAR: si estaba establecido el orden aleatorio lo desactiva, y viceversa.
En la zona inferior (marrón), una pulsación breve finaliza la tarea.

En realidad la finalización de la tarea se hace por medio de otra tarea independiente llamada LeerStop que incluye acciones tales como Callar (para interrumpir una vocalización que estuviera en marcha), Detener Tarea LeerIngles, Destruir Escena y otras similares que podéis ver luego.

La tarea LeerStop también es invocada por otros perfiles, por ejemplo cuando se recibe una llamada telefónica.

He puesto empeño en usar el menor número posible de variables globales pero algunas son inevitables. La comunicación de la tarea con la escena se hace por medio de 3 variables globales:
- %LeerEscenaFrase1 contiene la frase en inglés, es establecido por la tarea y sirve para que sea mostrado por la escena.
- %LeerEscenaFrase2 contiene la frase en español, es establecido por la tarea y sirve para que sea mostrado por la escena.
- %LeerPulsado contiene una especie de código de retorno, establecido por la escena dependiendo de lo que se haya pulsado. Pulsación corta izquierda genera un código "a", larga izquierda genera "aa", corta derecha genera "s", larga derecha genera "ss", corta abajo genera "0", y larga abajo genera "00". La tarea detecta el contenido de esa variable y en consecuencia hace una cosa u otra. De esta forma reduzco al mínimo las acciones insertadas en la escena y puedo concentrar todas las acciones importantes en la tarea LeerIngles, que es la que tiene un montón de variables locales con todos los detalles de funcionamiento.

Ya he dicho que la tarea LeerIngles en realidad es una subtarea. La tarea principal es del tipo LeerInglesActual, y es una tarea muy pequeña como podéis ver luego. En realidad tengo más de una de este tipo, cada una para un archivo distinto y el identificador de ese archivo es pasado como parámetro a la tarea LeerIngles. Estas tareas principales son lanzadas mediante widgets, y los mismos widgets pueden ser utilizados para interrumpir el proceso. Hay una variable %LeerFuncionando que se pone a 1 cuando esto está funcionando, y en tal caso… volver a activar la el widget hace que la tarea principal no invoque a la subtarea LeerInges sino a LeerStop para detener el proceso.

Son un buen puñado de tareas, una escena y algunos widgets; no hay contextos ni perfiles aunque sería muy fácil hacer que esto se iniciara automáticamente al encender el coche o la moto: el recorrido del trabajo a casa es uno de los que utilizo habitualmente para repasar inglés de esta forma.

Hay otros muchos detalles interesantes. Por ejemplo, en la escena, si la frase española ocupa poco espacio se muestra debajo el número de la línea procesada y el número total de líneas que hay en el archivo (otras veces las frases no caben completas en el espacio reservado para ellas; ambos casos pueden verse en las imágenes de arriba).

El caso es que todos estos detalles hacen que me salgan unas tareas enormes, con hasta 170 acciones (record), que resultan muy poco manejables a la hora de hacer correcciones. Pero también muestran que con Tasker se pueden hacer cosas muy afinadas cuando se tiene paciencia.

LeerIngles (133)
Abortar Tarea Existente, No apagar
<Esta tarea vocaliza las frases de un fichero de texto indicado en el param1.
Tanto en el fichero como en el param2. admite las palabras clave NOLEER ALEATORIOPONER, ALEATORIOQUITAR, ALEATORIOCAMBIAR SALTOINICIAL TRADINVERSA=>
A1: Destino (de goto)
A2: Si (if) [ %par1 No ajust. ]
<Ruta y nombre.extensión del archivo para hacer pruebas. Cuidado con las mayúsculas.>
A3: Establecer variable [ Nombre:%par1 A: Download/Tasker/LeerInglesActual.txt Calcular:Apagado Añadir:Apagado ]
<variable para hacer pruebas>
A4: Establecer variable [ Nombre:%test A:1 Calcular:Apagado Añadir:Apagado ]
A5: Else
<La variable %LeerFuncionando es boleana, puede valer 1 ó 0 alternativamente, y se utiliza para detener la tarea cuando la tarea es lanzada por segunda vez. Esto funciona porque en las propiedades de la tarea se ha establecido el manejo de incompatibilidades para abortar la tarea existente>
A6: Establecer variable [ Nombre:%LeerFuncionando A:1- %LeerFuncionando Calcular:Encendido Añadir:Apagado ]
A7: Ir a acción [ Tipo:Etiqueta Acción Número:1 Etiqueta:EXIT ] Si (if) [ %LeerFuncionando = 0 ]
A8: Fin si (End if)
A9: Tiempo de espera de pantalla [ Segs:0 Mins:0 Horas:1 ]
A10: Volumen multimedia [ Nivel:15 Mostrar:Apagado Sonido:Apagado ]
A11: Volumen de Voz BT [ Nivel:15 Mostrar:Apagado Sonido:Apagado ]
A12: Establecer variable [ Nombre:%ficherotexto A:%par1 Calcular:Apagado Añadir:Apagado ]
A13: Establecer variable [ Nombre:%tradinversa A:0 Calcular:Encendido Añadir:Apagado ]
A14: Si (if) [ %par2 ~ *TRADINVERSA=* ]
A15: Separar variable [ Nombre:%par2 Separador:TRADINVERSA= Eliminar base:Apagado ]
A16: Sección de Variable [ Nombre:%par22 Desde:1 Longitud:3 Encajar:Apagado Almacenar Resultado en:%tradinversa ]
A17: Establecer variable [ Nombre:%tradinversa A:%tradinversa Calcular:Encendido Añadir:Apagado ]
A18: Fin si (End if)
A19: Realizar tarea [ Nombre:LeerCodificarYen Parar:Apagado Prioridad:10 Parámetro 1 (%par1):%ficherotexto Parámetro 2 (%par2): Devolver Valor de Variable:%frases ]
<Comprobar si la variable devuelta esta vacía.>
A20: Si (if) [ %frases ~ %* ]
A21: Notificación [ Título:LeerFrases Error Fichero Entrante Texto:Fichero de entrada no encontrado o incorrecto: %ficherotexto Icono:null Número:0 Permanente:Apagado Prioridad:3 ]
A22: Detener [ Con error:Apagado Tarea: ]
A23: Fin si (End if)
A24: Mostrar Escena [ Nombre:LeerIngles Mostrar como: Diálogo oscureciendo lo de detrás Posición Horizontal:100 Posición Vertical:100 Animación:Sistema Mostrar Botón Salida:Encendido Continuar tarea inmediatamente:Encendido ]
A25: Establecer variable [ Nombre:%LeerEscenaFrase1 A:Iniciando la lectura. Calcular:Apagado Añadir:Apagado ]
A26: Establecer variable [ Nombre:%LeerEscenaFrase2 A:00/00 Calcular:Apagado Añadir:Apagado ]
<Dividir la variable frases en sub-variables de una matriz frases() utilizando -- como separador.>
A27: Separar variable [ Nombre:%frases Separador:-- Eliminar base:Apagado ]
A28: Establecer variable [ Nombre:%numfrases A:%frases(#) Calcular:Encendido Añadir:Apagado ]
A29: Establecer variable [ Nombre:%numfrase A:1 Calcular:Encendido Añadir:Apagado ]
A30: Establecer variable [ Nombre:%aleatorio A:0 Calcular:Encendido Añadir:Apagado ]
A31: Si (if) [ %frases(1)%par2 ~ *SALTOINICIAL*/* ALEATORIOPONER* ]
<generar una variable aleatoria para no comenzar siempre por la primera frase>
A32: Variable aleatoria [ Nombre:%numfrase Mín:1 Máx:%numfrases ]
A33: Establecer variable [ Nombre:%numfrase A:%numfrase -floor(%numfrases/5) Calcular:Encendido Añadir:Apagado ]
A34: Si (if) [ %frases(1)%par2 ~ *ALEATORIOPONER* ]
A35: Establecer variable [ Nombre:%aleatorio A:1 Calcular:Encendido Añadir:Apagado ]
A36: Establecer variable [ Nombre:%LeerEscenaFrase1 A:Aleatorio Calcular:Apagado Añadir:Apagado ]
A37: Esperar [ MS:0 Segundos:1 Minutos:0 Horas:0 Días:0 ]
A38: Fin si (End if)
A39: Si (if) [ %frases(1)%par2 ~ *SALTOINICIAL* ]
<Informar de cual sera la primera frase procesada,>
A40: Establecer variable [ Nombre:%LeerEscenaFrase1 A:Leer inglés. Comenzando en la frase
%numfrase / %numfrases Calcular:Apagado Añadir:Apagado ]
A41: Decir [ Texto:Leer inglés. Comenzando en la frase %numfrase. Motor: Voz:com.google.android.tts:spa-esp Stream:3 Tono:5 Velocidad:5 Respect Audio Focus:Encendido Continuar tarea inmediatamente:Apagado ]
A42: Fin si (End if)
A43: Fin si (End if)
<OTRAFRASE>
A44: Destino (de goto)
A45: Establecer variable [ Nombre:%LeerPulsado A: off Calcular:Apagado Añadir:Apagado ]
A46: Establecer variable [ Nombre:%numfrase A:%numfrase+%numfrases Calcular:Encendido Añadir:Apagado ] Si (if) [ %numfrase < 1 ]
A47: Establecer variable [ Nombre:%numfrase A:%numfrase-%numfrases Calcular:Encendido Añadir:Apagado ] Si (if) [ %numfrase > %numfrases ]
<procesado de la frase>
A48: Si (if) [ %numfrase > 0 ]
A49: Establecer variable [ Nombre:%frase A:%frases(%numfrase) Calcular:Apagado Añadir:Apagado ]
A50: Ir a acción [ Tipo:Etiqueta Acción Número:1 Etiqueta:ALEATORIOPONER ] Si (if) [ %frase ~ *ALEATORIOPONER* ]
A51: Ir a acción [ Tipo:Etiqueta Acción Número:1 Etiqueta:ALEATORIOQUITAR ] Si (if) [ %frase ~ *ALEATORIOQUITAR* ]
A52: Ir a acción [ Tipo:Etiqueta Acción Número:1 Etiqueta:ALEATORIOCAMBIAR ] Si (if) [ %frase ~ *ALEATORIOCAMBIAR* ]
A53: Si (if) [ %frase ~ *TRADINVERSA=* ]
A54: Separar variable [ Nombre:%frase Separador:TRADINVERSA= Eliminar base:Apagado ]
A55: Sección de Variable [ Nombre:%frase2 Desde:1 Longitud:3 Encajar:Apagado Almacenar Resultado en:%tradinversa ]
A56: Establecer variable [ Nombre:%tradinversa A:%tradinversa Calcular:Encendido Añadir:Apagado ]
A57: Ir a acción [ Tipo:Etiqueta Acción Número:1 Etiqueta:FRASEFIN ]
A58: Fin si (End if)
A59: Ir a acción [ Tipo:Etiqueta Acción Número:1 Etiqueta:FRASEFIN ] Si (if) [ %frase ~ *NOLEER* ]
<Dividir la frase en sub-variables de una matriz frase() utilizando el carácter yen como carácter separador.>
A60: Separar variable [ Nombre:%frase Separador:¥ Eliminar base:Apagado ]
<si frase1 no tiene alguna vocal (variable vacia o sin texto real)>
A61: Si (if) [ %frase1 !~ *a*/*e*/*i*/*o*/*u* ]
A62: Establecer variable [ Nombre:%frase A:[frase1 sin vocales?] %frase Calcular:Apagado Añadir:Apagado ]
A63: Ir a acción [ Tipo:Etiqueta Acción Número:1 Etiqueta:FRASEERROR ]
A64: Fin si (End if)
A65: Ir a acción [ Tipo:Etiqueta Acción Número:1 Etiqueta:FRASEFIN ] Si (if) [ %LeerPulsado !~ off ]
A66: Reproducir Sonido Llamada [ Tipo:Notificación Sonido:facebook_ringtone_pop Stream:3 ]
A67: Establecer variable [ Nombre:%LeerEscenaFrase2 A:%frase2
%numfrase / %numfrases Calcular:Apagado Añadir:Apagado ]
A68: Ir a acción [ Tipo:Etiqueta Acción Número:1 Etiqueta:FRASEFIN ] Si (if) [ %LeerPulsado !~ off ]
A69: Variable aleatoria [ Nombre:%traddirecta Mín:1 Máx:99 ]
A70: Establecer variable [ Nombre:%traddirecta A:0 Calcular:Encendido Añadir:Apagado ] Si (if) [ %traddirecta < %tradinversa ]
A71: Si (if) [ %traddirecta > 0 ]
A72: Establecer variable [ Nombre:%LeerEscenaFrase1 A:%frase1 Calcular:Apagado Añadir:Apagado ]
A73: Decir [ Texto:%frase1. %frase1. Motor: Voz:com.google.android.tts:eng-usa Stream:3 Tono:5 Velocidad:3 Respect Audio Focus:Encendido Continuar tarea inmediatamente:Apagado ]
A74: Else
A75: Establecer variable [ Nombre:%LeerEscenaFrase1 A:%frase2 Calcular:Apagado Añadir:Apagado ]
A76: Fin si (End if)
A77: Ir a acción [ Tipo:Etiqueta Acción Número:1 Etiqueta:FRASEFIN ] Si (if) [ %LeerPulsado !~ off ]
A78: Ir a acción [ Tipo:Etiqueta Acción Número:1 Etiqueta:FRASEFIN ] Si (if) [ %test ~ 1 ]
A79: Establecer variable [ Nombre:%newvol A:%VOLM-2 Calcular:Encendido Añadir:Apagado ]
A80: Volumen multimedia [ Nivel:%newvol Mostrar:Apagado Sonido:Apagado ]
A81: Decir [ Texto:%frase2 Motor: Voz:com.google.android.tts:spa-esp Stream:3 Tono:5 Velocidad:5 Respect Audio Focus:Encendido Continuar tarea inmediatamente:Apagado ] Si (if) [ %frase2 !~ %frase* ]
A82: Establecer variable [ Nombre:%newvol A:%VOLM+2 Calcular:Encendido Añadir:Apagado ]
A83: Volumen multimedia [ Nivel:%newvol Mostrar:Apagado Sonido:Apagado ]
A84: Ir a acción [ Tipo:Etiqueta Acción Número:1 Etiqueta:FRASEFIN ] Si (if) [ %LeerPulsado !~ off ]
A85: Si (if) [ %traddirecta > 0 ]
A86: Decir [ Texto:%frase1. %frase1. Motor: Voz:com.google.android.tts:eng-usa Stream:3 Tono:5 Velocidad:5 Respect Audio Focus:Encendido Continuar tarea inmediatamente:Apagado ]
A87: Else
A88: Decir [ Texto:%frase1. Motor: Voz:com.google.android.tts:eng-usa Stream:3 Tono:5 Velocidad:3 Respect Audio Focus:Encendido Continuar tarea inmediatamente:Apagado ]
A89: Establecer variable [ Nombre:%LeerEscenaFrase1 A:%frase1 Calcular:Apagado Añadir:Apagado ]
A90: Decir [ Texto:%frase1. Motor: Voz:com.google.android.tts:eng-usa Stream:3 Tono:5 Velocidad:5 Respect Audio Focus:Encendido Continuar tarea inmediatamente:Apagado ]
A91: Fin si (End if)
A92: Fin si (End if)
<FRASEFIN>
A93: Destino (de goto)
A94: Reproducir Sonido Llamada [ Tipo:Notificación Sonido:facebook_ringtone_pop Stream:3 ]
A95: Establecer variable [ Nombre:%LeerEscenaFrase2 A:Pulsado (%LeerPulsado) Calcular:Apagado Añadir:Apagado ] Si (if) [ %test ~ 1 ]
A96: Esperar [ MS:0 Segundos:1 Minutos:0 Horas:0 Días:0 ] Si (if) [ %test ~ 1 ]
A97: Si (if) [ %LeerPulsado ~ 0 ]
A98: Establecer variable [ Nombre:%LeerEscenaFrase1 A:Pulsado 0 (%LeerPulsado) Calcular:Apagado Añadir:Apagado ] Si (if) [ %test ~ 1 ]
A99: Esperar [ MS:0 Segundos:1 Minutos:0 Horas:0 Días:0 ] Si (if) [ %test ~ 1 ]
A100: Ir a acción [ Tipo:Etiqueta Acción Número:1 Etiqueta:EXIT ]
A101: Fin si (End if)
A102: Si (if) [ %LeerPulsado ~ 00 ]
A103: Establecer variable [ Nombre:%LeerEscenaFrase1 A:Pulsado 00 (%LeerPulsado) Calcular:Apagado Añadir:Apagado ] Si (if) [ %test ~ 1 ]
A104: Esperar [ MS:0 Segundos:1 Minutos:0 Horas:0 Días:0 ] Si (if) [ %test ~ 1 ]
<ALEATORIOCAMBIAR>
A105: Destino (de goto)
A106: Si (if) [ %aleatorio ~ 1 ]
<ALEATORIOQUITAR>
A107: Destino (de goto)
A108: Si (if) [ %aleatorio ~ 1 ]
A109: Establecer variable [ Nombre:%aleatorio A:0 Calcular:Encendido Añadir:Apagado ]
A110: Establecer variable [ Nombre:%LeerEscenaFrase1 A:Secuencial Calcular:Apagado Añadir:Apagado ]
A111: Establecer variable [ Nombre:%LeerEscenaFrase2 A:. Calcular:Apagado Añadir:Apagado ]
A112: Esperar [ MS:0 Segundos:1 Minutos:0 Horas:0 Días:0 ]
A113: Fin si (End if)
A114: Else
<ALEATORIOPONER>
A115: Destino (de goto)
A116: Si (if) [ %aleatorio !~ 1 ]
A117: Establecer variable [ Nombre:%aleatorio A:1 Calcular:Encendido Añadir:Apagado ]
A118: Establecer variable [ Nombre:%LeerEscenaFrase1 A:Aleatorio Calcular:Apagado Añadir:Apagado ]
A119: Establecer variable [ Nombre:%LeerEscenaFrase2 A:. Calcular:Apagado Añadir:Apagado ]
A120: Esperar [ MS:0 Segundos:1 Minutos:0 Horas:0 Días:0 ]
A121: Fin si (End if)
A122: Fin si (End if)
A123: Ir a acción [ Tipo:Etiqueta Acción Número:1 Etiqueta:FRASESIGUIENTE ]
A124: Fin si (End if)
A125: Si (if) [ %LeerPulsado ~ a ]
A126: Establecer variable [ Nombre:%LeerEscenaFrase1 A:Pulsado a (%LeerPulsado) Calcular:Apagado Añadir:Apagado ] Si (if) [ %test ~ 1 ]
A127: Esperar [ MS:0 Segundos:1 Minutos:0 Horas:0 Días:0 ] Si (if) [ %test ~ 1 ]
A128: Ir a acción [ Tipo:Etiqueta Acción Número:1 Etiqueta:FRASESIGUIENTE ] Si (if) [ %numfraseanterior = 0 ]
A129: Establecer variable [ Nombre:%numfrasesiguiente A:%numfraseanterior Calcular:Encendido Añadir:Apagado ]
A130: Ir a acción [ Tipo:Etiqueta Acción Número:1 Etiqueta:FRASEFINULTIMO ]
A131: Fin si (End if)
A132: Si (if) [ %LeerPulsado ~ aa ]
A133: Establecer variable [ Nombre:%LeerEscenaFrase1 A:Pulsado aa (%LeerPulsado) Calcular:Apagado Añadir:Apagado ] Si (if) [ %test ~ 1 ]
A134: Esperar [ MS:0 Segundos:1 Minutos:0 Horas:0 Días:0 ] Si (if) [ %test ~ 1 ]
<FRASEERROR>
A135: Destino (de goto)
A136: Realizar tarea [ Nombre:LeerGuardarError Parar:Apagado Prioridad:10 Parámetro 1 (%par1):LeerIngles. %numfrase. %frase Parámetro 2 (%par2): Devolver Valor de Variable: ]
A137: Ir a acción [ Tipo:Etiqueta Acción Número:1 Etiqueta:FRASESIGUIENTE ]
A138: Fin si (End if)
A139: Si (if) [ %LeerPulsado ~ ss ]
A140: Establecer variable [ Nombre:%LeerEscenaFrase1 A:Pulsado ss (%LeerPulsado) Calcular:Apagado Añadir:Apagado ] Si (if) [ %test ~ 1 ]
A141: Esperar [ MS:0 Segundos:1 Minutos:0 Horas:0 Días:0 ] Si (if) [ %test ~ 1 ]
A142: Si (if) [ %aleatorio ~ 1 ]
A143: Ir a acción [ Tipo:Etiqueta Acción Número:1 Etiqueta:FRASESIGUIENTE ]
A144: Else
A145: Establecer variable [ Nombre:%numfrasesiguiente A:%numfrase+150 Calcular:Encendido Añadir:Apagado ]
A146: Ir a acción [ Tipo:Etiqueta Acción Número:1 Etiqueta:FRASEFINULTIMO ]
A147: Fin si (End if)
A148: Fin si (End if)
A149: Si (if) [ %LeerPulsado ~ s ]
A150: Establecer variable [ Nombre:%LeerEscenaFrase1 A:Pulsado s (%LeerPulsado) Calcular:Apagado Añadir:Apagado ] Si (if) [ %test ~ 1 ]
A151: Esperar [ MS:0 Segundos:1 Minutos:0 Horas:0 Días:0 ] Si (if) [ %test ~ 1 ]
A152: Ir a acción [ Tipo:Etiqueta Acción Número:1 Etiqueta:FRASESIGUIENTE ]
A153: Fin si (End if)
<si no se ha pulsado nada>
A154: Si (if) [ %LeerPulsado ~ off ]
A155: Establecer variable [ Nombre:%LeerEscenaFrase1 A:Sin pulsar (%LeerPulsado) Calcular:Apagado Añadir:Apagado ] Si (if) [ %test ~ 1 ]
<FRASESIGUIENTE>
A156: Destino (de goto)
A157: Establecer variable [ Nombre:%LeerEscenaFrase1 A:FRASE SIGUIENTE Calcular:Apagado Añadir:Apagado ] Si (if) [ %test ~ 1 ]
A158: Si (if) [ %aleatorio = 1 ]
<ALEATORIASIGUIENTE>
A159: Variable aleatoria [ Nombre:%numfrasesiguiente Mín:1 Máx:%numfrases ]
A160: Ir a acción [ Tipo:Etiqueta Acción Número:1 Etiqueta:ALEATORIASIGUIENTE ] Si (if) [ %numfrasesiguiente = %numfrase/%numfraseanterior ]
A161: Else
A162: Establecer variable [ Nombre:%numfrasesiguiente A:%numfrase+1 Calcular:Encendido Añadir:Apagado ]
A163: Fin si (End if)
A164: Fin si (End if)
<FRASEFINULTIMO>
A165: Destino (de goto)
A166: Establecer variable [ Nombre:%numfraseanterior A:%numfrase Calcular:Apagado Añadir:Apagado ]
A167: Establecer variable [ Nombre:%numfrase A:%numfrasesiguiente Calcular:Apagado Añadir:Apagado ]
A168: Ir a acción [ Tipo:Etiqueta Acción Número:1 Etiqueta:OTRAFRASE ]
<EXIT>
A169: Destino (de goto)
A170: Realizar tarea [ Nombre:LeerStop Parar:Encendido Prioridad:10 Parámetro 1 (%par1): Parámetro 2 (%par2): Devolver Valor de Variable: ]

LeerCodificarYen (77)
Abortar Tarea Existente
<Esta tarea tiene como entrada un fichero de texto (par1), lee su contenido en una variable, inserta caracteres ¥ (yen) para separar las distintas frases, y finalmente devuelve esa variable codificada.
Si el fichero contiene la palabra FININGLESINICIOESPANISH intercalara las frases inglesas previas y las españolas posteriores.>
A1: Destino (de goto)
<Si en el texto original hay una palabra FININGLESINICIOESPANISH , la tarea interpreta q el texto en ingles esta antes de eso, y q lo siguiente es la traducción; en tal caso, la tarea intercala las frases: cada frase inglesa seguida de su correspondiente traducción.>
A2: Destino (de goto)
A3: Si (if) [ %par1 No ajust. ]
<Ruta y nombre.extensión del archivo para hacer pruebas. Cuidado con las mayúsculas.>
A4: Establecer variable [ Nombre:%par1 A: Download/Tasker/LeerInglesNumeros.txt Calcular:Apagado Añadir:Apagado ]
<variable para hacer pruebas>
A5: Establecer variable [ Nombre:%test A:1 Calcular:Apagado Añadir:Apagado ]
A6: Fin si (End if)
A7: Establecer variable [ Nombre:%ficherotexto A:%par1 Calcular:Apagado Añadir:Apagado ]
<comprobar que existe el fichero de texto, entrante.>
A8: Prueba [ Tipo:File Type Datos:%ficherotexto Almacenar Resultado en:%filetype Continuar Tarea Tras Error:Encendido ]
A9: Si (if) [ %filetype !~ file ]
A10: Notificación [ Título:LeerFrases Error Fichero Entrante Texto:Fichero de entrada no encontrado: %ficherotexto Icono:null Número:0 Permanente:Apagado Prioridad:3 ]
A11: Detener [ Con error:Apagado Tarea: ]
A12: Fin si (End if)
<fecha del fichero texto>
A13: Prueba [ Tipo:File Modified Datos:%ficherotexto Almacenar Resultado en:%timestexto Continuar Tarea Tras Error:Encendido ]
A14: Si (if) [ %timestexto < 1 ]
A15: Notificación [ Título:LeerFrases Error TimesTexto Texto:Fecha de texto no reconocida: %timestexto Icono:null Número:0 Permanente:Apagado Prioridad:3 ]
A16: Detener [ Con error:Apagado Tarea: ]
A17: Fin si (End if)
A18: Establecer variable [ Nombre:%ficheroyen A:%ficherotexto Calcular:Apagado Añadir:Apagado ]
A19: Buscar y Reemplazar Contenido de Variable [ Variable:%ficheroyen Buscar:.txt Ignore Case:Encendido Multi-Line:Apagado One Match Only:Apagado Almacenar Coincidencias En: Reemplazar Coincidencias:Encendido Reemplazar Con: ]
A20: Establecer variable [ Nombre:%ficheroyen A:%ficheroyen¥.txt Calcular:Apagado Añadir:Apagado ]
<comprobar si existe el fichero codificado, saliente.>
A21: Prueba [ Tipo:File Type Datos:%ficheroyen Almacenar Resultado en:%filetype Continuar Tarea Tras Error:Encendido ]
A22: Si (if) [ %test ~ 1 ]
A23: Establecer variable [ Nombre:%codificar A:1 Calcular:Apagado Añadir:Apagado ]
A24: Else
A25: Si (if) [ %filetype !~ file ]
A26: Establecer variable [ Nombre:%codificar A:1 Calcular:Apagado Añadir:Apagado ]
A27: Else
<fecha del fichero saliente>
A28: Prueba [ Tipo:File Modified Datos:%ficheroyen Almacenar Resultado en:%timesyen Continuar Tarea Tras Error:Encendido ]
A29: Si (if) [ %timesyen < 1 ]
A30: Establecer variable [ Nombre:%codificar A:1 Calcular:Apagado Añadir:Apagado ]
A31: Else
A32: Establecer variable [ Nombre:%codificar A:1 Calcular:Apagado Añadir:Apagado ] Si (if) [ %timestexto > %timesyen ]
A33: Fin si (End if)
A34: Fin si (End if)
A35: Fin si (End if)
A36: Si (if) [ %codificar ~ 1 ]
<CODIFICAR>
A37: Destino (de goto)
A38: Flash [ Texto:Empezando a codificar. Largo:Encendido ] Si (if) [ %test ~ 1 ]
A39: Escribir archivo [ Archivo:%ficheroyen Texto:---- Añadir:Apagado Añadir Nueva Línea:Apagado Continuar Tarea Tras Error:Encendido ]
<comprobar si existe el fichero codificado, saliente.>
A40: Prueba [ Tipo:File Type Datos:%ficheroyen Almacenar Resultado en:%filetype Continuar Tarea Tras Error:Encendido ]
A41: Si (if) [ %filetype !~ file ]
A42: Notificación [ Título:LeerFrases Error Fich. Saliente Texto:Imposible grabar fich. Saliente %ficheroyen Icono:null Número:0 Permanente:Apagado Prioridad:3 ]
A43: Detener [ Con error:Apagado Tarea: ]
A44: Fin si (End if)
A45: Leer Archivo [ Archivo:%ficherotexto A la variable:%frases ]
A46: Establecer variable [ Nombre:%numero A:0 Calcular:Encendido Añadir:Apagado ]
<NUMERO>
A47: Destino (de goto)
<Reemplazar punto-numero por carácter de libra esterlina seguido del número.>
A48: Buscar y Reemplazar Contenido de Variable [ Variable:%frases Buscar:\.%numero Ignore Case:Apagado Multi-Line:Apagado One Match Only:Apagado Almacenar Coincidencias En: Reemplazar Coincidencias:Encendido Reemplazar Con:£%numero ]
A49: Sumar a variable [ Nombre:%numero Valor:1 Módulo (wrap around):0 ]
A50: Ir a acción [ Tipo:Etiqueta Acción Número:1 Etiqueta:NUMERO ] Si (if) [ %numero < 10 ]
<Reemplazar 3 puntos suspensivos (sucesivos) por un carácter de pi seguido de un carácter de yen>
A51: Buscar y Reemplazar Contenido de Variable [ Variable:%frases Buscar:\.\.\. Ignore Case:Apagado Multi-Line:Apagado One Match Only:Apagado Almacenar Coincidencias En: Reemplazar Coincidencias:Encendido Reemplazar Con:π¥ ]
<Reemplazar un punto por lo mismo seguido del carácter de yen.>
A52: Buscar y Reemplazar Contenido de Variable [ Variable:%frases Buscar:\. Ignore Case:Apagado Multi-Line:Apagado One Match Only:Apagado Almacenar Coincidencias En: Reemplazar Coincidencias:Encendido Reemplazar Con:.¥ ]
<Reemplazar el carácter de libra esterlina por un punto.>
A53: Buscar y Reemplazar Contenido de Variable [ Variable:%frases Buscar:£ Ignore Case:Apagado Multi-Line:Apagado One Match Only:Apagado Almacenar Coincidencias En: Reemplazar Coincidencias:Encendido Reemplazar Con:. ]
<Reemplazar el cierre de admiración por lo mismo seguido del carácter de yen.>
A54: Buscar y Reemplazar Contenido de Variable [ Variable:%frases Buscar:π Ignore Case:Apagado Multi-Line:Apagado One Match Only:Apagado Almacenar Coincidencias En: Reemplazar Coincidencias:Encendido Reemplazar Con:... ]
<Reemplazar el carácter de puntos suspensivos (un carácter) por lo mismo seguido del carácter de yen.>
A55: Buscar y Reemplazar Contenido de Variable [ Variable:%frases Buscar:… Ignore Case:Apagado Multi-Line:Apagado One Match Only:Apagado Almacenar Coincidencias En: Reemplazar Coincidencias:Encendido Reemplazar Con:…¥ ]
<Reemplazar el cierre de admiración por lo mismo seguido del carácter de yen.>
A56: Buscar y Reemplazar Contenido de Variable [ Variable:%frases Buscar:! Ignore Case:Apagado Multi-Line:Apagado One Match Only:Apagado Almacenar Coincidencias En: Reemplazar Coincidencias:Encendido Reemplazar Con:!¥ ]
<Reemplazar el cierre de interrogación por lo mismo seguido del carácter de yen.>
A57: Buscar y Reemplazar Contenido de Variable [ Variable:%frases Buscar:\? Ignore Case:Apagado Multi-Line:Apagado One Match Only:Apagado Almacenar Coincidencias En: Reemplazar Coincidencias:Encendido Reemplazar Con:?¥ ]
A58: Establecer variable [ Nombre:%frases A:%frases¥ Calcular:Apagado Añadir:Apagado ]
<Reemplazar varios caracteres de yen sucesivos por uno solo>
A59: Buscar y Reemplazar Contenido de Variable [ Variable:%frases Buscar:¥¥+ Ignore Case:Apagado Multi-Line:Apagado One Match Only:Apagado Almacenar Coincidencias En: Reemplazar Coincidencias:Encendido Reemplazar Con:¥ ]
<Codificación acabada. grabar resultado>
A60: Destino (de goto)
A61: Escribir archivo [ Archivo:%ficheroyen Texto:%frases Añadir:Apagado Añadir Nueva Línea:Apagado ]
A62: Flash [ Texto:Terminado de codificar Largo:Apagado ] Si (if) [ %test ~ 1 ]
A63: Else
A64: Flash [ Texto:No es necesario codificar. Existe archivo yen válido. Largo:Encendido ] Si (if) [ %test ~ 1 ]
A65: Leer Archivo [ Archivo:%ficheroyen A la variable:%frases ]
A66: Fin si (End if)
<Ya tenemos la variable %frases codificada con marcas yen>
A67: Destino (de goto)
<Ver si el texto incluye la palabra FININGLESINICIOESPANISH indicadora de q primero están todas las frases inglesas y luego todas las españolas>
A68: Destino (de goto)
A69: Separar variable [ Nombre:%frases Separador:FININGLESINICIOESPANISH Eliminar base:Apagado ]
A70: Establecer variable [ Nombre:%numbloques A:%frases(#) Calcular:Encendido Añadir:Apagado ]
A71: Si (if) [ %numbloques = 2 ]
A72: Establecer variable [ Nombre:%ingles A:%frases1 Calcular:Apagado Añadir:Apagado ]
A73: Separar variable [ Nombre:%ingles Separador:¥ Eliminar base:Apagado ]
A74: Establecer variable [ Nombre:%numingles A:%ingles(#)-1 Calcular:Encendido Añadir:Apagado ]
A75: Establecer variable [ Nombre:%español A:%frases2 Calcular:Apagado Añadir:Apagado ]
A76: Separar variable [ Nombre:%español Separador:¥ Eliminar base:Apagado ]
A77: Establecer variable [ Nombre:%numespañol A:%español(#) Calcular:Encendido Añadir:Apagado ]
A78: Establecer variable [ Nombre:%ret A:
Calcular:Apagado Añadir:Apagado ]
A79: Establecer variable [ Nombre:%frasecombi A:%ingles(1)¥%español(1)¥ Calcular:Apagado Añadir:Apagado ]
A80: Buscar y Reemplazar Contenido de Variable [ Variable:%frasecombi Buscar:%ret Ignore Case:Apagado Multi-Line:Apagado One Match Only:Apagado Almacenar Coincidencias En: Reemplazar Coincidencias:Encendido Reemplazar Con: ]
A81: Escribir archivo [ Archivo:%ficheroyen Texto:%frasecombi Añadir:Apagado Añadir Nueva Línea:Encendido ]
A82: Establecer variable [ Nombre:%avance A:2 Calcular:Apagado Añadir:Apagado ]
<GRABAOTRAFRASE>
A83: Destino (de goto)
A84: Establecer variable [ Nombre:%frasecombi A:%ingles(%avance)¥%español(%avance)¥ Calcular:Apagado Añadir:Apagado ]
A85: Buscar y Reemplazar Contenido de Variable [ Variable:%frasecombi Buscar:%ret Ignore Case:Apagado Multi-Line:Apagado One Match Only:Apagado Almacenar Coincidencias En: Reemplazar Coincidencias:Encendido Reemplazar Con: ]
A86: Escribir archivo [ Archivo:%ficheroyen Texto:--%frasecombi Añadir:Encendido Añadir Nueva Línea:Encendido ]
A87: Sumar a variable [ Nombre:%avance Valor:1 Módulo (wrap around):0 ]
A88: Ir a acción [ Tipo:Etiqueta Acción Número:1 Etiqueta:GRABAOTRAFRASE ] Si (if) [ %avance < %numingles+1 ]
A89: Leer Archivo [ Archivo:%ficheroyen A la variable:%frases ]
A90: Si (if) [ %numingles != %numespañol ]
A91: Notificación [ Título:LeerFrases Error Reordenando Texto:Frases en ingles %ingles(#); en español %español(#) Icono:null Número:0 Permanente:Apagado Prioridad:3 ]
A92: Detener [ Con error:Apagado Tarea: ]
A93: Fin si (End if)
A94: Fin si (End if)
<Dividir la variable frases en sub-variables de una matriz frases() utilizando el carácter yen como carácter separador.>
A95: Separar variable [ Nombre:%frases Separador:¥ Eliminar base:Apagado ]
A96: Establecer variable [ Nombre:%numfrases A:%frases(#) Calcular:Encendido Añadir:Apagado ]
A97: Si (if) [ %numfrases < 3 ]
A98: Notificación [ Título:LeerFrases Error: Pocas Frases Texto:Fichero de entrada con menos de 3 frases: %ficherotexto Icono:null Número:0 Permanente:Apagado Prioridad:3 ]
A99: Detener [ Con error:Apagado Tarea: ]
A100: Fin si (End if)
A101: Devolver [ Valor:%frases Parar:Encendido ]

LeerInglesActual (125)
Abortar Tarea Existente
A1: Si (if) [ %LeerFuncionando ~ 1 ]
A2: Realizar tarea [ Nombre:LeerStop Parar:Apagado Prioridad:10 Parámetro 1 (%par1): Parámetro 2 (%par2): Devolver Valor de Variable: ]
A3: Else
A4: Realizar tarea [ Nombre:LeerStop Parar:Apagado Prioridad:10 Parámetro 1 (%par1): Parámetro 2 (%par2): Devolver Valor de Variable: ]
A5: Realizar tarea [ Nombre:LeerIngles Parar:Encendido Prioridad:1 Parámetro 1 (%par1): Download/Tasker/LeerInglesActual.txt Parámetro 2 (%par2): Devolver Valor de Variable: ]
A6: Fin si (End if)

LeerStop (84)
Abortar Tarea Existente
<Acciones finales para terminar las tareas correctamente y cerrar la escena>
A1: Destino (de goto)
<Detener la acción DECIR que todavía pueda estar vocalizando.>
A2: Callar
A3: Detener [ Con error:Apagado Tarea:LeerEspañol ]
A4: Detener [ Con error:Apagado Tarea:LeerIngles ]
A5: Destruir Escena [ Nombre:LeerEspañol ]
A6: Destruir Escena [ Nombre:LeerIngles ]
A7: Tiempo de espera de pantalla [ Segs:0 Mins:1 Horas:0 ]
A8: Si (if) [ %LeerFuncionando ~ 1 ]
<informar de que hemos acabado.>
A9: Establecer variable [ Nombre:%frase A:Fin Calcular:Apagado Añadir:Apagado ]
A10: Flash [ Texto:%frase Largo:Apagado ]
A11: Volumen multimedia [ Nivel:8 Mostrar:Apagado Sonido:Apagado ]
A12: Decir [ Texto:%frase Motor: Voz:com.google.android.tts:spa-esp Stream:3 Tono:5 Velocidad:5 Respect Audio Focus:Encendido Continuar tarea inmediatamente:Apagado ]
A13: Volumen multimedia [ Nivel:13 Mostrar:Apagado Sonido:Apagado ]
A14: Fin si (End if)
A15: Establecer variable [ Nombre:%LeerFuncionando A:0 Calcular:Encendido Añadir:Apagado ]

Respecto a la escena, su construcción es bastante simple. Transcribo las acciones asociadas a cada evento.

Izquierda (zona roja). Pulsación corta.
- Callar.
- Establecer variable %LeerPulsado a a (anterior)
- Establecer variable %LeerEscenaFrase1 a %LeerPulsado

Izquierda (zona roja). Pulsación larga.
- Callar.
- Establecer variable %LeerPulsado a aa (anterior anterior)
- Establecer variable %LeerEscenaFrase1 a %LeerPulsado

Derecha (zona verde). Pulsación corta.
- Callar.
- Establecer variable %LeerPulsado a s (siguiente)
- Establecer variable %LeerEscenaFrase1 a %LeerPulsado

Derecha (zona verde). Pulsación larga.
- Callar.
- Establecer variable %LeerPulsado a ss (siguiente siguiente)
- Establecer variable %LeerEscenaFrase1 a %LeerPulsado

Abajo (zona marrón). Pulsación corta.
- Callar.
- Establecer variable %LeerPulsado a 0 (cero)
- Establecer variable %LeerEscenaFrase1 a %LeerPulsado

Abajo (zona marrón). Pulsación larga.
- Callar.
- Establecer variable %LeerPulsado a 00 (cero cero)
- Establecer variable %LeerEscenaFrase1 a %LeerPulsado
__________________
Firmado: Caravantes, miembro del equipo que promueve el Subforo de Tasker

Última edición por Caravantes Día 17/02/14 a las 11:07:07.
Responder Con Cita
Los siguientes 4 usuarios han agradecido a Caravantes su comentario:
[ Mostrar/Ocultar listado de agradecimientos ]


  #2  
Viejo 17/02/14, 11:55:38
Array

[xs_avatar]
carcacia carcacia no está en línea
Miembro del foro
 
Fecha de registro: feb 2009
Localización: Coruña
Mensajes: 258
Modelo de smartphone: Bq Aquaris 5

Que crack. Parece aparentemente sencilla, pero menuda complejidad por dentro. Ojalá algún día sea capaz de llegar a estos niveles con las mías.

 Cita: Originalmente Escrito por Caravantes Ver Mensaje
Aviso de que esto puede ser un poco pesado (largo) y además no creo que tenga interés directo para nadie más que para mí. Lo muestro porque los más apasionados de Tasker quizá puedan sacar de aquí algunas ideas para exportar a otras tareas
Yo algo ya he extraído, gracias.
__________________
Firmado: Carcacía
El tasker ha sustituido al Candy Crush en mis ratos libres
Responder Con Cita
Gracias de parte de:
  #3  
Viejo 10/04/14, 16:27:03
Array

[xs_avatar]
fus fus no está en línea
Usuario muy activo
 
Fecha de registro: dic 2010
Localización: Polsovia
Mensajes: 1,503
Modelo de smartphone: Samsung Galaxy Nexus
Tu operador: Vodafone
ER MY GAWD
Cada día me sorprendo más de las cosas que hacéis
__________________
Tutorial sobre el mundo de las roms GNexus
Las OTA's llevan a la ira, la ira lleva al flaseo, el flaseo lleva al lado oscuro de Android.
Responder Con Cita
Gracias de parte de:
  #4  
Viejo 10/04/14, 19:39:58
Array

[xs_avatar]
sowed sowed no está en línea
Usuario muy activo
· Votos compra/venta: (10)
 
Fecha de registro: nov 2008
Localización: Valencia
Mensajes: 4,965
Modelo de smartphone: S20 FE
Tu operador: Vodafone
@Caravantes es realmente espectacular lo que hace
__________________
Responder Con Cita
Gracias de parte de:
  #5  
Viejo 28/11/14, 22:26:51
Array

[xs_avatar]
geek1 geek1 no está en línea
Miembro del foro
 
Fecha de registro: ago 2011
Mensajes: 144
Modelo de smartphone: iphone 6s
Tu operador: Vodafone
Buf, que trabajo! te sale a cuenta programar directamente una aplicación android, no?
Enhorabuena de todos modos
__________________
Responder Con Cita
  #6  
Viejo 29/11/14, 01:49:33
Array

[xs_avatar]
emiegna emiegna no está en línea
Usuario muy activo
 
Fecha de registro: may 2014
Mensajes: 769
Modelo de smartphone: Oneplus 12/RAM 16GB/ROM 512 GB
Tu operador: Lowi
No se ni por donde empezar... Ufff. Este Caravantes cada día me sorprende mas. A ver, se que lo mas importante para ti no es lo que te voy a decir, pero es que lo tuyo es impresionante, al menos para mi. Me he pegado semanas para crear una tarea de entrada de unas 60 acciones y lo mas importante, que funcione correctamente, y vas tu y creas una de mas de 160 acciones, complejas... todas perfectamente relacionadas, todas con el mas perfecto sentido,... killo (como decimos en mi pueblo) me quito el sombrero contigo, y cada día más.
Responder Con Cita
  #7  
Viejo 29/11/14, 02:11:49
Array

[xs_avatar]
Caravantes Caravantes no está en línea
Usuario muy activo
· Votos compra/venta: (1)
 
Fecha de registro: feb 2011
Mensajes: 2,200
Modelo de smartphone: Samsung Galaxy S9
Tu operador: Lowi
Gracias por los elogios, a todos: carcacia, fus, sowed, geek1 y emiegna.
Bueno, este tipo de cosas son las que se me dan especialmente bien, y me divierto con ellas, son como un reto en el que vas superando dificultades y ajustando detalles al milímetro para que todo quede perfecto. Hay otras muchas cosas en las que soy más torpe que la media, o sea que no hay mucho motivo para celebraciones. Ciertamente, las tareas grandes (40 acciones o más) se vuelven tediosas de mantener, cada vez que quiero modificar algo pierdo mucho tiempo en hacer scroll y en localizar el grupo de acciones que voy a corregir, eso es incómodo (y tienes más probabilidades de cometer errores), y esa es una de las razones para intentar dividirlo todo en varias tareas, para que resulten menos monstruosas.
__________________
Firmado: Caravantes, miembro del equipo que promueve el Subforo de Tasker
Responder Con Cita
Gracias de parte de:
Respuesta

Estás aquí
Regresar   Portal | Indice > Todo sobre Android > Otro software para Android > Tasker



Hora actual: 10:00:51 (GMT +2)



User Alert System provided by Advanced User Tagging (Lite) - vBulletin Mods & Addons Copyright © 2025 DragonByte Technologies Ltd.

Contactar por correo / Contact by mail / 邮件联系 /