From f0465c78d333a013a27d2a657d3cc49b959de086 Mon Sep 17 00:00:00 2001 From: dylan-fournier Date: Wed, 22 May 2024 12:23:57 -0400 Subject: [PATCH] Updated readme.md --- Screenshot_RAW.png | Bin 0 -> 31744 bytes readme.md | 63 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 63 insertions(+) create mode 100644 Screenshot_RAW.png create mode 100644 readme.md diff --git a/Screenshot_RAW.png b/Screenshot_RAW.png new file mode 100644 index 0000000000000000000000000000000000000000..381e29b55a017ff7abc668578080cbd7203c8489 GIT binary patch literal 31744 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 Bdwu`_ literal 0 HcmV?d00001 diff --git a/readme.md b/readme.md new file mode 100644 index 0000000..fc61b4f --- /dev/null +++ b/readme.md @@ -0,0 +1,63 @@ +# Party Jukebox +*This project requires VLC to play sound files* +## Purpose +The **Party Jukebox** is a program that allows many people to add music, skip songs, play, and pause from any web device to the same device and playlist. \ +This was created for a personal use case for parties, and is a simple, (mostly) functional solution to have a collective playlist for local mp3 files. +## Basic Setup +### Client Setup: +The client is a web application that can be hosted on any server, it need not be the same device running the music player. +* If the app is being setup for a large group, you can distribute the url (via QR code, for example) with `?ip=YOURSERVERHOSTNAME:19054` set as an attribute after the url. +### Server Setup: +**Pre-setup:** If you want the songs to have art associated with them, it is all hosted on and retrieved from LastFM, and you will need to sign up for a developer app, and put your key \ +\ +The server side consists of 3 files + +[//]: # (Change this below later, the files will likely be renamed) + +``` +sound/ +databaseGenerator.py +webbyBits.py +``` + +1. Place mp3 files in the `sound/` folder +2. Open `databaseGenerator.py` and put your lastFM API key in at the top (*optional*) +3. Run `databaseGenerator.py` + * *The `databaseGenerator.py` will index all mp3 files, and save the information to `songDatabase.json`* + * *If getting images, this process may take a long time with a large amount of mp3 files* +4. Run `webbyBits.py` + +You can now connect with the client and use the app as normal. \ +Read on for specific information on each piece of the app. +## Details +These are specific details on each section of the app, and how to use them +### Server: +- `sound/` contains all mp3 files +- `databaseGenerator.py` scans through mp3 files and gets information about them + - `Filename, Title, Artist, Art, Length` are all saved + - *If the title and artist are not in the mp3 metadata, it looks for a format of* `TITLE_ARTIST.mp3` *and otherwise defaults to the file name as the title, and no artist* +- `songDatabase.json` stores all the information about each song in this format: +``` +[ + { + "file": "The Search_NF.mp3", + "title": "The Search", + "artist": "NF", + "art": "https://lastfm.freetls.fastly.net/i/u/64s/03125956378d531a44e1b7da89aae795.png", + "length": 292 + } +] +``` +- `webbyBits.py` imports the database, runs all music playing, and accepts all commands from clients + - Searches return matching songs + - Accepts Play-Pause and Skip commands + +### Client: +![image](./Screenshot_RAW.png) \ +From left to right: +- The playlist button shows the current queue of songs +- The play-pause button toggles playing +- The skip button goes to the next track +- The search button opens the search screen (pictured) +- The settings button (top right) opens the settings menu +