Skip to content

Project Proposal

nivekyee edited this page Apr 9, 2021 · 3 revisions

Introduction

In recent years, the use of chat applications (e.g. Discord) has been increasingly common between online communities. While music applications, like Spotify, offer a large selection of high-quality music for streaming, they failed to meet the community’s demands for the ability to collaboratively control while streaming a playlist in synchronization. Discord music bots were developed to meet those demands, but they could only support a limited text interface on the Discord application.

This project aims to develop a full-stack music streaming web application that provides an interface to publicly available audio libraries while having collaborative features, targeting smaller groups of individuals as our main users. The goal is to provide them a way to collaboratively control a playlist while listening to it synchronously, emulating a party or hangout environment in a virtual space.

Related work

Spotify

While serving as a well-designed music player, also boasts an extensive music library readily available for their users to stream in high quality, with the extended feature, Spotify radio, which can generate playlists based on any song, album, artist or playlist selected. Spotify users can connect with their friends and collaborate on a shared playlist. However, it lacked the capability of a collaborative listening session until recently. Although generous, their music selection is also only limited to songs that are published on the platform.

Discord music bots (e.g. Groovy, Octave and Hydra)

Discord bots are javascript programs that interact with Discord through the Discord API. They act as an interface to query public APIs of music streaming services, then broadcast the audio response as a “user” in a voice channel. They are community developed, competing against each other with a ranging amount of features, including the ability to queue audio and playlists from different sources (e.g. Spotify, Youtube, SoundCloud, files, etc.), playlist shuffling on top of normal playlist functions, tiered permissions and voting systems. However, they must be run by a host and are bound to Discord, which provides a very limited GUI and poor streaming quality.

CrowdDJ

An application designed for commercial usage, allowing customers to queue music from a limited playlist to the business’s audio system through its app. Its manager app allows administrator control such as limiting selections, playlist overriding, etc. Incorporating the ideology behind Discord music bots and the quality of Spotify, this project's goal will be to create an extended version of CrowdDJ with a wider range of music selection and community-based features.

Requirements

To allow collaboration in our music streaming web application there a number of features that will be required to allow our users to concurrently control the playlist.

Must-haves

  • A web application that contains all the features that a standard music streaming service has (i.e. song search, play, pause, skip)
  • Collaborative features
  • The ability for users to host sessions and be able to search and join hosted sessions,
  • The ability for users to add to their current session’s song queue

Should-haves

After these core features are implemented there are a few more features that should be added to enhance the user’s experience.

  • An easy-to-use user interface.
  • The ability to send invite links for ease of access to other sessions.
  • Creating and uploading playlists for a more streamlined experience.
  • Other collaborative features, such as allowing users in a session to vote on skipping songs.

Technologies

The frontend is the main interface for users, therefore, requires an interface that is easy to use and navigate, at the same time encapsulating the functionality of a collaborative streaming environment. ReactJS is very effective for this purpose, hence will be used in conjunction with MaterialUI for its styling resources and easy integration with the ReactJS environment frontend.

The backend server will be deployed using ExpressJS, which will be complemented by Nodemon for faster server updates and error tracing, and MongoDB as the database for storing information such as user data or playlist data. The database will be expanded to suit further requirements down the line of development as necessary. Postman and JEST will be used throughout the development for frequent testing, while code formatters such as ESlint, prettier and beautify will be used to maintain code guidelines.

The web application will be consuming public APIs supplied by Spotify, youtube, SoundCloud and other streaming services which we will access to provide links to songs and play on our player.

Github will be used for version control for its branching ability, perfect as the structure for maintaining the frontend and backend code independently to ensure a deployable application per iteration.

Project Management Strategy

Frequent and effective communication is the key to a successful collaboration. Therefore, Slack will be used as the primary communication platform and Zoom for meetings. Taking time differences and availability into account, group members are encouraged to be proactive and voice out issues/leave comments at any time to reduce communication lag. Member assignment of a task is decided on a task-to-task basis to ensure optimal resource allocation and to circumvent roadblocks due to technical difficulties. Version Control and Workflow

Git will be used as the distributed version control system for this project, and hosted on GitHub, to regulate and facilitate collaboration between group members. As the project scope is small and has a limited timeframe, an agile workflow, along with feature and task branching strategies, will be implemented to manage weekly sprints. Testing will be done periodically with feedback during frequent scrums, to ensure all components work and fit together before merging onto the end product. GitHub Issues and Wiki will be used to provide clear documentation of every task and progress.

Coding Style

Consistency in the coding style of a project is important to ensure readability and cohesion. Tools like eslint and beautify will be used to help regulate indentations. naming styles, etc. Some degree of personal preference will be allowed as long as the standard code formatting guidelines are followed.

Clone this wiki locally