Skip to content
Dead simple way to have audio playback functionality in the JS application.
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.


Build Status

Dead simple way to have audio playback functionality in the JS application.

Check out the Demo App

Check the Documentation

Table of contents:


# npm
npm install rxjs-audio --save
# yarn
yarn install rxjs-audio


In order to play the audio files/urls. You need to create first AudioStream Object via rxjsAudioService.create method, as shown below:

Creating a Stream

import { RxJSAudioService } from 'rxjs-audio';
rxjsAudioService = new RxJSAudioService();
audio: AudioStream;
    constructor() { = this.rxjsAudioService.create(this.tracks);

RxJSAudioService.create method returns and AudioStream Object. This AudioStream gives you all the playback methods like play and pause etc.

Track Input and Configuration

RxJSAudioService.create method takes either a single track or Array of audio track as an Input and an optional config object. Take a look at following examples.

1. Single Track Input

Input to RxJSAudioService.create can be a single track as shown below:

track:string = ''; = this.rxjsAudioService.create(this.track);

2. Multi Track Input

tracks:Array<string> = [
]; = this.rxjsAudioService.create(this.tracks);

3. Complex Track Input and Configuration

In real world application, it's higly unlikely that you would have an array of strings, instead you would use array of objects, as shown below:

tracks:Array<any> = [
        url: '',
        name: 'Perfect',
        artist: 'Ed Sheeran'
        url: '',
        name: 'Man Atkiya Beparwah',
        artist: 'Ustad Nusrat Fateh Ali Khan',
        url: '',
        name: 'Penny Lane',
        artist: 'The Beatles'

You can use this structure by telling the service about the url of Audio by configuring urlKey of tracks, as shown below: = this.rxjsAudioService.create(this.tracks, { urlKey: 'url' })


There are two more configuration options:

  1. initialTrack:number: It's use to set the Initial/First Track of the Playlist, that you wnat to play.
  2. autoPlayNext:boolean: If set to true, it will play the next track after current is ended.

Audio Playback

rxjs-audio provides lots of playback features like play, pause, next, previous out of the box. Check documentation of AudioStream class for more detail.

Playing a stream

To play the media. Run the following:;

Pausing a stream

To pause the media. Run the following:;

Playing next track

To play the next track in list. Run the following:;;

Check the documentation at and demo application for more detail.

Listening to Audio Events

It's fairly easy to listen to audio media events like playing, ended.

You just need to subscribe to the Observable return by method, as shown below:
.subscribe(event => {

Listening to State Changes

rxjs-audio also provides an Observable to listen to state changes. You can use it as shown below:

// Update State
.subscribe(state => {
    this.state = state;

The state:StreamState Object gives us folowing information:

    playing: boolean; // If media is currently playing or not.
    isFirstTrack: boolean; // If first track is playing or not.
    isLastTrack: boolean; // If last track is playing or not.
    trackInfo: StreamTrackInfo // Check the definition below

And trackInfo:StreamTrackInfo provide us following information:

    currentTrack: number | undefined, // index of the current playing track
    readableCurrentTime: string, // currentTime in human readable form(HH:MM:ss)
    readableDuration:string,    // duration of media in readable form(HH:MM:ss)
    duration: number | undefined, // duration of media
    currentTime: number | undefined // currentTime of media

Error Handling

Following is a very simple example of Error Handing
.subscribe(event => {
    if(event.type === 'canplay') {
        this.error = false;
    else if(event.type === 'error') {
        this.error = true;


Read the documentation at for more detail.


Licensed under MIT

You can’t perform that action at this time.