@fridgefm/radio-core
    TypeScript icon, indicating that this package has built-in type declarations

    3.1.2 • Public • Published

    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 (great for debugging),
      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 build
    node examples/server.js
    

    or

    yarn build
    node examples/server.js [path/to/your_mp3tracks]
    # in this case it would take a little more time, just wait
    

    There is also a watch mode - you need two tabs in a terminal

    yarn watch
    
    node examples/server.js [path/to/your_mp3tracks]
    

    Demo

    Fully working demo is available on https://fridgefm.com

    Install

    npm i @fridgefm/radio-core

    DownloadsWeekly Downloads

    0

    Version

    3.1.2

    License

    MIT

    Unpacked Size

    87.4 kB

    Total Files

    86

    Last publish

    Collaborators

    • kefir100