advanced music player implemented as server and client (mostly via tcp)
Go to file
2024-02-08 10:19:49 +01:00
bin Update README, fix Cargo.toml for client, add bin/, add setup.sh 2024-01-10 16:25:00 +01:00
musicdb-client add keybinds 2024-02-08 10:19:49 +01:00
musicdb-filldb musicdb-filldb: sort songs by disc#, track#, path 2024-01-28 17:13:18 +01:00
musicdb-lib don't count finished thread as "running" in cache manager 2024-01-20 12:00:29 +01:00
musicdb-mers add some more functions to -mers and add hooks 2024-01-20 01:19:19 +01:00
musicdb-server improve CacheManager 2024-01-18 00:27:42 +01:00
.gitignore added edit panel and fixed bug where Modify* command would be decoded as Add* command by the server 2023-08-27 21:53:00 +02:00
README.md Update README.md 2024-01-10 16:41:23 +01:00
setup.sh Update README, fix Cargo.toml for client, add bin/, add setup.sh 2024-01-10 16:25:00 +01:00

musicdb

A feature-rich music player consisting of a server and a client.

Library

  • search for artists, albums, songs
  • apply filters to your search
  • select multiple songs, albums, artists
  • drag songs, albums, artists or your selection to add them to the queue

Queue

  • recursive structure, organized by how songs were added
    • adding an album puts the songs in a folder
    • if you add an album, you can drag the entire folder rather than individual songs
    • adding an artist adds a folder containing a folder for each album
  • shuffle
    • works like a folder, but plays its contents in a random order
    • reshuffles as you add new songs
    • only shuffles elements that you didn't listen to yet, so you won't hear a song twice
    • can shuffle any element, so you could, for example, listen to random albums, but the songs in each album stay in the correct order
  • repeat
    • can repeat its contents forever or n times

https://github.com/Dummi26/musicdb/assets/67615357/888a2217-6966-490f-a49f-5085ddcf3461

Server

The server caches the next song before it is played, so you get gapless playback even when loading songs from a very slow disk or network-attached storage (NAS).

It can be accessed using the client (TCP), or a website it can optionally host. It should also be very easy to switch from TCP to any other protocol, since most of the code in this project just requires the Read + Write traits, not specifically a TCP connection.

Clients

Multiple clients can connect to a server at the same time. All connected clients will be synchronized, so if you do something on one device, all other connected devices will show that change.

The client can show a user interface (gui) or even connect to the server and mirror its playback (syncplayer-*).

Using the syncplayer functionality, you can play the same music on multiple devices, in multiple different locations.

https://github.com/Dummi26/musicdb/assets/67615357/afb0c9fa-3cf0-414a-a59f-7e462837b989

Setup

Review, then run the setup.sh script:

./setup.sh ~/my_dbdir ~/music

Where ~/music is the directory containing your music (mp3 files).

Confirm that all paths are correct, then press Enter when prompted.

You will probably have to add a valid font path to the client's gui config, for example

font = '/usr/share/fonts/...'

...

The script will start a server and client. After closing the client, the server may still be running, so you may have to pkill musicdb-server if you want to stop it.

To open the player again:

musicdb-client 0.0.0.0:26002 gui

To start the server:

musicdb-server ~/my_dbdir ~/music --tcp 0.0.0.0:26002

A simple script can start the server and then the client:

# if the server is already running, this command will fail since 0.0.0.0:26002 is already in use,
# and you will never end up with 2+ servers running at the same time
musicdb-server ~/my_dbdir ~/music --tcp 0.0.0.0:26002 &
# wait for the server to load (on most systems, this should never take more than 0.1 seconds, but just in case...)
sleep 1
# now start the client
musicdb-client 0.0.0.0:26002 gui

You could use this script from a .desktop file to get a menu entry which simply opens the player.