From 98108e6f35ec1a0f7621610c541c47ce7eee4443 Mon Sep 17 00:00:00 2001 From: Hans Dijkema Date: Wed, 25 Feb 2026 15:11:15 +0100 Subject: [PATCH] - --- libao/libao-async.rkt | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/libao/libao-async.rkt b/libao/libao-async.rkt index d8ce323..0b73753 100644 --- a/libao/libao-async.rkt +++ b/libao/libao-async.rkt @@ -45,6 +45,7 @@ [queue #:mutable] [stopped #:mutable] [paused #:mutable] + pause-sem ) #:transparent ) @@ -60,9 +61,9 @@ (let ((p (ao-shm-paused shm))) (mutex-unlock (ao-shm-mutex shm)) (when p - (sleep 0.25) - (player))) - + (os-semaphore-wait (ao-shm-pause-sem shm))) + ) + (os-semaphore-wait (ao-shm-queue-sem shm)) (mutex-lock (ao-shm-mutex shm)) (if (= (queue-length (ao-shm-queue shm)) 0) @@ -107,7 +108,13 @@ ) (define (ao-player ao_device) - (let ((shm (make-ao-shm (make-mutex) ao_device 0.0 0.0 0 (make-os-semaphore) (make-queue) #f #f))) + (let ((shm (make-ao-shm (make-mutex) + ao_device + 0.0 0.0 0 + (make-os-semaphore) (make-queue) + #f + #f (make-os-semaphore)))) + (os-semaphore-post (ao-shm-pause-sem shm)) (ao-player* shm) shm ) @@ -185,6 +192,15 @@ ) (define (ao_pause_async shm pause) - (set-ao-shm-paused! shm pause) + (if pause + (begin + (displayln "Pausing ao play thread") + (os-semaphore-wait (ao-shm-pause-sem shm)) + (set-ao-shm-paused! shm pause)) + (begin + (displayln "Continuing ao play thread") + (set-ao-shm-paused! shm pause) + (os-semaphore-post (ao-shm-pause-sem shm))) + ) )