# AudioResampler

<a id="audioresampler"></a>

# AudioResampler

```cpp
#include <icy/av/audioresampler.h>

struct AudioResampler
```

[Defined in src/av/include/icy/av/audioresampler.h:39](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/audioresampler.h#L39)

Converts audio samples between different formats, sample rates, and channel layouts.

## Public Attributes

| Return | Name | Description |
|--------|------|-------------|
| `SwrContext *` | [`ctx`](#ctx-2)  | the conversion context |
| [`AudioCodec`](https://auscaster.com/icey/docs/api-reference/icy-av-AudioCodec.md#audiocodec) | [`iparams`](#iparams-2)  | input audio parameters |
| [`AudioCodec`](https://auscaster.com/icey/docs/api-reference/icy-av-AudioCodec.md#audiocodec) | [`oparams`](#oparams-2)  | output audio parameters |
| `uint8_t **` | [`outSamples`](#outsamples)  | the output samples buffer |
| `int` | [`outNumSamples`](#outnumsamples)  | the number of samples currently in the output buffer |
| `int` | [`outBufferSize`](#outbuffersize)  | the number of bytes currently in the buffer |
| `int` | [`maxNumSamples`](#maxnumsamples)  | the maximum number of samples that can be stored in |
| `enum AVSampleFormat` | [`inSampleFmt`](#insamplefmt)  | input sample format |
| `enum AVSampleFormat` | [`outSampleFmt`](#outsamplefmt)  | output sample format |

---

<a id="ctx-2"></a>

### ctx

```cpp
SwrContext * ctx
```

[Defined in src/av/include/icy/av/audioresampler.h:69](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/audioresampler.h#L69)

the conversion context

---

<a id="iparams-2"></a>

### iparams

```cpp
AudioCodec iparams
```

Type: [`AudioCodec`](https://auscaster.com/icey/docs/api-reference/icy-av-AudioCodec.md#audiocodec)

[Defined in src/av/include/icy/av/audioresampler.h:71](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/audioresampler.h#L71)

input audio parameters

---

<a id="oparams-2"></a>

### oparams

```cpp
AudioCodec oparams
```

Type: [`AudioCodec`](https://auscaster.com/icey/docs/api-reference/icy-av-AudioCodec.md#audiocodec)

[Defined in src/av/include/icy/av/audioresampler.h:72](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/audioresampler.h#L72)

output audio parameters

---

<a id="outsamples"></a>

### outSamples

```cpp
uint8_t ** outSamples
```

[Defined in src/av/include/icy/av/audioresampler.h:73](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/audioresampler.h#L73)

the output samples buffer

---

<a id="outnumsamples"></a>

### outNumSamples

```cpp
int outNumSamples
```

[Defined in src/av/include/icy/av/audioresampler.h:74](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/audioresampler.h#L74)

the number of samples currently in the output buffer

---

<a id="outbuffersize"></a>

### outBufferSize

```cpp
int outBufferSize
```

[Defined in src/av/include/icy/av/audioresampler.h:75](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/audioresampler.h#L75)

the number of bytes currently in the buffer

---

<a id="maxnumsamples"></a>

### maxNumSamples

```cpp
int maxNumSamples
```

[Defined in src/av/include/icy/av/audioresampler.h:76](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/audioresampler.h#L76)

the maximum number of samples that can be stored in

---

<a id="insamplefmt"></a>

### inSampleFmt

```cpp
enum AVSampleFormat inSampleFmt
```

[Defined in src/av/include/icy/av/audioresampler.h:77](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/audioresampler.h#L77)

input sample format

---

<a id="outsamplefmt"></a>

### outSampleFmt

```cpp
enum AVSampleFormat outSampleFmt
```

[Defined in src/av/include/icy/av/audioresampler.h:78](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/audioresampler.h#L78)

output sample format

## Public Methods

| Return | Name | Description |
|--------|------|-------------|
|  | [`AudioResampler`](#audioresampler-1)  |  |
|  | [`~AudioResampler`](#audioresampler-2) `noexcept` |  |
|  | [`AudioResampler`](#audioresampler-3)  | Deleted constructor. |
| [`AudioResampler`](#audioresampler) & | [`operator=`](#operator-156)  | Deleted assignment operator. |
|  | [`AudioResampler`](#audioresampler-4)  | Deleted constructor. |
| [`AudioResampler`](#audioresampler) & | [`operator=`](#operator-157)  | Deleted assignment operator. |
| `void` | [`open`](#open-5)  | Initialise the libswresample context using iparams and oparams. Throws std::runtime_error if the context is already open or if required parameters (channels, sample rate, format) are missing. |
| `void` | [`close`](#close-16)  | Free the libswresample context and release the output sample buffer. |
| `int` | [`resample`](#resample)  | Convert the input samples to the output format. NOTE: Input buffers must be contiguous, therefore only interleaved input formats are accepted at this point. |

---

<a id="audioresampler-1"></a>

### AudioResampler

```cpp
AudioResampler(const AudioCodec & iparams = AudioCodec(), const AudioCodec & oparams = AudioCodec())
```

[Defined in src/av/include/icy/av/audioresampler.h:41](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/audioresampler.h#L41)

---

<a id="audioresampler-2"></a>

### ~AudioResampler

`noexcept`

```cpp
~AudioResampler() noexcept
```

[Defined in src/av/include/icy/av/audioresampler.h:43](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/audioresampler.h#L43)

---

<a id="audioresampler-3"></a>

### AudioResampler

```cpp
AudioResampler(const AudioResampler &) = delete
```

[Defined in src/av/include/icy/av/audioresampler.h:45](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/audioresampler.h#L45)

Deleted constructor.

---

<a id="operator-156"></a>

### operator=

```cpp
AudioResampler & operator=(const AudioResampler &) = delete
```

[Defined in src/av/include/icy/av/audioresampler.h:46](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/audioresampler.h#L46)

Deleted assignment operator.

---

<a id="audioresampler-4"></a>

### AudioResampler

```cpp
AudioResampler(AudioResampler &&) = delete
```

[Defined in src/av/include/icy/av/audioresampler.h:47](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/audioresampler.h#L47)

Deleted constructor.

---

<a id="operator-157"></a>

### operator=

```cpp
AudioResampler & operator=(AudioResampler &&) = delete
```

[Defined in src/av/include/icy/av/audioresampler.h:48](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/audioresampler.h#L48)

Deleted assignment operator.

---

<a id="open-5"></a>

### open

```cpp
void open()
```

[Defined in src/av/include/icy/av/audioresampler.h:53](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/audioresampler.h#L53)

Initialise the libswresample context using iparams and oparams. Throws std::runtime_error if the context is already open or if required parameters (channels, sample rate, format) are missing.

---

<a id="close-16"></a>

### close

```cpp
void close()
```

[Defined in src/av/include/icy/av/audioresampler.h:56](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/audioresampler.h#L56)

Free the libswresample context and release the output sample buffer.

---

<a id="resample"></a>

### resample

```cpp
int resample(uint8_t ** inSamples, int inNumSamples)
```

[Defined in src/av/include/icy/av/audioresampler.h:67](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/audioresampler.h#L67)

Convert the input samples to the output format. NOTE: Input buffers must be contiguous, therefore only interleaved input formats are accepted at this point.

Converted samples are accessible via the `outSamples` class member.

#### Returns
The number of converted samples, or zero if samples were internally buffered.

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `inSamples` | `uint8_t **` | Pointer to the input sample buffer array. |
| `inNumSamples` | `int` | The number of input samples per channel. |
