Giter VIP home page Giter VIP logo

fridgefm-radio-core's Introduction

Radio engine for NodeJS

build coverage npm GitHub node

Usage

Simple lightweight package to start your own live radio station 📻 Just drop your mp3 files and broadcast them to the world 🌎Heavily inspired by Shoutcast and Icecast.

Setup

Installation

npm i @fridgefm/radio-core --save

Server

const { Station } = require('@fridgefm/radio-core');
const station = new Station();

station.addFolder('User/Music');

server.get('/stream', (req, res) => {
  station.connectListener(req, res);
});

station.start();

Client

<audio
    controls
    type='audio/mp3'
    src='/stream'
/>

Station constructor

Creating a station is as simple as

const myAwesomeStation = new Station({
  verbose: false, // if true - enables verbose logging (for debugging purposes),
  responseHeaders: { // in case you want custom response headers for your endpoint
    'icy-genre': 'jazz'
  }
})

Station methods

connectListener connects real users to your station, this is the only method that should be exposed to listeners
response argument is required

station.connectListener(request, response, callback);

addFolder adds track within a folder to the playlist

station.addFolder('User/Music');

start starts broadcasting

station.start();

next instantly switches track to the next one

station.next();

getPlaylist just returns you the entire playlist

station.getPlaylist();

reorderPlaylist lets you manipulate the entire playlist via passed callback

const myShuffleMethod = (list) => list
  // doubles the list (making it twice as long)
  .concat(list)
  // filters out the specific track
  .filter(track => track.fsStats.name !== 'Artist - Track'); 

station.reorderPlaylist(myShuffleMethod);

There are also some built-in shuffle methods

const { SHUFFLE_METHODS } = require('@fridgefm/radio-core')

// This one randomly shuffles the playlist (keeping the length the same)
station.reorderPlaylist(SHUFFLE_METHODS.randomShuffle());

// This one moves the track on the 1st position and moves it to the 2nd position 
station.reorderPlaylist(SHUFFLE_METHODS.rearrange({ from: 1, to: 2 }));

on lets you make a subscription to station events (see below)

Station events

Station emits several events - they are available via

const { PUBLIC_EVENTS } = require('@fridgefm/radio-core')

NEXT_TRACK

event fires when track changes
useful for getting to know when exactly the track changed and what track that is

station.on(PUBLIC_EVENTS.NEXT_TRACK, (track) => {
  const result = await track.getMetaAsync();
  console.log(result)
})

START

Event fires on station start

station.on(PUBLIC_EVENTS.START, () => { console.log('Station started') });

RESTART

Event fires on station restart (when playlist is drained and new one is created)
it might be a nice time to shuffle your playlist for example

station.on(PUBLIC_EVENTS.RESTART, () => { /* do something*/ });

ERROR

Event fires when there is some error. You should add this handler - otherwise any error will be treated as unhandled (causing process.exit depending on Node version)

station.on(PUBLIC_EVENTS.ERROR, (e) => { handleError(e) });

or just go to examples

Development

yarn start

or

yarn start [path/to/your_mp3tracks]
# in this case it would take a little more time, just wait

Demo

Sandbox is available here on Codesandbox
Fully working demo is available on FridgeFM

fridgefm-radio-core's People

Contributors

ch1ller0 avatar dependabot-preview[bot] avatar dependabot[bot] avatar

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.