# provider-elevenlabs/isolation (ElevenLabs Audio Isolation)

Remove background noise from audio files to extract clean speech using ElevenLabs audio isolation.

## Quick Start

```bash
npx promptfoo@latest init --example provider-elevenlabs/isolation
cd provider-elevenlabs/isolation
export ELEVENLABS_API_KEY=your_api_key_here
npx promptfoo@latest eval
```

## What this tests

- **Noise removal**: Extract clean speech from noisy audio
- **Audio quality**: Compare original vs isolated audio size/quality
- **Output formats**: MP3 at different bitrates (128kbps, 192kbps)
- **Cost tracking**: Monitor per-file processing costs

## How it works

Audio isolation takes a noisy audio file and returns a cleaned version with:

- Background noise removed
- Speech preserved and enhanced
- Consistent audio quality
- Reduced file size (noise-free)

## Use Cases

- **Podcast cleanup**: Remove background noise from recordings
- **Interview enhancement**: Clean up phone/video call audio
- **STT preprocessing**: Improve transcription accuracy
- **Voiceover repair**: Fix audio recorded in noisy environments
- **Call center QA**: Enhance customer service call recordings

## Supported Formats

**Input formats**: MP3, WAV, FLAC, OGG, M4A, OPUS, WebM

**Output formats**:

- `mp3_44100_128` - Standard quality (128kbps)
- `mp3_44100_192` - High quality (192kbps)
- `pcm_44100` - Uncompressed PCM

## Configuration

### Basic isolation (MP3)

```yaml
providers:
  - id: elevenlabs:isolation:basic
    label: Audio Isolation (MP3)
    config:
      outputFormat: mp3_44100_128

tests:
  - vars:
      audioFile: path/to/noisy-audio.mp3
```

### High quality output

```yaml
providers:
  - id: elevenlabs:isolation:hq
    label: Audio Isolation (HQ)
    config:
      outputFormat: mp3_44100_192
```

## Testing Assertions

```yaml
tests:
  - description: Verify isolation succeeds
    vars:
      audioFile: examples/provider-elevenlabs/stt/audio/sample1.mp3
    assert:
      - type: javascript
        value: output.includes('isolated successfully')
      - type: not-contains
        value: error
      - type: cost
        threshold: 1.00 # Max $1.00 per file
```

## What to look for in results

The response includes:

- **Isolated audio**: Base64-encoded cleaned audio file
- **Original size**: Size of input audio file
- **Isolated size**: Size of cleaned audio (typically smaller)
- **Format**: Output audio format (mp3, pcm, etc.)
- **Latency**: Processing time in milliseconds
- **Cost**: Estimated processing cost

## Best Practices

1. **Source quality**: Use highest quality source audio available
2. **Noise type**: Works best with constant background noise (AC, fan, hum)
3. **Multiple speakers**: Preserves all speech, removes only noise
4. **Pre-processing**: For music removal, consider manual editing first

## Audio Quality Comparison

Isolation typically provides:

- **Signal-to-Noise Ratio (SNR)**: 15-25 dB improvement
- **File size reduction**: 10-30% smaller (noise-free)
- **Speech clarity**: Enhanced intelligibility
- **Frequency response**: Preserved natural voice tones

## Cost Information

Audio isolation pricing is based on audio duration:

- ~$0.10 per minute of audio
- Free tier: Varies by plan

The provider automatically tracks costs in evaluation results.

## Common Issues

### "Audio isolated successfully" but quality unchanged

**Possible causes:**

- Source audio already very clean
- Noise level too low to detect
- Music/speech mixed with background (try manual editing)

**Solution**: Check original audio quality - isolation works best with noisy recordings.

### Large file processing timeout

**Solution**: Increase timeout in config:

```yaml
config:
  timeout: 180000 # 3 minutes
```

### Unsupported audio format

**Solution**: Convert to supported format using ffmpeg:

```bash
ffmpeg -i input.video -vn -acodec mp3 output.mp3
```

## Pipeline Integration

### Isolation → Transcription

```yaml
# Step 1: Isolate noisy audio
providers:
  - id: elevenlabs:isolation

# Step 2: Transcribe cleaned audio
providers:
  - id: elevenlabs:stt
    config:
      audioFile: '{{previousOutput.audio}}'
```

### Isolation → Alignment

```yaml
# Step 1: Clean audio
providers:
  - id: elevenlabs:isolation

# Step 2: Generate subtitles from clean audio
providers:
  - id: elevenlabs:alignment
    config:
      audioFile: '{{previousOutput.audio}}'
      transcript: 'Your transcript here'
```

## Related Examples

- [ElevenLabs STT](../stt/) - Transcribe audio to text
- [ElevenLabs Alignment](../alignment/) - Generate subtitles

## Resources

- [ElevenLabs Audio Isolation Docs](https://elevenlabs.io/docs/api-reference/audio-isolation)
- [Audio Quality Metrics](https://en.wikipedia.org/wiki/Audio_quality_measurement)
- [Noise Reduction Techniques](https://en.wikipedia.org/wiki/Noise_reduction)
