## Documentation Index

Fetch the complete documentation index at: [/llms.txt](https://developer.sanas.ai/llms.txt)

Use this file to discover all available pages before exploring further.

Your application interacts with two interfaces: `IRemoteSDK` (created once per process) and `IAudioProcessor` (one per live audio stream).

## `IRemoteSDK`

The top-level object. Create one per process with the `CreateRemoteSDK()` factory, initialise it once, then use it to create and destroy audio processors.

| Method                     | Signature                                                                             | Description                                                                                                                                     |
|----------------------------|-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------|
| `Initialize`               | `InitSDKResult Initialize(const InitParams&)`                                      | Authenticate and connect. Call once; a second call returns `kAlreadyInitialized`.                                                              |
| `CreateAudioProcessor`     | `shared_ptr<IAudioProcessor> CreateAudioProcessor(const AudioParams&, CreateProcessorResult&, ProcessorStateCallback, TranscriptCallback)` | Open a stream. Starts in `kInitializing` and transitions to `kReady` asynchronously. The state and transcript callbacks are optional.            |
| `DestroyAudioProcessor`    | `DestroyProcessorResult DestroyAudioProcessor(shared_ptr<IAudioProcessor>)`        | Close a stream and release its resources.                                                                                                     |
| `Shutdown`                 | `ShutdownSDKResult Shutdown()`                                                      | Release the SDK. Destroys any processors you forgot to release. Call last.                                                                      |
| `IsInitialized`            | `bool IsInitialized()`                                                              | Whether `Initialize` has succeeded.                                                                                                          |
| `GetActiveProcessorCount`  | `size_t GetActiveProcessorCount()`                                                  | Number of live processors.                                                                                                                    |

```cpp
auto sdk = CreateRemoteSDK();          // factory function
InitParams init; init.apiKey = "...";
sdk->Initialize(init);
// ... create processors ...
sdk->Shutdown();
```

`sanas::remote::GetSDKVersion()` is a free function (returns `const char*`) available without an SDK instance.

## `IAudioProcessor`

Represents one live audio stream. Create one per concurrent call or session; each runs independently.

| Method                     | Signature                               | Description                                                                                          |
|----------------------------|-----------------------------------------|------------------------------------------------------------------------------------------------------|
| `ProcessSamples`           | `void ProcessSamples(const std::vector<float>& in, std::vector<float>& out)` | Send one frame of audio and receive the processed frame. Synchronous — blocks for one frame. Only call when `kReady`.                               |
| `GetState`                | `ProcessorState GetState()`            | Current state, checked instantly.                                                                    |
| `GetNextStateChange`      | `bool GetNextStateChange(ProcessorStateChange&)` | Drain the next queued state change (non-blocking). Returns `false` when the queue is empty.         |
| `WaitForStateChange`      | `bool WaitForStateChange(ProcessorStateChange&, int timeoutMs)` | Block until the next state change or timeout. Use a dedicated monitor thread — never the audio thread.                                           |
| `UpdateLanguageConfig`     | `UpdateLanguageResult UpdateLanguageConfig(const LanguageConfig&)` | Switch the source/target language pair on a `kReady` processor without reconnecting.                                                               |

Keep the `shared_ptr<IAudioProcessor>` alive for as long as you use the processor, and never call `DestroyAudioProcessor` or `Shutdown` from inside a callback — see [Threading & Lifetime Rules](https://developer.sanas.ai/API-Reference/Cpp-SDK/Guides/Threading-and-Lifetime).
