Git Product home page Git Product logo

queued-music's Introduction

logo

Queue'd Music

Queue'd is the best way to enjoy music with your friends. Add your favorite songs to a shared music queue at your favorite bars, restaurants and get-togethers, then vote to decide what plays next.

Music has an incredible way of setting the tone for any gathering. With Queue'd, the crowd takes control, collectively deciding what songs play, and in what order they are played in.

Connect with your Spotify account and add music from your favorite playlists, or search for any song you'd like, then add it to the queue with one touch. Vote up or down on any song in the queue, and control the flow of music with the help of those around you.

Read more information on our website.

What is this?

Queue'd is an application that creates a shared music queue, based on location. A 'venue' — for example, a bar — can create an account using the iPad Admin version of the app. This allows them to set up a location, and create a democratized music queue for others to 'check in' to, and begin adding music.

See more on the iPad Admin app

The iPhone version of the app is for patrons — in this example, the bargoers. Users can sign in using Spotify, Google, or enter as a Guest. Once 'checked in' to their location of choice, users can see and manipulate the queue by voting, adding songs, or purchasing vote packages to boost their song selections.

See more on the iPhone app

Getting Started

This project is a fully functional system, front to back...well, kinda. I provide the source code for the app on both iPhone and iPad, as well as examples for some backend code that you will need in order to have a fully functional version of the app(s).

For example, the app needs a token exchange service to use the Spotify SDK, and some cloud functions for creating and adding payments and payment methods to Stripe. In addiiton, the app uses Firebase to hold it's real-time, votable queue. Running the code and using the apps will begin to create your schema since Firebase will create nodes where they don't exist previously, if told to do so. However, it is assumed you know how to get a Firebase project up and running, since the app will also require your own GoogleService-Info.plist file to properly function.

You might be asking yourself — why release this entire system? Well, as with everything, there's a story...

Prerequisites

IDE

  • XCode 9+ (preferrable)
  • Swift 3.3+

External Products

  • Spotify Account
  • A Cloud Platform Account (Google, AWS, Azure, etc)
  • Firebase Account
  • Stripe Account (if you want to enable payments)

It may also be beneficial to have your own website so you can deploy your own version of Terms & Conditions and direct support requests to your domain email.

Installing

Since this is a full application, the best way to run it and make it your own is to download the .zip manually.

Running The Project

In order to run, you need to get a few things set up. Setup the accounts from the External Product section above, then roughly follow these steps:

  1. Create a Spotify Developer Account, to fully run the music system you will need Premium. Then, plug in your client id to the source code.
  2. Prepare a token exchange service (I used Heroku) and deploy the ruby files to run your exchange. Plug in your endpoints to the app.
  3. Create a Firebase project, include the GoogleService-Info.plist file from your project in the app files.
  4. Create a Stripe Account, and include your keys in the source code.
  5. Using a backend service (I used GCP), create and deploy the necessary cloud functions to power Stripe transactions, queue manipulation and more.

Built With

Authors

Ryan Daulton

License

This project is licensed under the Apache 2.0 License - see the LICENSE.md file for details

queued-music's People

Contributors

rldaulton avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

queued-music's Issues

iPhone: Taptic & Audio Feedback

Taptic Engine

Use an enum to add some taptic engine functionality to small feature points throughout the app:

public enum Vibration {
      case Light
      case Medium
      case Heavy
  
      @available(iOS 10.0, *)
      func hapticFeedback() -> UIImpactFeedbackGenerator {
          switch self {
          case .Heavy:
              return UIImpactFeedbackGenerator(style: .heavy)
          case .Medium:
              return UIImpactFeedbackGenerator(style: .medium)
          case .Light:
              return UIImpactFeedbackGenerator(style: .light)
          }
      }
}

And implement a global func API using:

@available(iOS 10.0, *)
   public func withHapticVibration(_ intesity: Vibration) {
       intesity.hapticFeedback().impactOccurred()
}

Sounds

The already implemented SwiftySound file will allow for quick sounds to be played.

For Example, using: Sound.play(file: "dog.wav") or Sound.play(url: fileURL)

Backend: Check Ins by hour

Allow venue owners to see number of check ins by the hour. This can then be extrapolated into daily, weekly, etc...

iPhone: Crash - App Background Re-Enter

When app has been backgrounded for a while and the user is still checked in, once app enters active state / focus again, crash.

This is the only observable patter when finding this crash

Backend: Remove Song from Queue

Create a backend function that monitors and deletes songs that drop below a determined vote threshold.

General Architecture Idea:
onWrite() to voteCount in the queue, trigger a function that checks if

  • the voteCount is < -10 (?)
  • AND if voteCount < ( usersCheckedIn.count * 0.25) ?

Perhaps delete a song if it falls past a negative vote balance based on a ratio of checked in users?

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.