Skip to content

Commit b72bf18

Browse files
hajimehoshiclaude
andcommitted
oto: recover from AVAudioSessionErrorCodeUnspecified at AudioQueueStart
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent 1ae0f85 commit b72bf18

2 files changed

Lines changed: 6 additions & 2 deletions

File tree

api_darwin.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ const (
2424
avAudioSessionErrorCodeCannotStartPlaying = 0x21706c61 // '!pla'
2525
avAudioSessionErrorCodeCannotInterruptOthers = 0x21696e74 // '!int'
2626
avAudioSessionErrorCodeSiriIsRecording = 0x73697269 // 'siri'
27+
avAudioSessionErrorCodeUnspecified = 0x77686174 // 'what'
2728
)
2829

2930
const (

driver_darwin.go

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,9 @@ func newContext(sampleRate int, channelCount int, format mux.Format, bufferSizeI
141141
var retryCount int
142142
try:
143143
if osstatus := _AudioQueueStart(c.audioQueue, nil); osstatus != noErr {
144-
if osstatus == avAudioSessionErrorCodeCannotStartPlaying && retryCount < 100 {
144+
if (osstatus == avAudioSessionErrorCodeCannotStartPlaying ||
145+
osstatus == avAudioSessionErrorCodeUnspecified) &&
146+
retryCount < 100 {
145147
// TODO: use sleepTime() after investigating when this error happens.
146148
time.Sleep(10 * time.Millisecond)
147149
retryCount++
@@ -254,7 +256,8 @@ func (c *context) resume() error {
254256
try:
255257
if osstatus := _AudioQueueStart(c.audioQueue, nil); osstatus != noErr {
256258
if (osstatus == avAudioSessionErrorCodeCannotStartPlaying ||
257-
osstatus == avAudioSessionErrorCodeCannotInterruptOthers) &&
259+
osstatus == avAudioSessionErrorCodeCannotInterruptOthers ||
260+
osstatus == avAudioSessionErrorCodeUnspecified) &&
258261
retryCount < 30 {
259262
// It is uncertain that this error is temporary or not. Then let's use exponential-time sleeping.
260263
time.Sleep(sleepTime(retryCount))

0 commit comments

Comments
 (0)