# `Codex.Realtime.Audio`
[🔗](https://github.com/nshkrdotcom/codex_sdk/blob/v0.18.0/lib/codex/realtime/audio.ex#L1)

Audio format utilities for realtime sessions.

Supports PCM16 (24kHz), G.711 u-law, and G.711 A-law formats.

# `atom_format`

```elixir
@type atom_format() :: :pcm16 | :g711_ulaw | :g711_alaw
```

# `format`

```elixir
@type format() :: atom_format() | string_format()
```

# `string_format`

```elixir
@type string_format() :: String.t()
```

# `base64_to_pcm16`

```elixir
@spec base64_to_pcm16(String.t()) :: binary() | {:error, :invalid_base64}
```

Decode base64 to PCM16 audio bytes.

## Examples

    iex> Codex.Realtime.Audio.base64_to_pcm16("AAD/fw==")
    <<0, 0, 255, 127>>

# `bytes_per_sample`

```elixir
@spec bytes_per_sample(format()) :: 1 | 2
```

Get bytes per sample for an audio format.

## Examples

    iex> Codex.Realtime.Audio.bytes_per_sample(:pcm16)
    2

    iex> Codex.Realtime.Audio.bytes_per_sample(:g711_ulaw)
    1

# `calculate_audio_length_ms`

```elixir
@spec calculate_audio_length_ms(format(), binary()) :: float()
```

Calculate the duration of audio data in milliseconds.

## Examples

    iex> audio = :binary.copy(<<0>>, 48_000)  # 1 second of PCM16
    iex> Codex.Realtime.Audio.calculate_audio_length_ms(:pcm16, audio)
    1000.0

# `normalize_format`

```elixir
@spec normalize_format(format()) :: :pcm16 | :g711_ulaw | :g711_alaw
```

Normalize audio format to atom.

## Examples

    iex> Codex.Realtime.Audio.normalize_format("pcm16")
    :pcm16

    iex> Codex.Realtime.Audio.normalize_format(:g711_ulaw)
    :g711_ulaw

# `pcm16_to_base64`

```elixir
@spec pcm16_to_base64(binary()) :: String.t()
```

Encode PCM16 audio bytes to base64.

## Examples

    iex> Codex.Realtime.Audio.pcm16_to_base64(<<0, 0, 255, 127>>)
    "AAD/fw=="

# `sample_rate`

```elixir
@spec sample_rate(format()) :: 8000 | 24000
```

Get the sample rate for an audio format.

## Examples

    iex> Codex.Realtime.Audio.sample_rate(:pcm16)
    24000

    iex> Codex.Realtime.Audio.sample_rate(:g711_ulaw)
    8000

---

*Consult [api-reference.md](api-reference.md) for complete listing*
