juno/README.md

76 lines
3.2 KiB
Markdown

# Juno
## Introduction
This is a CLI music player, It can play local music or remote stream and it can
output the sound to the local sound server or as an HTTP stream. This is a
standalone project but it also has a [Web Client](https://codeberg.org/aleidk/fuuka) with further features.
This project is currently in **development**, to see the progress towards the next release [check the milestone](https://codeberg.org/aleidk/juno/milestone/5195).
## Features
- Play local files or remote streams (like youtube streams).
- Local or remote (HTTP) audio output.
- [MPRIS](https://wiki.archlinux.org/title/MPRIS) support
- Dynamic server-client design:
- On start it attach to a socket, a local unix file socket (default) or a port to allow for remote connections ([MPD](https://wiki.archlinux.org/title/Music_Player_Daemon) like).
- If a second instance is invoque on the same socket, it will act as a client to the process running on that socket, allowing to modify the playback and exiting immediately ([MPC](https://www.musicpd.org/clients/mpc/) like).
- By default the server process will end when the queue is empty unless it's ran in _"daemon"_ mode. This allows to continue using the clients to add more music later.
## FAQ
### Why Rust?
A core requirement is to handle and administrate masive music queues, so the
project needs an efficient language, I also wanted a compiled language for
easier binary distribution and dependency management. By the quote I read
somewhere of _"un-optimized Rust code is faster than optimized Go code"_, I
decided to use Rust.
### Why the name?
#### TLDR
The name comes from [Juno](https://megamitensei.fandom.com/wiki/Juno), the Persona of Fuuka Yamagishi in Persona 3.
Fuka is also a [complementary project](https://codeberg.org/aleidk/fuuka) for this music player.
#### Long Version
One of my first projects was a discord bot that acted as a frontend of
[MPD](https://wiki.archlinux.org/title/Music_Player_Daemon) while also played the HTTP stream in the voice call.
I called the bot fuuka because you actually have to talk to the bot to ask for
music like you do in the game. This is the 3rd iteration of the idea (and
hopefully the definitive), so I decided to maintain the name in it's honor.
The project was split into 2 though:
- [Fuuka](https://megamitensei.fandom.com/wiki/Fuuka_Yamagishi), the navi of SEES in Persona 3, you can ask her to change the musing in tartarus. It act as the frontend to interact with the player.
- [Juno](https://megamitensei.fandom.com/wiki/Juno), the persona of Fuuka that grants her the ability to communicate telepatically to her teamates. It act as the music player.
## Contributing
Aside from rust and cargo, you need the following dependencies:
- alsa-lib devel package
```bash
# fedora
dnf install -y alsa-lib-devel
```
- Tonic protobuf dependencies
```bash
# fedora
dnf install -y protobuf-devel
```
## Similar projects
- [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)