Skip to content

vitalybe/radio-stream

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Radio Stream - Development repository

NOTE: These instructions are intended for developers of Radio Stream - If you just want to listen to music go here.

About

Radio Stream is your personal music service that streams music automatically based on your listening habits.

  • Your music - Use your own music files without restrictions.
  • Automatic DJ - Enjoy music immediately without choosing a specific song or album. The music is selected based on when you last heard it, its rating and more.
  • Dynamic playlists - Want to hear only some of your music? Create a music playlist, e.g, only with genre Heavy Metal, and have the automatic DJ stream the music from that station.
  • Desktop and Mobile clients - Listen to your music when you're on another computer or on your mobile phone.
  • Last.FM support - Scrobble your music to Last.FM
  • Powered by beets - Use the super-powerful beets and all its plugins to organize your music.

You can read additional details and installation instructions here.

Radio Stream for Android

Architecture

Overview

alt text

Server

Composed of 2 main components.

Docker container

Docker was used to provide easy deployment and minimize required configuration for the user. It consists of the following subcomponents:

  • beets - A fork of beets that adds a specialized plugin for generating automatic playlists, updating play counts, ratings, etc. The plugin by default is listening for HTTP requests on internal port.
  • nginx - Exposes a single HTTP endpoint for clients. Based on the incoming URL it either serves as proxy for beets or exposes the underlying music files.

Launcher (radio-stream-cli)

This is the server-side application that the user interacts with to control the docker container and execute beets inside it.

Client applications

Both clients are written with react-native and share a large portion of code.

  • Android application - Developed using react-native.
  • Desktop application - Developed using react-native-web, running on electron.

Development

Getting started

git clone --recursive https://github.com/vitalybe/radio-stream
cd readio-stream
# Prepare test hooks
cp scripts/pre-commit .git/hooks/pre-commit

Then proceed to a specific folder and follow its readme:

  • Server - "server" folder.
  • Desktop application - "web" folder.
  • Android application - mobile" folder.

Contributions

Pull requests are most welcome. The main areas of focus I would love to see this project expand:

  • Ability to create automatic playlists from clients.
  • Ability to add music from clients - Currently requires to copy files to the computer running the server and running beet import funcionality.
  • Unify web and mobile codebases - Since both electron and react-native rely on javascript, some code elements can be shared between the projects.
  • Windows support - Should be relatively easy to do since electron supports windows already. Mac specific code is very minimal.
  • Web-only mode - The native parts in this application are minimal so this shouldn't be too hard.
  • iPhone support