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
This commit is contained in:
parent
e8f35d383a
commit
3b9bdd9d44
27 changed files with 0 additions and 83 deletions
|
|
@ -1,85 +0,0 @@
|
|||
# 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](https://github.com/launchbadge/sqlx) |
|
||||
|
||||
|
||||
---
|
||||
|
||||
## References
|
||||
|
||||
- [gRPC](https://grpc.io/)
|
||||
|
||||
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
|
||||
|
||||
- [Navidrome](https://www.navidrome.org)
|
||||
- [Azuracast](https://www.azuracast.com/)
|
||||
- [Cadence](https://github.com/kenellorando/cadence) (Use Icecast and Liquidsoap)
|
||||
- [forte](https://github.com/kaangiray26/forte)
|
||||
- [Simple MPD in Rust](https://dev.to/tsirysndr/how-i-built-a-simple-music-player-daemon-in-rust-with-a-cliweb-ui-51e0)
|
||||
Loading…
Add table
Add a link
Reference in a new issue