UNPKG

react-native-compressor-enyo

Version:
56 lines (48 loc) 2.19 kB
import { NativeModules } from 'react-native'; import { AUDIO_BITRATE, DEFAULT_COMPRESS_AUDIO_OPTIONS, checkUrlAndOptions } from '../utils'; const NativeAudio = NativeModules.Compressor; const Audio = { compress: async function (url) { let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DEFAULT_COMPRESS_AUDIO_OPTIONS; try { const checkUrlAndOptionsResult = await checkUrlAndOptions(url, options); if (!checkUrlAndOptionsResult.isCorrect) { throw checkUrlAndOptionsResult.message; } else { // Get resulting output file path // Get media details // const mediaDetails: any = await getDetails(url).catch(() => null); const mediaDetails = { bitrate: 0 }; // Initialize bitrate let bitrate = DEFAULT_COMPRESS_AUDIO_OPTIONS.bitrate; if (mediaDetails && mediaDetails.bitrate) { // Check and return the appropriate bitrate according to quality expected for (let i = 0; i < AUDIO_BITRATE.length; i++) { // Check a particular bitrate to return its nearest lower according to quality if (mediaDetails.bitrate > AUDIO_BITRATE[i]) { if (i + 2 < AUDIO_BITRATE.length) { if (options.quality === 'low') bitrate = AUDIO_BITRATE[i + 2];else if (options.quality === 'medium') bitrate = AUDIO_BITRATE[i + 1];else bitrate = AUDIO_BITRATE[i]; } else if (i + 1 < AUDIO_BITRATE.length) { if (options.quality === 'low') bitrate = AUDIO_BITRATE[i + 1];else bitrate = AUDIO_BITRATE[i]; } else bitrate = AUDIO_BITRATE[i]; break; } // Check if the matching bitrate is the last in the array if (mediaDetails.bitrate <= AUDIO_BITRATE[AUDIO_BITRATE.length - 1]) { bitrate = AUDIO_BITRATE[AUDIO_BITRATE.length - 1]; break; } } } return NativeAudio.compress_audio(url, { bitrate, quality: options.quality }); } } catch (error) { throw error.message; } } }; export default Audio; //# sourceMappingURL=index.js.map