Skip to content

Tags: ebitengine/oto

Tags

v3.5.0-alpha.8

Toggle v3.5.0-alpha.8's commit message
all: update PureGo

v3.5.0-alpha.7

Toggle v3.5.0-alpha.7's commit message
oto: bound and back off WASAPI device-recovery retries

restart() previously retried transient device errors (device
invalidated, resources invalidated, device switched, RPC disconnected)
without limit, attempting a full COM device re-acquisition every buffer
period. A device that never returned would spin forever, and a longer
outage hammered the audio service with back-to-back re-acquisitions.

Cap the re-acquisition attempts and back off the interval between them.
The mux is still drained at real time on its own cadence, decoupled from
the re-acquire interval, so recovery resumes near the current position
instead of replaying a backlog. Retrying is paused while suspended and
the attempt count resets on resume.

Updates #281

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

v3.5.0-alpha.6

Toggle v3.5.0-alpha.6's commit message
oto: run Suspend/Resume off the calling thread on darwin

Suspend and Resume held c.cond.L to flip the toPause/toResume flags. On
iOS the audio render goroutine can hold c.cond.L for several seconds
while resume() retries transient AVAudioSession errors (e.g.
AVAudioSessionErrorCodeCannotStartPlaying), which meant the platform UI
thread could block in applicationWillResignActive / applicationDidBecome
Active for the duration of those retries.

Spawn a small goroutine to perform the cond.L acquisition and flag flip
so the caller returns immediately. The underlying audio loop, retry
policy, and error semantics are unchanged; errors from the asynchronous
transition still surface via Err on the next poll.

Updates #93

v3.5.0-alpha.5

Toggle v3.5.0-alpha.5's commit message
oto: recover from kAudioQueueErr_QueueInvalidated on iOS

When mediaserverd resets (e.g. AVAudioSession media services were reset),
the AudioQueue is invalidated and AudioQueueStart / AudioQueueEnqueueBuffer /
AudioQueuePause start returning kAudioQueueErr_QueueInvalidated (-66671).
Plain retry on the same handle never recovers because the queue object
itself is dead.

Recover by disposing the dead queue and rebuilding a fresh one with new
buffers. The render callback now also filters by inAQ to drop any late
callbacks delivered for a just-disposed queue.

Updates #278

v3.5.0-alpha.4

Toggle v3.5.0-alpha.4's commit message
oto: set default PulseAudio latency to 100ms

Without an explicit latency, PulseAudio uses its own large default
buffer (~2s), which causes a noticeable delay before audio starts
playing.

Updates hajimehoshi/ebiten#3434

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

v3.5.0-alpha.3

Toggle v3.5.0-alpha.3's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
oto: add non-cgo linux pulseaudio driver (#277)

Add pulseaudio support on linux via github.com/jfreymuth/pulse that
does not require CGO to build.

Makes it the default linux audio option, falling back to the ALSA
implementation if CGO is enabled.

Written entirely with Copilot, plus some manual human testing via the
example app.

Closes #154

v3.5.0-alpha.2

Toggle v3.5.0-alpha.2's commit message
all: update dependencies

v3.5.0-alpha.1

Toggle v3.5.0-alpha.1's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
windows: ask WASAPI to use a higher quality resampler (#274)

The higher quality resampler is enabled with the
AUDCLNT_STREAMFLAGS_SRC_DEFAULT_QUALITY flag. Without it, a 44100 Hz
stream played on a 48000 Hz device sounded really bad, especially in the
bass frequencies.

Updates #215

v3.5.0-alpha

Toggle v3.5.0-alpha's commit message
all: v3.5.0-alpha released

v3.4.0

Toggle v3.4.0's commit message
all: v3.4.0 released