feat(VoiceServer): Add FIFO message queue to prevent overlapping audio #489
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Problem
When launching multiple subagents simultaneously (a common pattern in PAI workflows), each agent sends a voice notification as it starts. Since these notifications arrive at the VoiceServer nearly simultaneously, multiple
afplayprocesses spawn concurrently, resulting in garbled, overlapping audio output.Solution
This PR adds a server-side FIFO message queue that serializes voice playback:
try/finallyguard ensures processing flag resets even on errorsChanges
QueuedMessageinterface and queue state managementdrainQueueInOrder()andprocessQueue()functions/notifyand/paiendpoints to enqueue instead of play directlyqueue_positionandqueue_depth/healthendpoint shows queue statusTesting
Tested with concurrent curl requests - messages now play sequentially in arrival order.
Thank you for PAI - it's been incredibly useful. Happy to adjust anything based on your feedback.