Ver Mensaje Individual
  #8  
Viejo 10/06/15, 22:57:55
Avatar de WillyWeb
WillyWeb WillyWeb no está en línea
Usuario muy activo
Mensajes: 2,067
 
Fecha de registro: dic 2008
Localización: Hoy aquí y mañana allí
Mensajes: 2,067
Modelo de smartphone: OnePlus 3T | Xiaomi 9T Pro
Versión de ROM: OxygenOS 9.0.6 | MIUI 12.5.1
Versión de Radio: Stock
Tu operador: Vodafone
Mencionado: 75 comentarios
Tagged: 3 hilos
Sistema de grabación de llamadas

Aquí lo tienes ... espero que te resulte de utilidad

Mi sistema tiene tres perfiles (LlamadaE, LlamadaS y LlamadaC) y una tarea (Llamada) asociada a esos tres perfiles.

Estos son los tres perfiles...

Perfil: LlamadaE (111)
Estado: Llamada [ Tipo:Entrante Número:* ]
Evento: Teléfono descolgado

Perfil: LlamadaS (222)
Estado: Llamada [ Tipo:Saliente Número:* ]
Evento: Teléfono descolgado

Perfil: LlamadaC (333)
Evento: Teléfono inactivo


* Se puede cambiar sus nombres siempre que se mantenga la última letra mayúscula, en otro caso será necesario revisar la tarea.

El propósito de cada uno de ellos es evidente por sus contextos. Lo único digno de mención es que me he visto obligado a usar el evento de teléfono descolgado como disparador porque durante mis pruebas con el estado de llamada (entrante, saliente o cualquiera) solamente se registraba el audio de un interlocutor (el otro o yo). Curiosamente al activar la grabación con el evento de teléfono descolgado se registraba el audio de ambos interlocutores perfectamente.

El tercer perfil está motivado porque al no poder usar el estado de la llamada ya no es posible usar el sistema de tarea de entrada/salida para iniciar/parar la grabación, así que no queda otra para detectar el fin de la llamada.

Y antes de que alguien lo pregunte ... ¿si el estado de la llamada no me vale por qué lo uso en los dos primeros perfiles? ... Pues la verdad es que no es imprescindible, pero he modificado el sistema recientemente por dos motivos; así puedo activar la grabación de las llamadas entrantes y salientes por separado, y en la tarea se hace más sencillo saber si la llamada es entrante o saliente.

