UNPKG

ionic-audio

Version:

An audio player for Ionic 3 and Angular 5

323 lines 10.5 kB
var __extends = (this && this.__extends) || (function () { var extendStatics = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; })(); import { Injectable } from '@angular/core'; import { WebAudioTrack } from './ionic-audio-web-track'; import { CordovaAudioTrack } from './ionic-audio-cordova-track'; /** * Creates an audio provider based on the environment. * If running from within a browser, then defaults to HTML5 Audio. If running on a device, it will check for Cordova and Media plugins and use * a native audio player, otherwise falls back to HTML5 audio. * * @method factory * @static * @return {IAudioProvider} An IAudioProvider instance */ export function defaultAudioProviderFactory() { return window.hasOwnProperty('cordova') && window.hasOwnProperty('Media') ? new CordovaMediaProvider() : new WebAudioProvider(); } /** * Base class for audio providers * * @export * @abstract * @class AudioProvider * @implements {IAudioProvider} */ var AudioProvider = (function () { function AudioProvider() { } /** * Creates an IAudioTrack instance from a JSON object. * Not implemented in base class. * * @method create * @param {ITrackConstraint} track A JSON object containing at least a src property * @return null */ /** * Creates an IAudioTrack instance from a JSON object. * Not implemented in base class. * * @method create * @param {ITrackConstraint} track A JSON object containing at least a src property * @return null */ AudioProvider.prototype.create = /** * Creates an IAudioTrack instance from a JSON object. * Not implemented in base class. * * @method create * @param {ITrackConstraint} track A JSON object containing at least a src property * @return null */ function (track) { console.error('Not implemented in base class'); return null; }; /** * Replaces track with a new one * @param oldAudioTrack * @param newTrack */ /** * Replaces track with a new one * @param oldAudioTrack * @param newTrack */ AudioProvider.prototype.replace = /** * Replaces track with a new one * @param oldAudioTrack * @param newTrack */ function (oldAudioTrack, newTrack) { console.error('Not implemented in base class'); return null; }; /** * Adds an existing IAudioTrack instance to the array of managed tracks. * * @method add * @param {IAudioTrack} audioTrack An instance of IAudioTrack */ /** * Adds an existing IAudioTrack instance to the array of managed tracks. * * @method add * @param {IAudioTrack} audioTrack An instance of IAudioTrack */ AudioProvider.prototype.add = /** * Adds an existing IAudioTrack instance to the array of managed tracks. * * @method add * @param {IAudioTrack} audioTrack An instance of IAudioTrack */ function (audioTrack) { AudioProvider.tracks.push(audioTrack); }; ; /** * Plays a given track. * * @method play * @param {number} index The track id */ /** * Plays a given track. * * @method play * @param {number} index The track id */ AudioProvider.prototype.play = /** * Plays a given track. * * @method play * @param {number} index The track id */ function (index) { if (index === undefined || index > AudioProvider.tracks.length - 1) return; this._current = index; AudioProvider.tracks[index].play(); }; ; /** * Pauses a given track. * * @method pause * @param {number} [index] The track id, or if undefined it will pause whichever track currently playing */ /** * Pauses a given track. * * @method pause * @param {number} [index] The track id, or if undefined it will pause whichever track currently playing */ AudioProvider.prototype.pause = /** * Pauses a given track. * * @method pause * @param {number} [index] The track id, or if undefined it will pause whichever track currently playing */ function (index) { if (this._current === undefined || index > AudioProvider.tracks.length - 1) return; index = index || this._current; AudioProvider.tracks[index].pause(); }; ; /** * Stops a given track. * * @method stop * @param {number} [index] The track id, or if undefined it will stop whichever track currently playing */ /** * Stops a given track. * * @method stop * @param {number} [index] The track id, or if undefined it will stop whichever track currently playing */ AudioProvider.prototype.stop = /** * Stops a given track. * * @method stop * @param {number} [index] The track id, or if undefined it will stop whichever track currently playing */ function (index) { if (this._current === undefined || index > AudioProvider.tracks.length - 1) return; index = index || this._current; AudioProvider.tracks[index].stop(); this._current = undefined; }; ; Object.defineProperty(AudioProvider.prototype, "tracks", { /** * Gets an array of tracks managed by this provider * * @property tracks * @readonly * @type {IAudioTrack[]} */ get: /** * Gets an array of tracks managed by this provider * * @property tracks * @readonly * @type {IAudioTrack[]} */ function () { return AudioProvider.tracks; }, enumerable: true, configurable: true }); Object.defineProperty(AudioProvider.prototype, "current", { /** * Gets current track id * * @property current * @type {number} */ get: /** * Gets current track id * * @property current * @type {number} */ function () { return this._current; }, /** * Sets current track id * * @property current */ set: /** * Sets current track id * * @property current */ function (v) { this._current = v; }, enumerable: true, configurable: true }); AudioProvider.tracks = []; AudioProvider.decorators = [ { type: Injectable }, ]; /** @nocollapse */ AudioProvider.ctorParameters = function () { return []; }; return AudioProvider; }()); export { AudioProvider }; /** * Creates an HTML5 audio provider * * @export * @class WebAudioProvider * @constructor * @extends {AudioProvider} */ var WebAudioProvider = (function (_super) { __extends(WebAudioProvider, _super); function WebAudioProvider() { var _this = _super.call(this) || this; console.log('Using Web Audio provider'); return _this; } WebAudioProvider.prototype.create = function (track) { var audioTrack = new WebAudioTrack(track.src, track.preload); Object.assign(audioTrack, track); var trackId = WebAudioProvider.tracks.push(audioTrack); audioTrack.id = trackId - 1; return audioTrack; }; WebAudioProvider.prototype.replace = function (oldAudioTrack, newTrack) { //WebAudioProvider.tracks.pop(); var index = WebAudioProvider.tracks.findIndex(function (track) { return Object.is(oldAudioTrack, track); }); var newAudioTrack = newTrack instanceof WebAudioTrack ? newTrack : new WebAudioTrack(newTrack.src, newTrack.preload); Object.assign(newAudioTrack, newTrack); if (index > -1) { WebAudioProvider.tracks.splice(index, 1, newAudioTrack); } else { var trackId = WebAudioProvider.tracks.push(newAudioTrack); newAudioTrack.id = trackId - 1; } console.log("Replaced audio track", oldAudioTrack, newAudioTrack); console.log("Current track list", WebAudioProvider.tracks); return newAudioTrack; }; WebAudioProvider.decorators = [ { type: Injectable }, ]; /** @nocollapse */ WebAudioProvider.ctorParameters = function () { return []; }; return WebAudioProvider; }(AudioProvider)); export { WebAudioProvider }; /** * Creates a Cordova audio provider * * @export * @class CordovaMediaProvider * @constructor * @extends {AudioProvider} */ var CordovaMediaProvider = (function (_super) { __extends(CordovaMediaProvider, _super); function CordovaMediaProvider() { var _this = _super.call(this) || this; console.log('Using Cordova Media provider'); return _this; } CordovaMediaProvider.prototype.create = function (track) { var audioTrack = new CordovaAudioTrack(track.src); Object.assign(audioTrack, track); var trackId = CordovaMediaProvider.tracks.push(audioTrack); audioTrack.id = trackId - 1; return audioTrack; }; CordovaMediaProvider.prototype.replace = function (oldTrack, newTrack) { return null; }; CordovaMediaProvider.decorators = [ { type: Injectable }, ]; /** @nocollapse */ CordovaMediaProvider.ctorParameters = function () { return []; }; return CordovaMediaProvider; }(AudioProvider)); export { CordovaMediaProvider }; //# sourceMappingURL=ionic-audio-providers.js.map