nativescript-will
Version:
NativeScript plugin to play audio (but not record, removed for this fork)
340 lines (339 loc) • 13.1 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
var utils = require("tns-core-modules/utils/utils");
var types_1 = require("tns-core-modules/utils/types");
var file_system_1 = require("tns-core-modules/file-system");
var common_1 = require("../common");
var TNSPlayer = (function (_super) {
__extends(TNSPlayer, _super);
function TNSPlayer() {
return _super !== null && _super.apply(this, arguments) || this;
}
Object.defineProperty(TNSPlayer.prototype, "ios", {
get: function () {
return this._player;
},
enumerable: true,
configurable: true
});
Object.defineProperty(TNSPlayer.prototype, "debug", {
set: function (value) {
common_1.TNSPlayerUtil.debug = value;
},
enumerable: true,
configurable: true
});
Object.defineProperty(TNSPlayer.prototype, "volume", {
get: function () {
return this._player ? this._player.volume : 0;
},
set: function (value) {
if (this._player && value >= 0) {
this._player.volume = value;
}
},
enumerable: true,
configurable: true
});
Object.defineProperty(TNSPlayer.prototype, "duration", {
get: function () {
if (this._player) {
return this._player.duration;
}
else {
return 0;
}
},
enumerable: true,
configurable: true
});
Object.defineProperty(TNSPlayer.prototype, "currentTime", {
get: function () {
return this._player ? this._player.currentTime : 0;
},
enumerable: true,
configurable: true
});
TNSPlayer.prototype.initFromFile = function (options) {
var _this = this;
return new Promise(function (resolve, reject) {
options.autoPlay = false;
_this.playFromFile(options).then(resolve, reject);
});
};
TNSPlayer.prototype.playFromFile = function (options) {
var _this = this;
return new Promise(function (resolve, reject) {
if (options.autoPlay !== false) {
options.autoPlay = true;
}
try {
var audioPath = void 0;
var fileName = types_1.isString(options.audioFile) ? options.audioFile.trim() : '';
if (fileName.indexOf('~/') === 0) {
fileName = file_system_1.path.join(file_system_1.knownFolders.currentApp().path, fileName.replace('~/', ''));
}
common_1.TNS_Player_Log('fileName', fileName);
_this._completeCallback = options.completeCallback;
_this._errorCallback = options.errorCallback;
_this._infoCallback = options.infoCallback;
var audioSession = AVAudioSession.sharedInstance();
var output = audioSession.currentRoute.outputs.lastObject.portType;
common_1.TNS_Player_Log('output', output);
if (output.match(/Receiver/)) {
try {
audioSession.setCategoryError(AVAudioSessionCategoryPlayAndRecord);
audioSession.overrideOutputAudioPortError(1936747378);
audioSession.setActiveError(true);
common_1.TNS_Player_Log('audioSession category set and active');
}
catch (err) {
common_1.TNS_Player_Log('setting audioSession category failed');
}
}
var errorRef = new interop.Reference();
_this._player = AVAudioPlayer.alloc().initWithContentsOfURLError(NSURL.fileURLWithPath(fileName), errorRef);
if (errorRef && errorRef.value) {
reject(errorRef.value);
return;
}
else if (_this._player) {
_this._player.delegate = _this;
_this._player.enableRate = true;
common_1.TNS_Player_Log('this._player', _this._player);
if (options.metering) {
common_1.TNS_Player_Log('enabling metering...');
_this._player.meteringEnabled = true;
}
if (options.loop) {
_this._player.numberOfLoops = -1;
}
if (options.autoPlay) {
_this._player.play();
}
resolve();
}
else {
reject();
}
}
catch (ex) {
if (_this._errorCallback) {
_this._errorCallback({ ex: ex });
}
reject(ex);
}
});
};
TNSPlayer.prototype.initFromUrl = function (options) {
var _this = this;
return new Promise(function (resolve, reject) {
options.autoPlay = false;
_this.playFromUrl(options).then(resolve, reject);
});
};
TNSPlayer.prototype.playFromUrl = function (options) {
var _this = this;
return new Promise(function (resolve, reject) {
if (options.autoPlay !== false) {
options.autoPlay = true;
}
try {
var sharedSession = utils.ios.getter(NSURLSession, NSURLSession.sharedSession);
_this._task = sharedSession.dataTaskWithURLCompletionHandler(NSURL.URLWithString(options.audioFile), function (data, response, error) {
if (error !== null) {
if (_this._errorCallback) {
_this._errorCallback({ error: error });
}
reject();
}
_this._completeCallback = options.completeCallback;
_this._errorCallback = options.errorCallback;
_this._infoCallback = options.infoCallback;
var audioSession = AVAudioSession.sharedInstance();
var output = audioSession.currentRoute.outputs.lastObject.portType;
if (output.match(/Receiver/)) {
try {
audioSession.setCategoryError(AVAudioSessionCategoryPlayAndRecord);
audioSession.overrideOutputAudioPortError(1936747378);
audioSession.setActiveError(true);
common_1.TNS_Player_Log('audioSession category set and active');
}
catch (err) {
common_1.TNS_Player_Log('setting audioSession category failed');
}
}
var errorRef = new interop.Reference();
_this._player = AVAudioPlayer.alloc().initWithDataError(data, errorRef);
if (errorRef && errorRef.value) {
reject(errorRef.value);
return;
}
else if (_this._player) {
_this._player.delegate = _this;
common_1.TNS_Player_Log('this._player', _this._player);
_this._player.enableRate = true;
_this._player.numberOfLoops = options.loop ? -1 : 0;
if (options.metering) {
common_1.TNS_Player_Log('enabling metering...');
_this._player.meteringEnabled = true;
}
if (options.autoPlay) {
_this._player.play();
}
resolve();
}
else {
reject();
}
});
_this._task.resume();
}
catch (ex) {
if (_this._errorCallback) {
_this._errorCallback({ ex: ex });
}
reject(ex);
}
});
};
TNSPlayer.prototype.pause = function () {
var _this = this;
return new Promise(function (resolve, reject) {
try {
if (_this._player && _this._player.playing) {
common_1.TNS_Player_Log('pausing player...');
_this._player.pause();
resolve(true);
}
}
catch (ex) {
if (_this._errorCallback) {
_this._errorCallback({ ex: ex });
}
common_1.TNS_Player_Log('pause error', ex);
reject(ex);
}
});
};
TNSPlayer.prototype.play = function () {
var _this = this;
return new Promise(function (resolve, reject) {
try {
if (!_this.isAudioPlaying()) {
common_1.TNS_Player_Log('player play...');
_this._player.play();
resolve(true);
}
}
catch (ex) {
if (_this._errorCallback) {
_this._errorCallback({ ex: ex });
}
common_1.TNS_Player_Log('play error', ex);
reject(ex);
}
});
};
TNSPlayer.prototype.resume = function () {
if (this._player) {
common_1.TNS_Player_Log('resuming player...');
this._player.play();
}
};
TNSPlayer.prototype.playAtTime = function (time) {
if (this._player) {
common_1.TNS_Player_Log('playAtTime', time);
this._player.playAtTime(time);
}
};
TNSPlayer.prototype.seekTo = function (time) {
var _this = this;
return new Promise(function (resolve, reject) {
try {
if (_this._player) {
common_1.TNS_Player_Log('seekTo', time);
_this._player.currentTime = time;
resolve(true);
}
}
catch (ex) {
common_1.TNS_Player_Log('seekTo error', ex);
reject(ex);
}
});
};
TNSPlayer.prototype.dispose = function () {
var _this = this;
return new Promise(function (resolve, reject) {
try {
common_1.TNS_Player_Log('disposing TNSPlayer...');
if (_this._player && _this.isAudioPlaying()) {
_this._player.stop();
}
_this._reset();
resolve();
}
catch (ex) {
if (_this._errorCallback) {
_this._errorCallback({ ex: ex });
}
common_1.TNS_Player_Log('dispose error', ex);
reject(ex);
}
});
};
TNSPlayer.prototype.isAudioPlaying = function () {
return this._player ? this._player.playing : false;
};
TNSPlayer.prototype.getAudioTrackDuration = function () {
var _this = this;
return new Promise(function (resolve, reject) {
try {
var duration = _this._player ? _this._player.duration : 0;
common_1.TNS_Player_Log('audio track duration', duration);
resolve(duration.toString());
}
catch (ex) {
if (_this._errorCallback) {
_this._errorCallback({ ex: ex });
}
common_1.TNS_Player_Log('getAudioTrackDuration error', ex);
reject(ex);
}
});
};
TNSPlayer.prototype.changePlayerSpeed = function (speed) {
if (this._player && speed) {
if (typeof speed === 'string') {
speed = parseFloat(speed);
}
this._player.rate = speed;
}
};
TNSPlayer.prototype.audioPlayerDidFinishPlayingSuccessfully = function (player, flag) {
if (flag && this._completeCallback) {
this._completeCallback({ player: player, flag: flag });
}
else if (!flag && this._errorCallback) {
this._errorCallback({ player: player, flag: flag });
}
};
TNSPlayer.prototype.audioPlayerDecodeErrorDidOccurError = function (player, error) {
if (this._errorCallback) {
this._errorCallback({ player: player, error: error });
}
};
TNSPlayer.prototype._reset = function () {
if (this._player) {
this._player = undefined;
}
if (this._task) {
this._task.cancel();
this._task = undefined;
}
};
TNSPlayer.ObjCProtocols = [AVAudioPlayerDelegate];
return TNSPlayer;
}(NSObject));
exports.TNSPlayer = TNSPlayer;
;