# `Mob.Audio`
[🔗](https://github.com/genericjam/mob/blob/main/lib/mob/audio.ex#L1)

Microphone recording.

Requires `:microphone` permission (request via `Mob.Permissions.request/2`).

Usage:

    Mob.Audio.start_recording(socket, format: :aac, quality: :medium)
    # ... user records ...
    Mob.Audio.stop_recording(socket)

Result arrives as:

    handle_info({:audio, :recorded, %{path: path, duration: seconds}}, socket)
    handle_info({:audio, :error,    reason},                            socket)

iOS: `AVAudioRecorder`. Android: `MediaRecorder`.

# `format`

```elixir
@type format() :: :aac | :wav
```

# `quality`

```elixir
@type quality() :: :low | :medium | :high
```

# `start_recording`

```elixir
@spec start_recording(
  Mob.Socket.t(),
  keyword()
) :: Mob.Socket.t()
```

Start recording audio from the microphone.

Options:
  - `format: :aac | :wav` (default `:aac`)
  - `quality: :low | :medium | :high` (default `:medium`)

# `stop_recording`

```elixir
@spec stop_recording(Mob.Socket.t()) :: Mob.Socket.t()
```

Stop the in-progress recording and save it to a temp file.
Result arrives as `{:audio, :recorded, %{path: ..., duration: ...}}`.

---

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