Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (import foreign)
- (require-extension posix)
- (foreign-declare "#include <jack/jack.h>")
- ;;;;;;;;;;;
- ;; TYPES ;;
- ;;;;;;;;;;;
- ;structs
- (define-foreign-type jack_client (struct "_jack_client"))
- (define-foreign-type jack_port (struct "_jack_port"))
- ;enums
- (define-foreign-type jack_options (enum "JackOptions"))
- (define-constant JackNullOption 0)
- (define-constant JackNoStartServer 1)
- (define-constant JackUseExactName 2)
- (define-constant JackServerName 4)
- (define-constant JackLoadName 8)
- (define-constant JackLoadInit 16)
- (define-foreign-type jack_status (enum "JackStatus"))
- (define-constant JackFailure 1)
- (define-constant JackInvalidOption 2)
- (define-constant JackNameNotUnique 4)
- (define-constant JackServerStarted 8)
- (define-constant JackServerFailed 16)
- (define-constant JackServerError 32)
- (define-constant JackNoSuchClient 64)
- (define-constant JackLoadFailure 128)
- (define-constant JackInitFailure 256)
- (define-constant JackShmFailure 512)
- (define-constant JackVersionError 1024)
- (define-constant JackBackendError 2048)
- (define-constant JackClientZombie 4096)
- (define-foreign-type jack_port_flags (enum "JackPortFlags"))
- (define-constant JackPortIsInput 1)
- (define-constant JackPortIsOutput 2)
- (define-constant JackPortIsPhysical 4)
- (define-constant JackPortCanMonitor 8)
- (define-constant JackPortIsTerminal 16)
- (define-constant JackPortIsActive 32)
- ; constants
- (define-constant JACK_DEFAULT_AUDIO_TYPE "32 bit float mono audio")
- (define-constant JACK_DEFAULT_MIDI_TYPE "8 bit raw midi")
- ; aliases
- (define-foreign-type jack_nframes unsigned-int32)
- (define-foreign-type jack_process_callback
- (function int (jack_nframes (c-pointer void))))
- ;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;; manipulating clients ;;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;
- (define jack_client_open
- (foreign-lambda
- (c-pointer jack_client)
- "jack_client_open"
- c-string ;; client_name
- jack_options ;; options
- (c-pointer jack_status)))
- (define jack_client_close
- (foreign-lambda
- int
- "jack_client_close"
- (c-pointer jack_client)))
- (define jack_client_name_size
- (foreign-lambda
- int
- "jack_client_name_size"))
- (define jack_get_client_name
- (foreign-lambda
- c-string
- "jack_get_client_name"
- (c-pointer jack_client)))
- (define jack_activate
- (foreign-safe-lambda
- int
- "jack_activate"
- (c-pointer jack_client)))
- (define jack_deactivate
- (foreign-lambda
- int
- "jack_deactivate"
- (c-pointer jack_client)))
- ;;;;;;;;;;;;;;;;;;;;;;;;
- ;; manipulating ports ;;
- ;;;;;;;;;;;;;;;;;;;;;;;;
- (define jack_port_register
- (foreign-lambda
- (c-pointer jack_port)
- "jack_port_register"
- (c-pointer jack_client)
- c-string ;; port_name
- c-string ;; port_type
- unsigned-long ;; flags
- unsigned-long)) ;; buffersize
- (define jack_port_unregister
- (foreign-lambda
- int
- "jack_port_unregister"
- (c-pointer jack_client)
- (c-pointer jack_port)))
- (define jack_port_get_buffer
- (foreign-lambda
- (c-pointer void)
- "jack_port_get_buffer"
- (c-pointer jack_port)
- jack_nframes))
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;; manipulating callbacks ;;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- (define jack_set_process_callback
- (foreign-lambda
- int
- "jack_set_process_callback"
- (c-pointer jack_client)
- jack_process_callback
- (c-pointer void)))
- ;;;;;;;;;;
- ;; test ;;
- ;;;;;;;;;;
- (define-external status jack_status)
- (define-external client (c-pointer jack_client))
- (set! client (jack_client_open "pipo" JackNullOption (location status)))
- ;; FIRST VERSION
- ;; ((foreign-lambda*
- ;; void ()
- ;; "
- ;; int process(jack_nframes_t nframes, void* arg) { return 0; }
- ;; jack_set_process_callback(client, process, NULL);
- ;; "
- ;; ))
- ;; SECOND VERSION
- ;; (define-external
- ;; (my_callback (jack_nframes nframes) ((c-pointer void) arg))
- ;; int
- ;; 0)
- ;; ((foreign-lambda*
- ;; void ()
- ;; "jack_set_process_callback(client, my_callback, NULL);"))
- (define port
- (jack_port_register client "out" JACK_DEFAULT_AUDIO_TYPE JackPortIsOutput 0))
- (jack_activate client)
- (sleep 1)
- (jack_deactivate client)
- (jack_port_unregister client port)
- (jack_client_close client)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement