@siteed/expo-audio-studio
Version:
Comprehensive audio processing library for React Native and Expo with recording, analysis, visualization, and streaming capabilities across iOS, Android, and web
67 lines • 2.54 kB
JavaScript
import { LegacyEventEmitter } from 'expo-modules-core';
import ExpoAudioStreamModule from './ExpoAudioStreamModule';
// Create a single emitter instance
const emitter = new LegacyEventEmitter(ExpoAudioStreamModule);
/**
* Trims an audio file based on the provided options.
*
* @experimental This API is experimental and not fully optimized for production use.
* Performance may vary based on file size and device capabilities.
* Future versions may include breaking changes.
*
* @param options Configuration options for the trimming operation
* @param progressCallback Optional callback to receive progress updates
* @returns Promise resolving to the trimmed audio file information, including processing time
*/
export async function trimAudio(options, progressCallback) {
// Validation
if (!options.fileUri) {
throw new Error('fileUri is required');
}
const mode = options.mode ?? 'single';
if (mode === 'single') {
if (options.startTimeMs === undefined &&
options.endTimeMs === undefined) {
throw new Error('At least one of startTimeMs or endTimeMs must be provided in single mode');
}
}
else if (mode === 'keep' || mode === 'remove') {
if (!options.ranges || options.ranges.length === 0) {
throw new Error('ranges must be provided and non-empty for keep or remove modes');
}
}
else {
throw new Error(`Invalid mode: ${mode}. Must be 'single', 'keep', or 'remove'`);
}
// Set up progress event listener if callback is provided
let subscription;
if (progressCallback) {
subscription = emitter.addListener('TrimProgress', (event) => {
progressCallback(event);
});
}
try {
const result = await ExpoAudioStreamModule.trimAudio(options);
return result;
}
finally {
if (subscription) {
subscription.remove();
}
}
}
/**
* Simplified version of trimAudio that returns only the URI of the trimmed file.
*
* @experimental This API is experimental and not fully optimized for production use.
* Performance may vary based on file size and device capabilities.
* Future versions may include breaking changes.
*
* @param options Configuration options for the trimming operation
* @returns Promise resolving to the URI of the trimmed audio file
*/
export async function trimAudioSimple(options) {
const result = await trimAudio(options);
return result.uri;
}
//# sourceMappingURL=trimAudio.js.map