IRO UTSUSHI
Una aplicación que nunca te pide que pongas nombre a lo que sientes. Deja caer color sobre el agua, remuévelo con el dedo y el movimiento de tu mano se queda ahí, convertido en una sola imagen.
Disponible en App StoreQué puedes hacer
- Dejar caer color y remover … Deja caer sobre el agua hasta cinco colores de una paleta de seis y remuévelos con el dedo hasta formar una sola imagen. Las dos paletas, «colores serenos» y «colores vivos», se pueden cambiar incluso después de haber soltado el color.
- Sin palabras ni categorías … No hay una lista de estados de ánimo entre los que elegir, ni una etiqueta que añadir después. Solo queda el rastro del color y del movimiento del dedo.
- Hasta 60 segundos por grabación … El final se anuncia con ondas, un destello y sonido. Nunca se recurre a la vibración para meterte prisa.
- Cuatro medidas del movimiento … Velocidad (la mediana de la velocidad instantánea), amplitud (distancia media respecto al centro de gravedad), variación (con qué frecuencia cambias de dirección, más la dispersión de la velocidad) y dinámica. En la pantalla de resultados están ocultas de forma predeterminada: una aplicación que se niega a clasificar no debería empezar por una puntuación.
- Reproducir después … El agua se reconstruye a partir de la secuencia de toques guardada y se reproduce a 1× o 2×, con avance y retroceso. El recorrido del dedo y los puntos que tocaste pueden dibujarse sobre el agua.
- Exportar y compartir … Exporta en MP4 a 30 fps con sonido, o en PNG. El historial se pasa deslizando arriba y abajo, y permite borrar varias grabaciones a la vez.
- El sonido se genera dentro de la aplicación … El punto donde tocas se convierte en una nota de una escala pentatónica; la rapidez del movimiento, en volumen y en el brillo de los armónicos. Hay cinco timbres: teclas suaves, kalimba, arpa, pad de cuerdas y armónica de cristal.
- Accesibilidad y diez idiomas … Pensada sobre todo para personas con baja visión, con compatibilidad con Texto dinámico, VoiceOver, «Aumentar contraste», «Reducir transparencia» y «Reducir movimiento». Disponible en japonés, inglés, español, francés, coreano, chino tradicional, portugués de Brasil, alemán, italiano y vietnamita.
Cómo está hecha
| Aplicación | Swift + SwiftUI, escrita como App Package de Swift Playgrounds, sin ninguna dependencia de paquetes externos. |
|---|---|
| Agua | Una simulación de fluidos escrita en Metal. El campo de velocidades, la proyección de presión, la advección, el refuerzo de vorticidad y la mezcla del pigmento se calculan en la GPU. |
| Pigmento | Se mantiene como partículas lagrangianas y se superpone con mezcla sustractiva según la ley de Beer–Lambert. Al ser partículas, no se difuminan por difusión con el paso del tiempo. |
| Aspecto | Refracción y reflejos especulares a partir de normales obtenidas analíticamente del campo de alturas del agua, más un ruido granular y un tramado que evita el bandeado. |
| Entrada | Se toma de los eventos en bruto de UIKit y se pasan al fluido todos los toques agrupados (coalesced) de cada fotograma. Se registran, reproducen y miden hasta cinco toques simultáneos como trazos independientes, uno por dedo. |
| Almacenamiento | La lista del historial guarda en JSON solo información ligera; la imagen es un único PNG; la secuencia de toques es binario de ancho fijo comprimido con LZFSE, en un directorio propio por grabación. |
| Reproducción y exportación | El agua se reconstruye volviendo a ejecutar la simulación desde los pasos guardados. El MP4 no es una grabación de pantalla: los fotogramas se recomponen a partir de esos pasos y se escriben a 30 fps. |
| Sonido | Sintetizado dentro de la aplicación, en escala pentatónica y con hasta 16 voces. No hay archivos de audio. |
| Autocomprobaciones | Como el entorno no admite XCTest, en su lugar se ejecuta al arrancar en depuración un conjunto de comprobaciones propias (SelfChecks.swift). |
| Cifrado | Ninguno; la respuesta sobre export compliance se incluye con la aplicación. |
Lo interesante por dentro
La estela sigue girando después de que pase el dedo
La advección lleva una corrección de MacCormack, que conserva los vórtices finos que la advección semilagrangiana simple borra. El dedo no empuja el agua: deja caer un par de vórtices de rotación opuesta a lo largo de la dirección del arrastre, de modo que el agua sigue girando un rato después de que el dedo se haya ido. Todos los coeficientes de amortiguación y de seguimiento están expresados por segundo, así que el movimiento es el mismo en un dispositivo a 60 Hz y en uno a 120 Hz.
Separar la onda que se ve de la onda que mueve
La intensidad visible de una onda y su efecto sobre el pigmento son parámetros distintos. Y la onda mueve directamente la posición del pigmento, no su velocidad. La velocidad del pigmento se devuelve cada fotograma hacia la del agua —con una constante de tiempo de unos 0,36 segundos en las zonas densas— y una onda vive menos que eso, así que las mediciones mostraron que sumar velocidad apenas movía el pigmento. Ajustar el aspecto y ajustar el tacto ya no se estropean mutuamente.
Decidir que el pigmento no atraiga al pigmento
Antes existía una fuerza de cohesión que juntaba el pigmento, pero el único sitio donde podía asentarse era un grumo redondo: con el tiempo, el agua se llenaba de círculos opacos que ya no volvían a deshacerse. Ahora el borde oscuro de la acuarela se reproduce sin mover ni un poco de pigmento. El campo de densidad se queda como está y el borde se dibuja a partir de él, como sombreado sobre el trazado de la superficie del agua, así que nada de la imagen se solidifica.
La misma grabación siempre se reproduce como la misma imagen
La simulación está fijada a 60 pasos por segundo, y cada grabación guarda los números reales de paso en los que se consumió la entrada de UIKit, la cantidad de pasos de arranque y un archivo adjunto con marcas de tiempo Float32 y coordenadas UInt16.
La reproducción se fía de esos pasos guardados antes que de la marca de tiempo del reloj del sistema. La velocidad se mide con UITouch.timestamp, porque los movimientos dentro de un mismo fotograma no pueden distinguirse con ese reloj.
Los toques predichos se usan solo para estimar la velocidad; nunca afectan al lugar donde cae el pigmento.
Además, SimulationEngineRegistry dirige de forma explícita cada simulationVersion guardada al motor que le corresponde.
La versión 6 está congelada hasta en sus constantes, su reloj y su tasa de transferencia de tinta, y una versión futura desconocida jamás se pasa en silencio a la simulación más reciente.
La idea es que la imagen de una grabación antigua no se reconstruya como otra cosa al actualizar la aplicación.
No enseñar la puntuación primero
Las cuatro medidas no se recortan en un tope: se apoyan en una curva que se acerca asintóticamente a 100, así que un movimiento rápido aislado no da la nota máxima. Aun así, están ocultas de forma predeterminada en la pantalla de resultados. Si una aplicación que se niega a ordenar las emociones en palabras empieza por los números, esos números se convierten sin más en la nueva etiqueta.
Privacidad y contacto
IRO UTSUSHI guarda tus grabaciones únicamente en tu dispositivo. No tiene registro de cuenta, ni publicidad, ni analítica, ni funciones que rastreen a las personas usuarias. Para más detalles, consulta la Política de privacidad de IRO UTSUSHI.
Para comentarios y avisos de errores, también puedes escribirnos desde la página de contacto de Sizu dev.