UNPKG

react-native-audio-recorder-player

Version:
375 lines (374 loc) 18.3 kB
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __generator = (this && this.__generator) || function (thisArg, body) { var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; function verb(n) { return function (v) { return step([n, v]); }; } function step(op) { if (f) throw new TypeError("Generator is already executing."); while (g && (g = 0, op[0] && (_ = 0)), _) try { if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; if (y = 0, t) op = [op[0] & 2, t.value]; switch (op[0]) { case 0: case 1: t = op; break; case 4: _.label++; return { value: op[1], done: false }; case 5: _.label++; y = op[1]; op = [0]; continue; case 7: op = _.ops.pop(); _.trys.pop(); continue; default: if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } if (t[2]) _.ops.pop(); _.trys.pop(); continue; } op = body.call(thisArg, _); } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; } }; import { DeviceEventEmitter, NativeEventEmitter, NativeModules, Platform, } from 'react-native'; var RNAudioRecorderPlayer = NativeModules.RNAudioRecorderPlayer; export var AudioSourceAndroidType; (function (AudioSourceAndroidType) { AudioSourceAndroidType[AudioSourceAndroidType["DEFAULT"] = 0] = "DEFAULT"; AudioSourceAndroidType[AudioSourceAndroidType["MIC"] = 1] = "MIC"; AudioSourceAndroidType[AudioSourceAndroidType["VOICE_UPLINK"] = 2] = "VOICE_UPLINK"; AudioSourceAndroidType[AudioSourceAndroidType["VOICE_DOWNLINK"] = 3] = "VOICE_DOWNLINK"; AudioSourceAndroidType[AudioSourceAndroidType["VOICE_CALL"] = 4] = "VOICE_CALL"; AudioSourceAndroidType[AudioSourceAndroidType["CAMCORDER"] = 5] = "CAMCORDER"; AudioSourceAndroidType[AudioSourceAndroidType["VOICE_RECOGNITION"] = 6] = "VOICE_RECOGNITION"; AudioSourceAndroidType[AudioSourceAndroidType["VOICE_COMMUNICATION"] = 7] = "VOICE_COMMUNICATION"; AudioSourceAndroidType[AudioSourceAndroidType["REMOTE_SUBMIX"] = 8] = "REMOTE_SUBMIX"; AudioSourceAndroidType[AudioSourceAndroidType["UNPROCESSED"] = 9] = "UNPROCESSED"; AudioSourceAndroidType[AudioSourceAndroidType["RADIO_TUNER"] = 1998] = "RADIO_TUNER"; AudioSourceAndroidType[AudioSourceAndroidType["HOTWORD"] = 1999] = "HOTWORD"; })(AudioSourceAndroidType || (AudioSourceAndroidType = {})); export var OutputFormatAndroidType; (function (OutputFormatAndroidType) { OutputFormatAndroidType[OutputFormatAndroidType["DEFAULT"] = 0] = "DEFAULT"; OutputFormatAndroidType[OutputFormatAndroidType["THREE_GPP"] = 1] = "THREE_GPP"; OutputFormatAndroidType[OutputFormatAndroidType["MPEG_4"] = 2] = "MPEG_4"; OutputFormatAndroidType[OutputFormatAndroidType["AMR_NB"] = 3] = "AMR_NB"; OutputFormatAndroidType[OutputFormatAndroidType["AMR_WB"] = 4] = "AMR_WB"; OutputFormatAndroidType[OutputFormatAndroidType["AAC_ADIF"] = 5] = "AAC_ADIF"; OutputFormatAndroidType[OutputFormatAndroidType["AAC_ADTS"] = 6] = "AAC_ADTS"; OutputFormatAndroidType[OutputFormatAndroidType["OUTPUT_FORMAT_RTP_AVP"] = 7] = "OUTPUT_FORMAT_RTP_AVP"; OutputFormatAndroidType[OutputFormatAndroidType["MPEG_2_TS"] = 8] = "MPEG_2_TS"; OutputFormatAndroidType[OutputFormatAndroidType["WEBM"] = 9] = "WEBM"; OutputFormatAndroidType[OutputFormatAndroidType["UNUSED"] = 10] = "UNUSED"; OutputFormatAndroidType[OutputFormatAndroidType["OGG"] = 11] = "OGG"; })(OutputFormatAndroidType || (OutputFormatAndroidType = {})); export var AudioEncoderAndroidType; (function (AudioEncoderAndroidType) { AudioEncoderAndroidType[AudioEncoderAndroidType["DEFAULT"] = 0] = "DEFAULT"; AudioEncoderAndroidType[AudioEncoderAndroidType["AMR_NB"] = 1] = "AMR_NB"; AudioEncoderAndroidType[AudioEncoderAndroidType["AMR_WB"] = 2] = "AMR_WB"; AudioEncoderAndroidType[AudioEncoderAndroidType["AAC"] = 3] = "AAC"; AudioEncoderAndroidType[AudioEncoderAndroidType["HE_AAC"] = 4] = "HE_AAC"; AudioEncoderAndroidType[AudioEncoderAndroidType["AAC_ELD"] = 5] = "AAC_ELD"; AudioEncoderAndroidType[AudioEncoderAndroidType["VORBIS"] = 6] = "VORBIS"; AudioEncoderAndroidType[AudioEncoderAndroidType["OPUS"] = 7] = "OPUS"; })(AudioEncoderAndroidType || (AudioEncoderAndroidType = {})); export var AVEncodingOption; (function (AVEncodingOption) { AVEncodingOption["lpcm"] = "lpcm"; AVEncodingOption["ima4"] = "ima4"; AVEncodingOption["aac"] = "aac"; AVEncodingOption["MAC3"] = "MAC3"; AVEncodingOption["MAC6"] = "MAC6"; AVEncodingOption["ulaw"] = "ulaw"; AVEncodingOption["alaw"] = "alaw"; AVEncodingOption["mp1"] = "mp1"; AVEncodingOption["mp2"] = "mp2"; AVEncodingOption["mp4"] = "mp4"; AVEncodingOption["alac"] = "alac"; AVEncodingOption["amr"] = "amr"; AVEncodingOption["flac"] = "flac"; AVEncodingOption["opus"] = "opus"; AVEncodingOption["wav"] = "wav"; })(AVEncodingOption || (AVEncodingOption = {})); export var AVModeIOSOption; (function (AVModeIOSOption) { AVModeIOSOption["gamechat"] = "gamechat"; AVModeIOSOption["measurement"] = "measurement"; AVModeIOSOption["movieplayback"] = "movieplayback"; AVModeIOSOption["spokenaudio"] = "spokenaudio"; AVModeIOSOption["videochat"] = "videochat"; AVModeIOSOption["videorecording"] = "videorecording"; AVModeIOSOption["voicechat"] = "voicechat"; AVModeIOSOption["voiceprompt"] = "voiceprompt"; })(AVModeIOSOption || (AVModeIOSOption = {})); export var AVEncoderAudioQualityIOSType; (function (AVEncoderAudioQualityIOSType) { AVEncoderAudioQualityIOSType[AVEncoderAudioQualityIOSType["min"] = 0] = "min"; AVEncoderAudioQualityIOSType[AVEncoderAudioQualityIOSType["low"] = 32] = "low"; AVEncoderAudioQualityIOSType[AVEncoderAudioQualityIOSType["medium"] = 64] = "medium"; AVEncoderAudioQualityIOSType[AVEncoderAudioQualityIOSType["high"] = 96] = "high"; AVEncoderAudioQualityIOSType[AVEncoderAudioQualityIOSType["max"] = 127] = "max"; })(AVEncoderAudioQualityIOSType || (AVEncoderAudioQualityIOSType = {})); export var AVLinearPCMBitDepthKeyIOSType; (function (AVLinearPCMBitDepthKeyIOSType) { AVLinearPCMBitDepthKeyIOSType[AVLinearPCMBitDepthKeyIOSType["bit8"] = 8] = "bit8"; AVLinearPCMBitDepthKeyIOSType[AVLinearPCMBitDepthKeyIOSType["bit16"] = 16] = "bit16"; AVLinearPCMBitDepthKeyIOSType[AVLinearPCMBitDepthKeyIOSType["bit24"] = 24] = "bit24"; AVLinearPCMBitDepthKeyIOSType[AVLinearPCMBitDepthKeyIOSType["bit32"] = 32] = "bit32"; })(AVLinearPCMBitDepthKeyIOSType || (AVLinearPCMBitDepthKeyIOSType = {})); var pad = function (num) { return ('0' + num).slice(-2); }; var AudioRecorderPlayer = /** @class */ (function () { function AudioRecorderPlayer() { var _this = this; this.mmss = function (secs) { var minutes = Math.floor(secs / 60); secs = secs % 60; minutes = minutes % 60; return pad(minutes) + ':' + pad(secs); }; this.mmssss = function (milisecs) { var secs = Math.floor(milisecs / 1000); var minutes = Math.floor(secs / 60); var seconds = secs % 60; var miliseconds = Math.floor((milisecs % 1000) / 10); return pad(minutes) + ':' + pad(seconds) + ':' + pad(miliseconds); }; /** * Set listerner from native module for recorder. * @returns {callBack((e: RecordBackType): void)} */ this.addRecordBackListener = function (callback) { if (Platform.OS === 'android') { _this._recorderSubscription = DeviceEventEmitter.addListener('rn-recordback', callback); } else { var myModuleEvt = new NativeEventEmitter(RNAudioRecorderPlayer); _this._recorderSubscription = myModuleEvt.addListener('rn-recordback', callback); } }; /** * Remove listener for recorder. * @returns {void} */ this.removeRecordBackListener = function () { if (_this._recorderSubscription) { _this._recorderSubscription.remove(); _this._recorderSubscription = null; } }; /** * Set listener from native module for player. * @returns {callBack((e: PlayBackType): void)} */ this.addPlayBackListener = function (callback) { _this._playerCallback = callback; }; /** * remove listener for player. * @returns {void} */ this.removePlayBackListener = function () { _this._playerCallback = null; }; /** * start recording with param. * @param {string} uri audio uri. * @returns {Promise<string>} */ this.startRecorder = function (uri, audioSets, meteringEnabled) { return __awaiter(_this, void 0, void 0, function () { var error_1; return __generator(this, function (_a) { switch (_a.label) { case 0: if (!!this._isRecording) return [3 /*break*/, 4]; this._isRecording = true; _a.label = 1; case 1: _a.trys.push([1, 3, , 4]); return [4 /*yield*/, RNAudioRecorderPlayer.startRecorder(uri !== null && uri !== void 0 ? uri : 'DEFAULT', audioSets, meteringEnabled !== null && meteringEnabled !== void 0 ? meteringEnabled : false)]; case 2: return [2 /*return*/, _a.sent()]; case 3: error_1 = _a.sent(); this._isRecording = false; throw error_1; case 4: return [2 /*return*/, 'Already recording']; } }); }); }; /** * Pause recording. * @returns {Promise<string>} */ this.pauseRecorder = function () { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) { if (!this._hasPausedRecord) { this._hasPausedRecord = true; return [2 /*return*/, RNAudioRecorderPlayer.pauseRecorder()]; } return [2 /*return*/, 'Already paused recording.']; }); }); }; /** * Resume recording. * @returns {Promise<string>} */ this.resumeRecorder = function () { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) { if (this._hasPausedRecord) { this._hasPausedRecord = false; return [2 /*return*/, RNAudioRecorderPlayer.resumeRecorder()]; } return [2 /*return*/, 'Currently recording.']; }); }); }; /** * stop recording. * @returns {Promise<string>} */ this.stopRecorder = function () { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) { if (this._isRecording) { this._isRecording = false; this._hasPausedRecord = false; return [2 /*return*/, RNAudioRecorderPlayer.stopRecorder()]; } return [2 /*return*/, 'Already stopped']; }); }); }; /** * Resume playing. * @returns {Promise<string>} */ this.resumePlayer = function () { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) { if (!this._isPlaying) { return [2 /*return*/, 'No audio playing']; } if (this._hasPaused) { this._hasPaused = false; return [2 /*return*/, RNAudioRecorderPlayer.resumePlayer()]; } return [2 /*return*/, 'Already playing']; }); }); }; this.playerCallback = function (event) { if (_this._playerCallback) { _this._playerCallback(event); } if (event.isFinished) { _this.stopPlayer(); } }; /** * Start playing with param. * @param {string} uri audio uri. * @param {Record<string, string>} httpHeaders Set of http headers. * @returns {Promise<string>} */ this.startPlayer = function (uri, httpHeaders) { return __awaiter(_this, void 0, void 0, function () { var myModuleEvt; return __generator(this, function (_a) { if (!uri) { uri = 'DEFAULT'; } if (!this._playerSubscription) { if (Platform.OS === 'android') { this._playerSubscription = DeviceEventEmitter.addListener('rn-playback', this.playerCallback); } else { myModuleEvt = new NativeEventEmitter(RNAudioRecorderPlayer); this._playerSubscription = myModuleEvt.addListener('rn-playback', this.playerCallback); } } if (!this._isPlaying || this._hasPaused) { this._isPlaying = true; this._hasPaused = false; return [2 /*return*/, RNAudioRecorderPlayer.startPlayer(uri, httpHeaders)]; } return [2 /*return*/]; }); }); }; /** * Stop playing. * @returns {Promise<string>} */ this.stopPlayer = function () { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) { if (this._isPlaying) { this._isPlaying = false; this._hasPaused = false; return [2 /*return*/, RNAudioRecorderPlayer.stopPlayer()]; } return [2 /*return*/, 'Already stopped playing']; }); }); }; /** * Pause playing. * @returns {Promise<string>} */ this.pausePlayer = function () { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) { if (!this._isPlaying) { return [2 /*return*/, 'No audio playing']; } if (!this._hasPaused) { this._hasPaused = true; return [2 /*return*/, RNAudioRecorderPlayer.pausePlayer()]; } return [2 /*return*/]; }); }); }; /** * Seek to. * @param {number} time position seek to in millisecond. * @returns {Promise<string>} */ this.seekToPlayer = function (time) { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) { return [2 /*return*/, RNAudioRecorderPlayer.seekToPlayer(time)]; }); }); }; /** * Set volume. * @param {number} setVolume set volume. * @returns {Promise<string>} */ this.setVolume = function (volume) { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) { if (volume < 0 || volume > 1) { throw new Error('Value of volume should be between 0.0 to 1.0'); } return [2 /*return*/, RNAudioRecorderPlayer.setVolume(volume)]; }); }); }; /** * Set playback speed. * @param {number} setPlaybackSpeed set playback speed. * @returns {Promise<string>} */ this.setPlaybackSpeed = function (playbackSpeed) { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) { return [2 /*return*/, RNAudioRecorderPlayer.setPlaybackSpeed(playbackSpeed)]; }); }); }; /** * Set subscription duration. Default is 0.5. * @param {number} sec subscription callback duration in seconds. * @returns {Promise<string>} */ this.setSubscriptionDuration = function (sec) { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) { return [2 /*return*/, RNAudioRecorderPlayer.setSubscriptionDuration(sec)]; }); }); }; } return AudioRecorderPlayer; }()); export default AudioRecorderPlayer;