master-wiki/notes/fuuka-juno.md
aleidk 3b9bdd9d44 re-structure notes
Affected files:
README.md
config.ts
notes/Crear una nueva funcionalidad.md
notes/Cypress.md
notes/Depression.md
notes/Design.md
notes/Dev Tools.md
notes/Email.md
notes/Git.md
notes/Good Enough.md
notes/How to build systems.md
notes/Meditation.md
notes/Misc.md
notes/Neovim.md
notes/React.md
notes/Self Steam.md
notes/The cult of done.md
notes/Tiding up the todos list.md
notes/Work.md
notes/conventional_commits.md
notes/daily/2023-08-11.md
notes/daily/2023-10-26.md
notes/daily/2023-10-27.md
notes/free time.md
notes/fuuka-juno.md
notes/index.md
notes/ulysses pact.md
2024-01-31 20:14:26 -03:00

4.1 KiB

Project Radio

  • En primera instancia utilizar librerías de apoyo para cosas demasiado complejas, especificas o que requieran mucha investigación para poder tener algo funcfunctionalpoco tiempo. Luego ir remplazando estas librerías por código propio

Music Player - Juno

Code name: Juno, like Fuuka's ultimate persona, that she use to communicate with the others

Este servicio debe ser solo un reproductor de música, Debe poder funcionar de manera independiente, y poder integrar distintos frontends para un futuro

Features:

  • Lenguaje: Rust, que sea lo más eficiente posible para manejar posibles colas de miles de elementos y poder modificar estas colas rápidamente.
  • Interacción con MPRIS
  • Audio Input:
    • Local file
    • Remote stream?? -> Youtube lofi re-stream for example
  • Audio Output:
    • Localmente
    • Strimear por red
  • Funcionalidad cliente - servidor dinámica. Al iniciar el proceso, se deberá revisar si el socket provisto (el por defecto o custom) está corriendo ya un servidor de Juno, de ser el caso el proceso se ejecutará en modo "cliente", del contrario se ejecutará en modo "servidor"
  • Modo servidor:
    • Al invocarse abrirá un socket en la máquina, por defecto será un socket de unix a no ser que se especifique (un path para crar un socket en especifico o un puerto para escuchar en red)
    • Por defecto el proceso terminará al terminar de reproducir todos los elementos en la cola, como es un server se pueden añadir más elementos mientras el proceso no haya terminado
    • Debe tener un modo "daemon" en donde el proceso no termine al finalizar la cola y se quede esperando nuevas instrucciones
    • Al iniciar el proceso en modo "daemon", se debe pasar un path (por variable de entorno o como parametro del flag "daemon") para solo poder reproducir canciones dentro de este path. Esto reducirá problemas cuando un cliente quiera agregar elementos
    • El servidor debe tener una manera de entregar las canciones disponibles en el path especificado
  • Modo cliente:
    • Puede ejecutar modificaciones sobre la cola, operaciones básicas de un reproductor de música (play-pause, next, prev, add, remove, etc)
    • "current" que imprima información actual de lo que está sonando, con una opción de "follow" para que sea continuo
  • Comunicación entre cliente - Servidor con gRPC

Cliente, Frontend y orquestador - Fuuka

Code name: Fuuka, the navi of SEES, you can ask her to change the musing in tartarus.

Este servicio será el encargado de orquestrar la música con el servidor.

  • Debido a la funcionalidad de indexación, es necesario un lenguaje de backend eficiente
    • Rust
    • Go
  • Mantener una DB:
    • Debe poder indexar una carpeta y todas las subcarpetas recursivamente para obtener una lista de canciones con su path y otros
    • Si Juno lo soporta, lista de fuentes remotas para re-strimear, con un botón de acceso rápido (como youtube lofi or synthwave streams)
    • Almacenar playlist junto con su programación
  • Scheduler:
    • Correr escaneo e indexación cada x tiempo
    • Ejecutar programación de playlists
  • Se debe maneter el frontend actualizado en todo momento en cuanto cambien los datos del servidor de Juno:
    • NextJS puede realizar actualización de UI dinámicamente, pero esto nos añade un 3 servicio
    • Web sockets creo que deberían bastar, implementados en Vanilla JS del lado del cliente

Stack

Type Tech
DB SQLx

References

Bacon es una extensión del LSP que provee mejores mensajes de error para entender los mensajes de compilación, además provee un "watch mode" para el código

Features

  • Docker Service
  • REST API
  • Web UI
  • HTTP Audio Stream
  • File Scan to get the path to audio files
  • Playlists
  • Schedule Playlists
  • Repeat Schedule
  • upload files?

Proyectos similares