> ## Documentation Index
> Fetch the complete documentation index at: https://developer.audioshake.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Quickstart

> Run your first stem separation with the Local Inference SDK

## Prerequisites

* Client ID and Client Secret from AudioShake ([request access](mailto:info@audioshake.ai))
* A `.crypt` model file provided by AudioShake
* Platform requirements met — see [System Requirements](/sdk/requirements)

## File-based separation

Use `SourceSeparationTask` for file-to-file processing:

```cpp theme={null}
#include "AudioShakeSDK.h"

AudioFileReader* input = new AudioFileReader("input.wav");
WAVOutput* output = new WAVOutput("./output/");

SourceSeparationTask task(
    "your_client_id",
    "your_client_secret",
    input,
    output,
    "path/to/model.crypt"
);

void onProgress(SourceSeparationTask* task, double progress, void* data) {
    printf("Progress: %.0f%%\n", progress * 100);
}

if (!task.run(onProgress)) {
    fprintf(stderr, "Error: %s\n", task.getErrorMessage());
}
```

## Streaming separation

Use `RingBufferInput` and `RingBufferOutput` for real-time or streaming use cases:

```cpp theme={null}
RingBufferInput* input = new RingBufferInput(4096, true, 44100);
RingBufferOutput* output = new RingBufferOutput(4096, false);

SourceSeparationTask task(
    "your_client_id",
    "your_client_secret",
    input,
    output,
    "path/to/model.crypt"
);
```

Write audio frames into the input ring buffer, then read separated stems from the output ring buffer as processing proceeds.

## Choosing a chunk size

Chunk size controls the trade-off between latency and throughput. Durations are approximate and vary by model.

| Flag                    | Approx. duration | Use when                 |
| ----------------------- | ---------------- | ------------------------ |
| `chunkNormal` (default) | \~3 sec          | Batch or file processing |
| `chunk2X`               | \~1.5 sec        | Moderate latency         |
| `chunk4X`               | \~0.75 sec       | Low latency              |
| `chunk8X`               | \~375 ms         | Real-time                |
| `chunk16X`              | \~185 ms         | Ultra low latency        |
| `chunk32X`              | \~92 ms          | Ultra low latency        |
| `chunk64X`              | \~46 ms          | Lowest latency           |

Smaller chunks reduce latency but increase CPU/GPU overhead per unit of audio.
