Advertisement
Guest User

Untitled

a guest
Mar 25th, 2011
141
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scheme 4.15 KB | None | 0 0
  1. (import foreign)
  2. (require-extension posix)
  3.  
  4. (foreign-declare "#include <jack/jack.h>")
  5.  
  6. ;;;;;;;;;;;
  7. ;; TYPES ;;
  8. ;;;;;;;;;;;
  9.  
  10. ;structs
  11. (define-foreign-type jack_client (struct "_jack_client"))
  12. (define-foreign-type jack_port (struct "_jack_port"))
  13.  
  14. ;enums
  15. (define-foreign-type jack_options (enum "JackOptions"))
  16. (define-constant JackNullOption 0)
  17. (define-constant JackNoStartServer 1)
  18. (define-constant JackUseExactName 2)
  19. (define-constant JackServerName 4)
  20. (define-constant JackLoadName 8)
  21. (define-constant JackLoadInit 16)
  22.  
  23. (define-foreign-type jack_status (enum "JackStatus"))
  24. (define-constant JackFailure 1)
  25. (define-constant JackInvalidOption 2)
  26. (define-constant JackNameNotUnique 4)
  27. (define-constant JackServerStarted 8)
  28. (define-constant JackServerFailed 16)
  29. (define-constant JackServerError 32)
  30. (define-constant JackNoSuchClient 64)
  31. (define-constant JackLoadFailure 128)
  32. (define-constant JackInitFailure 256)
  33. (define-constant JackShmFailure 512)
  34. (define-constant JackVersionError 1024)
  35. (define-constant JackBackendError 2048)
  36. (define-constant JackClientZombie 4096)
  37.  
  38. (define-foreign-type jack_port_flags (enum "JackPortFlags"))
  39. (define-constant JackPortIsInput 1)
  40. (define-constant JackPortIsOutput 2)
  41. (define-constant JackPortIsPhysical 4)
  42. (define-constant JackPortCanMonitor 8)
  43. (define-constant JackPortIsTerminal 16)
  44. (define-constant JackPortIsActive 32)
  45.  
  46. ; constants
  47. (define-constant JACK_DEFAULT_AUDIO_TYPE "32 bit float mono audio")
  48. (define-constant JACK_DEFAULT_MIDI_TYPE "8 bit raw midi")
  49.  
  50. ; aliases
  51. (define-foreign-type jack_nframes unsigned-int32)
  52. (define-foreign-type jack_process_callback
  53.   (function int (jack_nframes (c-pointer void))))
  54.  
  55.  
  56. ;;;;;;;;;;;;;;;;;;;;;;;;;;
  57. ;; manipulating clients ;;
  58. ;;;;;;;;;;;;;;;;;;;;;;;;;;
  59.  
  60. (define jack_client_open
  61.   (foreign-lambda
  62.    (c-pointer jack_client)
  63.    "jack_client_open"
  64.    c-string ;; client_name
  65.    jack_options ;; options
  66.    (c-pointer jack_status)))
  67.  
  68. (define jack_client_close
  69.   (foreign-lambda
  70.    int
  71.    "jack_client_close"
  72.    (c-pointer jack_client)))
  73.  
  74. (define jack_client_name_size
  75.   (foreign-lambda
  76.    int
  77.    "jack_client_name_size"))
  78.  
  79. (define jack_get_client_name
  80.   (foreign-lambda
  81.    c-string
  82.    "jack_get_client_name"
  83.    (c-pointer jack_client)))
  84.  
  85. (define jack_activate
  86.   (foreign-safe-lambda
  87.    int
  88.    "jack_activate"
  89.    (c-pointer jack_client)))
  90.  
  91. (define jack_deactivate
  92.   (foreign-lambda
  93.    int
  94.    "jack_deactivate"
  95.    (c-pointer jack_client)))
  96.  
  97. ;;;;;;;;;;;;;;;;;;;;;;;;
  98. ;; manipulating ports ;;
  99. ;;;;;;;;;;;;;;;;;;;;;;;;
  100.  
  101.  
  102. (define jack_port_register
  103.   (foreign-lambda
  104.    (c-pointer jack_port)
  105.    "jack_port_register"
  106.    (c-pointer jack_client)
  107.    c-string ;; port_name
  108.    c-string ;; port_type
  109.    unsigned-long ;; flags
  110.    unsigned-long)) ;; buffersize
  111.  
  112. (define jack_port_unregister
  113.   (foreign-lambda
  114.    int
  115.    "jack_port_unregister"
  116.    (c-pointer jack_client)
  117.    (c-pointer jack_port)))
  118.  
  119. (define jack_port_get_buffer
  120.   (foreign-lambda
  121.    (c-pointer void)
  122.    "jack_port_get_buffer"
  123.    (c-pointer jack_port)
  124.    jack_nframes))
  125.  
  126. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  127. ;; manipulating callbacks ;;
  128. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  129.  
  130. (define jack_set_process_callback
  131.   (foreign-lambda
  132.    int
  133.    "jack_set_process_callback"
  134.    (c-pointer jack_client)
  135.    jack_process_callback
  136.    (c-pointer void)))
  137.  
  138. ;;;;;;;;;;
  139. ;; test ;;
  140. ;;;;;;;;;;
  141.  
  142. (define-external status jack_status)
  143. (define-external client (c-pointer jack_client))
  144.  
  145. (set! client (jack_client_open "pipo" JackNullOption (location status)))
  146.  
  147. ;; FIRST VERSION
  148. ;; ((foreign-lambda*
  149. ;;   void ()
  150. ;; "
  151. ;; int process(jack_nframes_t nframes, void* arg) { return 0; }
  152. ;; jack_set_process_callback(client, process, NULL);
  153. ;; "
  154. ;; ))
  155.  
  156. ;; SECOND VERSION
  157. ;; (define-external
  158. ;;   (my_callback (jack_nframes nframes) ((c-pointer void) arg))
  159. ;;   int
  160. ;;   0)
  161.  
  162. ;; ((foreign-lambda*
  163. ;;   void ()
  164. ;;   "jack_set_process_callback(client, my_callback, NULL);"))
  165.  
  166.  
  167. (define port
  168.   (jack_port_register client "out" JACK_DEFAULT_AUDIO_TYPE JackPortIsOutput 0))
  169.  
  170. (jack_activate client)
  171.  
  172. (sleep 1)
  173.  
  174. (jack_deactivate client)
  175.  
  176. (jack_port_unregister client port)
  177.  
  178. (jack_client_close client)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement