#lang racket/base (require ffi/unsafe ffi/unsafe/define "private/utils.rkt" "libao-ffi.rkt" ) (provide ao_create_async ao_stop_async ao_play_async ao_is_at_second_async ao_music_duration_async ao_bufsize_async ao_clear_async ao_pause_async make-BufferInfo_t ) (define _BufferType_t (_enum '(ao = 1 flac = 2 mpg123 = 3 ao_ogg = 4 ))) ;#define AO_FMT_LITTLE 1 ;#define AO_FMT_BIG 2 ;#define AO_FMT_NATIVE 4 (define _Endian_t (_enum '(little-endian = 1 big-endian = 2 native-endian = 4 ) ) ) (define-cstruct _BufferInfo_t ( [type _BufferType_t] [sample_bits _int] [sample_rate _int] [channels _int] [endiannes _Endian_t] )) (define lib (get-lib '("ao-play-async" "libao-play-async") '(#f))) ;(define lib (ffi-lib "/home/hans/src/racket/racket-sound-lib/lib/linux-x86_64/libao-play-async.so")) (define-ffi-definer define-libao-async lib #:default-make-fail make-not-available) (define _libao-async-handle-pointer (_cpointer 'ao-async-handle)) ;extern int ao_async_version() (define-libao-async ao_async_version (_fun -> _int)) ;extern void *ao_create_async(void *ao_device, ); (define-libao-async ao_create_async(_fun _pointer _fpointer -> _libao-async-handle-pointer)) ;extern void ao_stop_async(void *handle); (define-libao-async ao_stop_async(_fun _libao-async-handle-pointer -> _void)) ;extern void ao_play_async(void *handle, double at_second, double music_duration, int buf_size, void *mem, BufferInfo_t info); (define-libao-async ao_play_async(_fun _libao-async-handle-pointer _double _double _uint32 _pointer _BufferInfo_t -> _void)) ;extern double ao_is_at_second_async(void *handle); (define-libao-async ao_is_at_second_async(_fun _libao-async-handle-pointer -> _double)) ;extern double ao_music_duration_async(void *handle); (define-libao-async ao_music_duration_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)) ;extern void ao_clear_async(void *handle); (define-libao-async ao_clear_async(_fun _libao-async-handle-pointer -> _void)) ;extern void ao_pause_async(void *handle, int pause); (define-libao-async ao_pause_async(_fun _libao-async-handle-pointer _int -> _void))