Coder Social home page Coder Social logo

jukebox's Introduction

Jukebox

by Julyee

Web music player for everyone!
https://jukebox.julyee.com

Play music, control it from your phone, let guests add tracks from their phones, get song suggestions, use other devices as wireless speakers for a multi-room sound system, no downloads, no extra accounts, just a simple website!

Roadmap:

  • Connect using Apple Music
  • Remotely control music
  • Connect devices as speakers
  • Use QR codes for easy connection
  • Display lyrics for songs
  • Recommend related songs
  • Display guest names on music queue
  • Configurable guest rules
  • Save playlists remotely or locally
  • Audio visualizations
  • Connect using Spotify

Running your own server

Clone this repository then run:

yarn install

Create an Apple Music developer token

 node ./keys/music-token-encoder.js [PRIVATE_KEY_FILE] [TEAM_ID] [KEY_ID] [OUTPUT_FILE] [EXPIRES_IN]

where PRIVATE_KEY_FILE is the path to the p8 file you obtained from apple, your TEAM_ID as specified in your Apple developer portal, the KEY_ID provided by Apple (usually part of your key file name), OUTPUT_FILE is the path where the token should be placed (must be ./www/keys/devtoken.jwt for this application) and EXPIRES_IN is the duration of the token (i.e. 31d for a duration of 31 days). For more information check the Apple documentation.

The resulting file must be placed in ./www/keys/ and be named devtoken.jwt

Create a file that holds your last.fm API key

Create a file named last.fm.json in the ./www/keys folder with the following contents:

{
    "service": "Last.fm",
    "endpoint": "https://ws.audioscrobbler.com/2.0",
    "key": "API_KEY"
}

where API_KEY is your last.fm API key.

Create an SSL certificate

I recommend using Let's Encrypt as it's free and easy to use, alternatively, you could follow a guide like this one to create a self signed certificate.

Run the server

node ./server --cert [CERTIFICATE_FILE] --key [KEY_FILE]

where CERTIFICATE_FILE is the path to your SSL certificate and KEY_FILE is the path to your public key file.


Contributing

Please log any bugs you encounter and feature requests to our issues section.

If you wish to contribute to the code base, feel free to tackle any logged issue and/or submit pull requests.


License

MIT

jukebox's People

Stargazers

 avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

jukebox's Issues

Integrate Apple Music

  • Integrate Apple Music login button
  • Create interface to check connection (login) before every API call

Integrate search

  • Implement search suggestions
  • Trigger search when valid string provided
  • Display song results
  • Display album results
  • Display artist results

[GUI] Design album view.

Should feature:

  • Large artwork
  • Album name
  • Artist
  • Release date
  • Commentary (if available)
  • Total duration
  • Song list
  • More dialog button

No search results text not working.

When there are no search results the UI displays "Search Results for..." when it should display "No search results for..."

Search for: "give me tha power"

Implement "play song" functionality

  • When a song is clicked it should immediately start playing
  • The queue should be cleared
  • Implement option for "play next"
  • Implement option for "plat later" (play last)
  • Implement option for "play now and keep queue" (?)

Content Area

Implement the content area:

  • Should display a new component for every navigation event
  • Should occupy the largest area of the screen
  • Should be "sandwiched" between the tool bar and the player

Player Widget

Create a persistent player UI at the bottom of the screen:

  • Album art on the left
  • Song title + artist in the middle
  • Progress bar at the top
  • Volume pop-up on the left
  • Album information controls + options on the far right

Change `rating` to `isExplicit` in song

The current implementation of rating returns a string that could be "explicit", that is too close to Apples implementation and may not be compatible with other services.

Change to isExplicit which returns a boolean for future compatibility.

Hook up player controls

  • Progress bar
  • Scrub through progress bar
  • Play/pause button
  • Next button
  • Previous button (needs a custom queue)
  • Album art
  • Song's name/artist/album name
  • Song's length/current time

Navigation Drawer

Implement the navigation drawer:

  • Appears from the left
  • Triggers a navigation event

Contains:

  • Jukebox Id
  • Home
  • Library
  • Search
  • Import
  • Now Playing

Top Toolbar

Create a basic UI toolbar:

  • Title of section in the middle
  • Menu access on the left
  • Search bar on the right
  • Menu items should navigate to the proper page
  • Using the search bar should navigate to the search results

Music Service Interface

  • Should be designed to support

  • Apple Music

  • Jukebox service

  • Other music services in the future

  • Jukebox will not implement

  • Playlist creation

  • Playlist import

  • Add song to library/playlist

[JUKEBOX] Implement STUN (??)

Evaluate if implementing STUN would be necessary, although most of the features are meant to be used within the same network, there are cases where expecting all clients to be connected to a "friendly" would be unrealistic.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.