# AudioBuffer

<a id="audiobuffer"></a>

# AudioBuffer

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

struct AudioBuffer
```

[Defined in src/av/include/icy/av/audiobuffer.h:31](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/audiobuffer.h#L31)

FIFO buffer for queuing audio samples between encoding stages.

## Public Attributes

| Return | Name | Description |
|--------|------|-------------|
| `AVAudioFifo *` | [`fifo`](#fifo)  | Underlying FFmpeg audio FIFO handle. |

---

<a id="fifo"></a>

### fifo

```cpp
AVAudioFifo * fifo
```

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

Underlying FFmpeg audio FIFO handle.

## Public Methods

| Return | Name | Description |
|--------|------|-------------|
|  | [`AudioBuffer`](#audiobuffer-1)  |  |
|  | [`~AudioBuffer`](#audiobuffer-2) `noexcept` |  |
|  | [`AudioBuffer`](#audiobuffer-3)  | Deleted constructor. |
| [`AudioBuffer`](#audiobuffer) & | [`operator=`](#operator-147)  | Deleted assignment operator. |
|  | [`AudioBuffer`](#audiobuffer-4)  | Deleted constructor. |
| [`AudioBuffer`](#audiobuffer) & | [`operator=`](#operator-148)  | Deleted assignment operator. |
| `void` | [`alloc`](#alloc)  | Allocate the audio FIFO buffer. |
| `void` | [`reset`](#reset-11)  | Discard all samples currently held in the FIFO without freeing the buffer. |
| `void` | [`close`](#close-8)  | Free the underlying AVAudioFifo buffer. |
| `void` | [`write`](#write-18)  | Write samples into the FIFO buffer. |
| `bool` | [`read`](#read-4)  | Read samples from the FIFO buffer. |
| `int` | [`available`](#available-2) `const` | Return the number of samples per channel currently available in the FIFO. |

---

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

### AudioBuffer

```cpp
AudioBuffer()
```

[Defined in src/av/include/icy/av/audiobuffer.h:33](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/audiobuffer.h#L33)

---

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

### ~AudioBuffer

`noexcept`

```cpp
~AudioBuffer() noexcept
```

[Defined in src/av/include/icy/av/audiobuffer.h:34](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/audiobuffer.h#L34)

---

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

### AudioBuffer

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

[Defined in src/av/include/icy/av/audiobuffer.h:36](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/audiobuffer.h#L36)

Deleted constructor.

---

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

### operator=

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

[Defined in src/av/include/icy/av/audiobuffer.h:37](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/audiobuffer.h#L37)

Deleted assignment operator.

---

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

### AudioBuffer

```cpp
AudioBuffer(AudioBuffer &&) = delete
```

[Defined in src/av/include/icy/av/audiobuffer.h:38](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/audiobuffer.h#L38)

Deleted constructor.

---

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

### operator=

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

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

Deleted assignment operator.

---

<a id="alloc"></a>

### alloc

```cpp
void alloc(const std::string & sampleFmt, int channels, int numSamples = 1024)
```

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

Allocate the audio FIFO buffer.

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `sampleFmt` | `const std::string &` | The sample format name (e.g. "s16", "fltp"). |
| `channels` | `int` | The number of audio channels. |
| `numSamples` | `int` | The initial buffer capacity in samples per channel. |

---

<a id="reset-11"></a>

### reset

```cpp
void reset()
```

[Defined in src/av/include/icy/av/audiobuffer.h:49](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/audiobuffer.h#L49)

Discard all samples currently held in the FIFO without freeing the buffer.

---

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

### close

```cpp
void close()
```

[Defined in src/av/include/icy/av/audiobuffer.h:52](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/audiobuffer.h#L52)

Free the underlying AVAudioFifo buffer.

---

<a id="write-18"></a>

### write

```cpp
void write(void ** samples, int numSamples)
```

[Defined in src/av/include/icy/av/audiobuffer.h:58](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/audiobuffer.h#L58)

Write samples into the FIFO buffer.

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `samples` | `void **` | Array of per-channel sample buffers. |
| `numSamples` | `int` | The number of samples per channel to write. |

---

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

### read

```cpp
bool read(void ** samples, int numSamples)
```

[Defined in src/av/include/icy/av/audiobuffer.h:65](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/audiobuffer.h#L65)

Read samples from the FIFO buffer.

#### Returns
True if enough samples were available.

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `samples` | `void **` | Array of per-channel sample buffers to fill. |
| `numSamples` | `int` | The number of samples per channel to read. |

---

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

### available

`const`

```cpp
int available() const
```

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

Return the number of samples per channel currently available in the FIFO. 
#### Returns
The number of available samples, or zero if the buffer is not allocated.
