# `Parlora.Channel`
[🔗](https://github.com/hfiguera/parlora/blob/v0.1.0/lib/parlora/channel.ex#L1)

Participant audio and playback controls, independent of device or transport.

# `arm_output_space`
*optional* 

```elixir
@callback arm_output_space(pid(), pid(), reference(), pos_integer(), non_neg_integer()) ::
  :ok | {:error, Parlora.Error.t()}
```

Optional one-shot hint when a frame fits the output queue in this playback epoch.

# `capabilities`

```elixir
@callback capabilities(pid()) ::
  {:ok, Parlora.Channel.Capabilities.t()} | {:error, Parlora.Error.t()}
```

# `close`

```elixir
@callback close(pid(), String.t(), term()) :: :ok | {:error, Parlora.Error.t()}
```

# `control`

```elixir
@callback control(
  pid(),
  String.t(),
  {:suppress_output, boolean()} | {:clear_output, non_neg_integer()}
) ::
  :ok | {:error, Parlora.Error.t()}
```

# `read_audio`

```elixir
@callback read_audio(pid(), pos_integer()) ::
  {:ok, [Parlora.AudioFrame.t()]} | {:error, Parlora.Error.t()}
```

# `release_output_recovery`
*optional* 

```elixir
@callback release_output_recovery(pid(), non_neg_integer()) ::
  :ok | {:error, Parlora.Error.t()}
```

Optional, idempotent pressure hint: release recovery in this playback epoch only.

# `start_link`

```elixir
@callback start_link(Parlora.AdapterInit.t(), keyword()) ::
  {:ok, pid()} | {:error, Parlora.Error.t()}
```

# `write_audio`

```elixir
@callback write_audio(pid(), Parlora.AudioFrame.t()) :: :ok | {:error, Parlora.Error.t()}
```

---

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