audio-analysis-core
Version:
React Native audio analysis library with waveform extraction and full audio analysis
166 lines (130 loc) • 4.22 kB
Markdown
# Audio Analysis Core
A React Native library for audio analysis with waveform extraction and comprehensive audio feature extraction.
## Features
- **Waveform Extraction**: Extract waveform data from audio files
- **Full Audio Analysis**: Comprehensive audio analysis including spectrum, RMS, zero-crossing rate, and more
- **TypeScript Support**: Full TypeScript definitions included
- **Cross-Platform**: Works on both iOS and Android
## Installation
```bash
npm install audio-analysis-core
# or
yarn add audio-analysis-core
```
### iOS Setup
```bash
cd ios && pod install && cd ..
```
### Android Setup
No additional setup required for Android.
## Usage
### Basic Waveform Extraction
```typescript
import { extractWaveform } from 'audio-analysis-core';
const waveform = await extractWaveform({
fileUri: 'file://path/to/audio.mp3',
pointsPerSecond: 50, // points per second
startTimeMs: 0, // start time in milliseconds
endTimeMs: 10000, // end time in milliseconds (optional)
decodingOptions: {
sampleRate: 44100,
channels: 1,
bitDepth: 16
}
});
console.log(waveform.data); // Array of waveform values
console.log(waveform.duration); // Duration in seconds
console.log(waveform.sampleRate); // Sample rate
console.log(waveform.channels); // Number of channels
console.log(waveform.bitDepth); // Bit depth
```
### Full Audio Analysis
```typescript
import { analyzeAudio } from 'audio-analysis-core';
const analysis = await analyzeAudio({
fileUri: 'file://path/to/audio.mp3',
segmentDurationMs: 100, // duration of each data point in milliseconds
startTimeMs: 0, // start time in milliseconds
endTimeMs: 10000, // end time in milliseconds (optional)
features: {
energy: true,
rms: true,
zcr: true,
spectralCentroid: true,
mfcc: false
},
decodingOptions: {
sampleRate: 44100,
channels: 1,
bitDepth: 16
}
});
console.log(analysis.dataPoints); // Array of data points
console.log(analysis.durationMs); // Duration in milliseconds
console.log(analysis.sampleRate); // Sample rate
console.log(analysis.numberOfChannels); // Number of channels
```
## API Reference
### `extractWaveform(options)`
Extract waveform data from an audio file (similar to expo-audio-stream's extractPreview).
**Parameters:**
- `options.fileUri` (string): Path to the audio file
- `options.pointsPerSecond` (number, optional): Points per second to extract (default: 50)
- `options.startTimeMs` (number, optional): Start time in milliseconds (default: 0)
- `options.endTimeMs` (number, optional): End time in milliseconds (default: entire file)
- `options.decodingOptions` (DecodingOptions, optional): Decoding configuration
**Returns:** Promise<WaveformData>
### `analyzeAudio(options)`
Perform comprehensive audio analysis (similar to expo-audio-stream's extractAudioAnalysis).
**Parameters:**
- `options.fileUri` (string): Path to the audio file
- `options.segmentDurationMs` (number, optional): Duration of each data point in milliseconds (default: 100)
- `options.startTimeMs` (number, optional): Start time in milliseconds (default: 0)
- `options.endTimeMs` (number, optional): End time in milliseconds (default: entire file)
- `options.features` (AudioFeatures, optional): Features to extract
- `options.decodingOptions` (DecodingOptions, optional): Decoding configuration
**Returns:** Promise<AudioAnalysisResult>
## Types
```typescript
interface WaveformData {
data: number[];
duration: number;
sampleRate: number;
channels: number;
bitDepth: number;
}
interface AudioFeatures {
energy?: boolean;
rms?: boolean;
zcr?: boolean;
spectralCentroid?: boolean;
mfcc?: boolean;
waveform?: boolean;
spectrum?: boolean;
}
interface DecodingOptions {
sampleRate?: number;
channels?: number;
bitDepth?: number;
}
interface AudioAnalysisDataPoint {
amplitude: number;
rms: number;
db: number;
energy?: number;
zcr?: number;
spectralCentroid?: number;
mfcc?: number[];
}
interface AudioAnalysisResult {
segmentDurationMs: number;
durationMs: number;
bitDepth: number;
samples: number;
numberOfChannels: number;
sampleRate: number;
dataPoints: AudioAnalysisDataPoint[];
}
```
## License
MIT