# `Membrane.RawAudio.SampleFormat`
[🔗](https://github.com/membraneframework/membrane_raw_audio_format/blob/v0.12.3/lib/membrane_raw_audio/sample_format.ex#L1)

This module defines sample formats used in `Membrane.RawAudio`
and some helpers to deal with them.

# `endianness_t`

```elixir
@type endianness_t() :: :le | :be | :any
```

# `sample_size_t`

```elixir
@type sample_size_t() :: 8 | 16 | 24 | 32 | 64
```

# `sample_type_t`

```elixir
@type sample_type_t() :: :s | :u | :f
```

# `t`

```elixir
@type t() ::
  :s8
  | :u8
  | :s16le
  | :u16le
  | :s16be
  | :u16be
  | :s24le
  | :u24le
  | :s24be
  | :u24be
  | :s32le
  | :u32le
  | :s32be
  | :u32be
  | :f32le
  | :f32be
  | :f64le
  | :f64be
```

# `deserialize`

```elixir
@spec deserialize(pos_integer()) :: t()
```

Converts positive integer containing serialized format to atom.

expects serialized format

returns format atom (See `t:t/0`)

# `from_tuple`

```elixir
@spec from_tuple({sample_type_t(), sample_size_t(), endianness_t()}) :: t()
```

Converts 3-tuple format to an equivalent atom form

# `serialize`

```elixir
@spec serialize(t()) :: pos_integer()
```

converts audio format to 32-bit unsigned integer consisting of (from oldest bit):
* first bit for type (int/float)
* then bit for encoding (unsigned/signed)
* then bit for endianity (little/big)
* then sequence of zeroes
* last 8 bits for size (in bits)

expects atom format

returns format encoded as integer

# `to_tuple`

```elixir
@spec to_tuple(t()) :: {sample_type_t(), sample_size_t(), endianness_t()}
```

Converts format atom to an equivalent 3-tuple form

# `values`

```elixir
@spec values() :: [t()]
```

---

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