Audio format utilities for realtime sessions.
Supports PCM16 (24kHz), G.711 u-law, and G.711 A-law formats.
Summary
Functions
Decode base64 to PCM16 audio bytes.
Get bytes per sample for an audio format.
Calculate the duration of audio data in milliseconds.
Normalize audio format to atom.
Encode PCM16 audio bytes to base64.
Get the sample rate for an audio format.
Types
@type atom_format() :: :pcm16 | :g711_ulaw | :g711_alaw
@type format() :: atom_format() | string_format()
@type string_format() :: String.t()
Functions
Decode base64 to PCM16 audio bytes.
Examples
iex> Codex.Realtime.Audio.base64_to_pcm16("AAD/fw==")
<<0, 0, 255, 127>>
@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 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
@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
Encode PCM16 audio bytes to base64.
Examples
iex> Codex.Realtime.Audio.pcm16_to_base64(<<0, 0, 255, 127>>)
"AAD/fw=="
@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