Dala.Audio (dala v0.0.2)

Copy Markdown View Source

Microphone recording and audio playback.

Recording requires :microphone permission (Dala.Permissions.request/2). Playback requires no permission.

Recording

Dala.Audio.start_recording(socket, format: :aac, quality: :medium)
Dala.Audio.stop_recording(socket)
# → handle_info({:audio, :recorded, %{path: path, duration: seconds}}, socket)
# → handle_info({:audio, :error,    reason},                            socket)

Playback

Dala.Audio.play(socket, "/path/to/file.m4a")
Dala.Audio.play(socket, "/path/to/file.m4a", loop: true, volume: 0.8)
Dala.Audio.stop_playback(socket)
Dala.Audio.set_volume(socket, 0.5)
# → handle_info({:audio, :playback_finished, %{path: path}}, socket)
# → handle_info({:audio, :playback_error,    %{reason: reason}}, socket)

iOS: AVAudioPlayer / AVPlayer. Android: MediaPlayer.

Summary

Functions

Play an audio file. Stops any currently playing audio first.

Adjust playback volume (0.0–1.0) without stopping playback.

Start recording audio from the microphone.

Stop the currently playing audio.

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

Types

format()

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

quality()

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

Functions

play(socket, path, opts \\ [])

@spec play(Dala.Socket.t(), String.t(), keyword()) :: Dala.Socket.t()

Play an audio file. Stops any currently playing audio first.

Options:

  • loop: boolean (default false)
  • volume: float 0.0–1.0 (default 1.0)

Result arrives as:

  • {:audio, :playback_finished, %{path: path}}
  • {:audio, :playback_error, %{reason: reason}}

set_volume(socket, volume)

@spec set_volume(Dala.Socket.t(), float()) :: Dala.Socket.t()

Adjust playback volume (0.0–1.0) without stopping playback.

start_recording(socket, opts \\ [])

@spec start_recording(
  Dala.Socket.t(),
  keyword()
) :: Dala.Socket.t()

Start recording audio from the microphone.

Options:

  • format: :aac | :wav (default :aac)

  • quality: :low | :medium | :high (default :medium)

stop_playback(socket)

@spec stop_playback(Dala.Socket.t()) :: Dala.Socket.t()

Stop the currently playing audio.

stop_recording(socket)

@spec stop_recording(Dala.Socket.t()) :: Dala.Socket.t()

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