react-native-compressor-enyo
Version:
This library compress image, video and audio
56 lines (48 loc) • 2.19 kB
JavaScript
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