musicdb/README.md

86 lines
2.8 KiB
Markdown
Raw Normal View History

2023-08-13 23:58:53 +02:00
# musicdb
custom music player running on my personal SBC which can be controlled from other WiFi devices (phone/pc)
should perform pretty well (it runs well on my Pine A64 with 10k+ songs)
## why???
#### server/client
allows you to play music on any device you want while controlling playback from anywhere.
you can either run the client and server on the same machine or connect via tcp.
if one client makes a change, all other clients will be notified of it and update almost instantly.
it is also possible for a fake "client" to mirror the main server's playback, so you could sync up your entire house if you wanted to.
#### complicated queue
- allows more customization of playback (loops, custom shuffles, etc.)
- is more organized (adding an album doesn't add 10-20 songs, it creates a folder so you can (re)move the entire album in/from the queue)
#### caching of songs
for (almost) gapless playback, even when the data is stored on a NAS or cloud
#### central database
when storing data on a cloud, it would take forever to load all songs and scan them for metadata.
you would also run into issues with different file formats and where to store the cover images.
a custom database speeds up server startup and allows for more features.
2023-08-14 00:20:09 +02:00
## usage
### build
build `musicdb-server` and `musicdb-client` using cargo.
for the client, you may need to change the path used in `include_bytes!(...)` to one that actually points to a valid font on your system.
## setup
2023-08-24 16:23:18 +02:00
### prep
2023-08-14 00:20:09 +02:00
You need some directory where your music is located (mp3 files).
I will assume this is `/music` for simplicity.
You will also need a file that will hold your database.
I will assume this is `dbfile`.
Note: Instead of adding the executables (`musicdb-client` and `musicdb-server`) to your `$PATH`, you can run `cargo run --release -- ` followed by the arguments.
Since this is using cargo, you need to be in the source directorie for whatever you want to run.
2023-08-24 16:23:18 +02:00
### database
2023-08-14 00:20:09 +02:00
2023-08-24 16:23:18 +02:00
`musicdb-filldb` will read all files in the /music directory and all of its subdirectories, read their metadata and try to figure out as much about these songs as possible. It will then generate a `dbfile` which `musicdb-server` can read.
You can make changes to the database later, but this should be the easiest way to get started:
2023-08-14 00:20:09 +02:00
```sh
2023-08-24 16:23:18 +02:00
musicdb-filldb /music
2023-08-14 00:20:09 +02:00
```
2023-08-24 16:23:18 +02:00
### starting the server
2023-08-14 00:20:09 +02:00
2023-08-24 16:23:18 +02:00
run:
2023-08-14 00:20:09 +02:00
```sh
2023-08-24 16:23:18 +02:00
musicdb-server dbfile --tcp 127.0.0.1:26314 --web 127.0.0.1:8080
2023-08-14 00:20:09 +02:00
```
2023-08-24 16:23:18 +02:00
And that's it - the rest should just work.
2023-08-14 00:20:09 +02:00
2023-08-24 16:23:18 +02:00
You can now open 127.0.0.1:8080 in a browser or use `musicdb-client`:
2023-08-14 00:20:09 +02:00
```sh
2023-08-24 16:23:18 +02:00
musicdb-client gui 127.0.0.1:26314
2023-08-14 00:20:09 +02:00
```
### syncplayer
If `/music` is the same on two devices, one can act as the server and the other as a client
that simply mirrors the server using the client's syncplayer mode:
```sh
2023-08-24 16:23:18 +02:00
musicdb-client syncplayer 127.0.0.1:26314
2023-08-14 00:20:09 +02:00
```