From 7fc4cde76f50f2a313ace4aa6fbc84160a52276d Mon Sep 17 00:00:00 2001 From: Hans Dijkema Date: Wed, 25 Feb 2026 09:58:51 +0100 Subject: [PATCH] - --- lib/linux-x86_64/libao-play-async.so | Bin 16576 -> 16624 bytes libao/c/ao-play-async/ao_playasync.c | 21 +++++++++++++++++---- libao/c/ao-play-async/ao_playasync.h | 5 ++++- libao/libao-async-ffi.rkt | 2 ++ 4 files changed, 23 insertions(+), 5 deletions(-) diff --git a/lib/linux-x86_64/libao-play-async.so b/lib/linux-x86_64/libao-play-async.so index f50f3ea005f2ab225702f5ac792843a2500a382d..126ce844fc0d0046017c0b87501aef1cd49fd6d3 100755 GIT binary patch delta 2101 zcmZWqeN0nV6o2DKGTGwv4>!Tig=K$0F$J*_jJmk~~DT*MB+}=iX1B$>5KnZ(c zL+#}m&&0u>Y8!9NrG0Y#!0(?INncX~y2XH#;7r4L)Y!k1XO9+8of)SEOeyB2+~&{j zbp9}VIDIsJ51Lq8L`d-x5{98v&c5A-W;nJfz??zMV)TpzKc;d!pJXfQDV5E~K$N|s z?((SmdR1R)R}=|vF%+r&1gGfxBfMrU(ZAet$iJs;Z_lf~fWNy7-d%5lm(pI_q1X^6 zm1#zQMnz=444=Z%G|YZgHz3QYOphvC{QgYZiKD9AljFy>vdlXXd-?_KMPoZlJmAY} zCcEH^tO`;LGg+m%<QLm7`i3YZJfIO-pp;AGnhQn!5&cvwq6^n#TerHe zy5oI^MJBKYGY|%a;H2nK)G?~qb4>_&aMG|>DftVmvN$s43`X}fI&|ehlVw#hW>9V*282k8aW} z(jMGfO#?TFTwVxU8Uo53(N9RVA08aIt%GrSZh zUG1ZG1 zp_`Tx#0JnF%N5+BMO;!+7KOfX8oa7>r5xeX56>g9jN<^1Gx@g&Yjt>7eDEZ5T-la9|q*tVQJ3m0tsV&X+g zunUi1*tWJXQ*|10wFlkvxIdl<8hIp1A@}^1%M5eTej@E;-kV40?P9`t?!F`qBYIzDaNdL3Zza&YEmFnjtsTlDRqJZdqAW5Bw_IXL_N8E*Y4l#^4g?RjLNfHr{J(Q%S zcyQY>^cuwLh|P$0O!5GW7eWVqoIphc@jMW|h{T`-*Vkbu&)E-RTBk9M#K^^u0L~HU z4B@&DqP&9_G0`YBbL)+7vzs&1*wLlwT85!J=5YprtaOl1fyXrpO}M@fzLoh+ zT{PiE`^J*{2C;x_ETn%CeY=2n(ERjM@f=iCaim*bkICzYK&m(xuS$igDhs&^ zQRIK4j7E#^TNb`pX45kIg()N-q=>z`k>z~dZHwQMHs7H)y7s`Z#v0jQ^A(FtL3Rwa^lzj9#z>$er GIsOCdbCF5_ delta 1972 zcmZWqT}%{L6rMXQ%MR@V!!9f!Ewcz=fx^1{3WyHcm9fPLZAkZ_El^D(jX$vwYfME9 zMx6{zg`>u&R+DONO#Rzh*Z2U6Eo#)lOJfrs@IjeG+pb9M*4j?bojbd!?M?3e=KS1q zzH{!(o#;+7wv+7h5qY?@UWhn2b3}%F{en|qf^+zYUyzcRAf5TCl?X#j;D(@-Kh<#d z?uCozpLyHbwv4Y2SA0J*vgqJ5>Oi-o<0LrkI0raKhnF8HqB=TUASSsSYk#=AJtY!* z04;oeSV;;IvJQ^eJh{a=%&V0FcN8&`OXD8Gl+DvHlg-puEbDwsLai76vny)tI^kiC z+rkaW6$DP#rNNMWORJ5m!HpSKkZ*<$BF|**4NJG*lx^HQmhA5Bb<(odT5?}rFZPJ% zJ`8uHoN|l^3(sbB^W=5t$!sGXa56JMB$&=D&-c;ziWbzh_7Fl$lQT*$Q(0{fL5Zu@ zDOnCtWkU8rud7IwsGp*>I}oFa+U_%PLXLZ)t&{4hJ;uUDF)X2BV>IkdmuIQkrz>jb z?a>7oUT^x#FcdWy8{DpQn_t1?${|Ia(2JNlN)@Xo6>a5hmhl!f&Oo`l07CA<1jCrg zaF09Stbc~_C`t4yhwt1HISu#SZ<0D_%qk-F(3Mpzo%oaaXxw0o?-M41IxX};8BNiq z$?fn()}j|yq0{JI7g9U`53(BU-IQ%Mlx0`t&r9XF*>q7>u-e18DS{QZQ=E`Pur<3o z@1v(?f(Y96HA=a=n6`RzvY!4FX0w~fQmFLgx)d$B7SHK@C4Ix#C{LsBhIc*LJ8m#` zx-vMHL#sIThZ#&)G+96}*7AF29kT#e6d_`Hu+jmd2BWUZ*YHvTyM<)@vBdQTaA zxIj_2>&QDet@ho)6Tr4&cU3${t#eXac?ZR5_0}>*2;U`6zelOy;h-fNr_*ER?PNMe zWgcUkaQPdwoR`X|M=ZX}#n_t1(iJ}VZ?sKF~rTk8OAi?#wUhh z!-K8<-7ty}zeao&aSm|}k9SWC^4kT1w}iwX;4R4=KqB#v9`kc(7Q%h=5?bK3c%FQzy+E+18MIQu~;EFg!V6xVNI z1+GKTTR6XEHL^9Ysl>jEiG7EVeF|2w?YX#{67~q%d*CL<+6zD9dM;cs|6=Nh-~+uP zN2GTb9cc`>#UNG|5Do&BUBm~&_}mX?Dp!eDQ<#GVoCKoZ@13M~G7iHqHd3^Lad;@E zd@S7K|C|@ilF>YalgCv3AXa(uBD7^V7Bk?UAX4iSH!Q8HB>AwZ%8yKrRDGGZ&bpFU zTCRPVh+Wn2UiI?--Sd|%^Fz2)-6bUMZ78iNhPs+e@)iVYJmdp&-30`nKcmkuR%0WD z_!DuFDbp6EtC)m8A(|}lzX%6voB8nW`s+Md1Rae__!xna#!Atb%;?3jAEp}p;xVg7 zaV!I|$)6hU+@u{|YpN3@tFIEMP4%hqW?xMSUvFAY$N-4Veu2xis)rTLd+^1WYW9l` hFVn>_CoC>r!s8p%A=e91Ei;NRj8b4Blbpz^;2)aWdDQ>_ diff --git a/libao/c/ao-play-async/ao_playasync.c b/libao/c/ao-play-async/ao_playasync.c index 54f2815..a3c8966 100644 --- a/libao/c/ao-play-async/ao_playasync.c +++ b/libao/c/ao-play-async/ao_playasync.c @@ -43,6 +43,7 @@ typedef struct _queue_ { void *buf; int buflen; double at_second; + double music_duration; struct _queue_ *next; struct _queue_ *prev; } Queue_t; @@ -63,6 +64,7 @@ typedef struct { pthread_t thread; #endif double at_second; + double music_duration; ao_play_func_t ao_play_f; int buf_size; } AO_Handle; @@ -106,7 +108,7 @@ static void add(AO_Handle *h, Queue_t *elem) h->buf_size += elem->buflen; } -static Queue_t *new_elem(int command, double at_second, int buf_len, void *buf) +static Queue_t *new_elem(int command, double at_second, double music_duration, int buf_len, void *buf) { Queue_t *q = (Queue_t *) malloc(sizeof(Queue_t)); void *new_buf; @@ -118,6 +120,7 @@ static Queue_t *new_elem(int command, double at_second, int buf_len, void *buf) new_buf = NULL; } q->at_second = at_second; + q->music_duration = music_duration; q->buf = new_buf; q->buflen = buf_len; q->command = command; @@ -220,7 +223,7 @@ void ao_stop_async(void *ao_handle) MUTEX_LOCK(h->mutex); clear(h); - Queue_t *q = new_elem(STOP, 0.0, 0, NULL); + Queue_t *q = new_elem(STOP, 0.0, 0.0, 0, NULL); add(h, q); MUTEX_UNLOCK(h->mutex); @@ -236,10 +239,10 @@ void ao_stop_async(void *ao_handle) free(h); } -void ao_play_async(void *ao_handle, double at_second, int buf_size, void *mem) +void ao_play_async(void *ao_handle, double at_second, double music_duration, int buf_size, void *mem) { AO_Handle *h = (AO_Handle *) ao_handle; - Queue_t *q = new_elem(PLAY, at_second, buf_size, mem); + Queue_t *q = new_elem(PLAY, at_second, music_duration, buf_size, mem); MUTEX_LOCK(h->mutex); add(h, q); MUTEX_UNLOCK(h->mutex); @@ -262,6 +265,16 @@ double ao_is_at_second_async(void *ao_handle) return s; } + +double ao_music_duration_async(void *ao_handle) +{ + AO_Handle *h = (AO_Handle *) ao_handle; + MUTEX_LOCK(h->mutex); + double duration = h->at_second; + MUTEX_UNLOCK(h->mutex); + return duration; +} + int ao_bufsize_async(void *ao_handle) { AO_Handle *h = (AO_Handle *) ao_handle; diff --git a/libao/c/ao-play-async/ao_playasync.h b/libao/c/ao-play-async/ao_playasync.h index 696bfa1..287f7d0 100644 --- a/libao/c/ao-play-async/ao_playasync.h +++ b/libao/c/ao-play-async/ao_playasync.h @@ -13,9 +13,12 @@ AOPLAYASYNC_EXPORT void *ao_create_async(void *ao_handle, void *ao_play_f); AOPLAYASYNC_EXPORT void ao_stop_async(void *handle); -AOPLAYASYNC_EXPORT void ao_play_async(void *handle, double at_second, int buf_size, void *mem); +AOPLAYASYNC_EXPORT void ao_play_async(void *handle, double at_second, double music_duration, int buf_size, void *mem); AOPLAYASYNC_EXPORT void ao_clear_async(void *handle); + AOPLAYASYNC_EXPORT double ao_is_at_second_async(void *handle); +AOPLAYASYNC_EXPORT double ao_music_duration_async(void *handle); + AOPLAYASYNC_EXPORT int ao_bufsize_async(void *handle); #endif // AO_PLAYASYNC_H diff --git a/libao/libao-async-ffi.rkt b/libao/libao-async-ffi.rkt index 3882956..a0ca304 100644 --- a/libao/libao-async-ffi.rkt +++ b/libao/libao-async-ffi.rkt @@ -32,6 +32,8 @@ ;extern double ao_is_at_second_async(void *handle); (define-libao-async ao_is_at_second_async(_fun _libao-async-handle-pointer -> _double)) + + ;extern int ao_bufsize_async(void *handle); (define-libao-async ao_bufsize_async(_fun _libao-async-handle-pointer -> _int))