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
Functions
@spec play(Dala.Socket.t(), String.t(), keyword()) :: Dala.Socket.t()
Play an audio file. Stops any currently playing audio first.
Options:
loop: boolean(defaultfalse)volume: float 0.0–1.0(default1.0)
Result arrives as:
{:audio, :playback_finished, %{path: path}}{:audio, :playback_error, %{reason: reason}}
@spec set_volume(Dala.Socket.t(), float()) :: Dala.Socket.t()
Adjust playback volume (0.0–1.0) without stopping playback.
@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)
@spec stop_playback(Dala.Socket.t()) :: Dala.Socket.t()
Stop the currently playing audio.
@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: ...}}.