Aclarado el tema de los perfiles (o eso espero ) seguimos con la tarea, pero antes unas premisas...
  • Lo quería hacer todo en una sola tarea aunque en realidad son dos diferentes (inicio y fin de grabación)
  • No he querido usar variables globales para pasar información efímera de la tarea de inicio a la de fin de grabación
  • El formato del nombre del archivo de grabación es: AAAAMMDD HHMMSS TIPO NÚMERO NOMBRE (TIPO es la letra E o S dependiendo de si la llamada es entrante/saliente

Llamada (666)
A1: Establecer variable [ Nombre:%carpeta A:%MisCosas/Llamadas Calcular:Apagado Añadir:Apagado ]
A2: Establecer variable [ Nombre:%datos A:%carpeta/datos.llamada.txt Calcular:Apagado Añadir:Apagado ]

A3: Si (if) [ %caller1 ~ *E/*S/ui ]
A4: Establecer variable [ Nombre:%tipo A:E Calcular:Apagado Añadir:Apagado ] Si (if) [ %caller1 ~ *E ]
A5: Establecer variable [ Nombre:%tipo A:S Calcular:Apagado Añadir:Apagado ] Si (if) [ %caller1 ~ *S/ui ]
A6: Establecer variable [ Nombre:%date A:%DATE Calcular:Apagado Añadir:Apagado ]
A7: Separar variable [ Nombre:%date Separador:- Eliminar base:Apagado ]
A8: Establecer variable [ Nombre:%amd A:%date3-%date2-%date1 Calcular:Apagado Añadir:Apagado ]
A9: Establecer variable [ Nombre:%seg A:%TIMES % 60 Calcular:Encendido Añadir:Apagado ]
A10: Establecer variable [ Nombre:%seg A:0%seg Calcular:Apagado Añadir:Apagado ] Si (if) [ %seg < 10 ]
A11: Establecer variable [ Nombre:%hms A:%TIME.%seg Calcular:Apagado Añadir:Apagado ]
A12: Establecer variable [ Nombre:%graba A:%amd %hms %tipo Calcular:Apagado Añadir:Apagado ]
A13: Grabar audio [ Archivo:%carpeta/%graba Origen:Llamada Tamaño Máx:0 Códec:AMR Narrowband Formato:AMR Narrowband ]
A14: Escribir archivo [ Archivo:%datos Texto:%tipo
%amd
%hms
%graba Añadir:Apagado Añadir Nueva Línea:Encendido ]
A15: Fin si (End if)

A16: Si (if) [ %caller1 ~ *C/ui ]
A17: Detener grabación audio
A18: Probar Archivo [ Tipo:Tipo Datos:%datos Almacenar Resultado en:%archivo Usar Root:Apagado Continuar Tarea Tras Error:Encendido ]
A19: Detener [ Con error:Apagado Tarea: ] Si (if) [ %archivo No ajust. ]
A20: Leer línea [ Archivo:%datos Línea:1 A la variable:%tipo ]
A21: Leer línea [ Archivo:%datos Línea:2 A la variable:%amd ]
A22: Leer línea [ Archivo:%datos Línea:3 A la variable:%hms ]
A23: Leer línea [ Archivo:%datos Línea:4 A la variable:%graba ]
A24: Eliminar archivo [ Archivo:%datos Nivel de Borrado:0 Usar Root:Apagado Continuar Tarea Tras Error:Encendido ]
A25: Si (if) [ %tipo ~ E ]
A26: Establecer variable [ Nombre:%date A:%CDATE Calcular:Apagado Añadir:Apagado ]
A27: Establecer variable [ Nombre:%time A:%CTIME Calcular:Apagado Añadir:Apagado ]
A28: Establecer variable [ Nombre:%num A:%CNUM Calcular:Apagado Añadir:Apagado ]
A29: Establecer variable [ Nombre:%name A:%CNAME Calcular:Apagado Añadir:Apagado ]
A30: Else Si (if) [ %tipo ~ S ]
A31: Esperar [ MS:0 Segundos:1 Minutos:0 Horas:0 Días:0 ]
A32: Establecer variable [ Nombre:%date A:%CODATE Calcular:Apagado Añadir:Apagado ]
A33: Establecer variable [ Nombre:%time A:%COTIME Calcular:Apagado Añadir:Apagado ]
A34: Establecer variable [ Nombre:%num A:%CONUM Calcular:Apagado Añadir:Apagado ]
A35: Establecer variable [ Nombre:%name A:%CONAME Calcular:Apagado Añadir:Apagado ]
A36: Fin si (End if)
A37: Flash [ Texto:%tipo %date %time
%num %name Largo:Encendido ]
A38: Establecer variable [ Nombre:%name A: Desconocido Calcular:Apagado Añadir:Apagado ] Si (if) [ %num ~ %name ]
A39: Establecer variable [ Nombre:%archivo A:%amd %hms %tipo %num %name Calcular:Apagado Añadir:Apagado ]
A40: Mover [ Desde:%carpeta/%graba.amr A:%carpeta/%archivo.amr Usar Root:Apagado Continuar Tarea Tras Error:Encendido ]
A41: Fin si (End if)


La tarea que inicia la grabación comienza en A3 y termina en A15. La que para la grabación comienza en A16 y termina en A41. Las acciones A1 y A2 definen variables comunes a las dos tareas. En A1 utilizo una de las pocas variables globales que tengo definidas en la que guardo un nombre de carpeta común a varias tareas y que resulta bastante evidente. Que cada uno ajuste esa acción a su configuración.

Las tareas A14 y A37 tienen retornos de carro en su interior, por eso tienen ese aspecto.

Al iniciarse una llamada (A3): se determina de qué tipo es (A4-A5), se compone la parte del nombre AAAAMMDD (A6-A8), se compone la parte del nombre HHMMSS (A9-A11), se compone un nombre temporal de archivo de grabación (A12), se inicia la grabación en ese archivo (A13) y se guardan todos los datos anteriores en un archivo de texto (A14). En este punto la tarea termina y no queda ningún perfil activo.

Al terminar la llamada (A16): se detiene la grabación (A17), se recuperan los datos del archivo de texto y se elimina (A18-A24), dependiendo del tipo de llamada se obtienen los datos de las correspondientes variables globales (A25-A29 para entrantes) (A30-A35 para salientes), se muestran los datos en un flash (A37), se evita repetir el número dos veces si no se tiene un nombre (A38), se compone un nombre de archivo de grabación definitivo con todos los datos (A39), y se nombra el archivo de grabación temporal con el nombre definitivo. En este punto la tarea termina y no queda ningún perfil activo.

¿Por qué las acciones A19 y A24? ... el evento de teléfono inactivo no sólo puede darse como consecuencia de colgar tras una llamada y esas dos acciones ayudan a controlar esa situación.

¿Por qué la pausa de A31? ... en el caso de las llamadas salientes parece que Tasker tarda un poco en actualizar las correspondientes variables globales con los datos de la llamada después de colgar y con esa pequeña pausa se solventa.

¿De dónde sale la variable %caller1? ... es un array local que Tasker mantiene automáticamente y que contiene toda la secuencia de llamadas entre perfiles y tareas. El valor %caller1 tiene el nombre del perfil desde el que se ha llamado a la tarea. En algunas de las acciones en que se comprueba el valor de %caller1 he añadido también un "ui" (user interface) para poder hacer pruebas directamente mientras estaba editando la tarea sin tener que hacer o recibir llamadas.

Eso es todo. Hasta la próxima ...

Última edición por WillyWeb Día 11/06/15 a las 20:05:42
Responder Con Cita
Los siguientes 6 usuarios han agradecido a WillyWeb su comentario:
[ Mostrar/Ocultar listado de agradecimientos ]